Çarşamba, Eylül 23, 2009

D Dilinde Dosya(File) İşlemlerine Örnek

D programlama dili ile ilgili ufak programlar paylaşmaya devam...

Başlangıç seviyesinde D dili ile nasıl dosya işlemi yapılabileceğine örnek teşkil etmesi açısında bir program. Temel düzeyde dosyaya yazma ve dosyadan okuma işlemleri yapılabiliyor. Eğer bu bana yetmez bana daha fazlası lazım derseniz DDili sitesinin Ali ÇEHRELİ tarafından hazırlanan D.ershane bölümünü veya Forumunu ziyaret etmenizi tavsiye ederim ;)

Program bu şekilde. Dilimin döndüğünce kod içerisinde hangi satırın ne işe yaradığını anlatmaya çalıştım.



import std.stdio;
import std.stream;
//din.readf() için
import std.cstream;
//system() için
import std.process;
//exists() için
import std.file;

/*İşletim sistemine göre
hangi fonksiyonun çalışacağına karar verir*/
version(Windows)
{
void ekranTemizle()
{
system("cls");
}
}
else version(linux)
{
void ekranTemizle()
{
system("clear");
}
}

char tusAl()
{
char tus;

do
{
din.read(tus);
} while(tus == '\n');

return tus;
}

//Kullanıcıdan alınan bilgiler dosyaya yazılır.
void dosyaYaz()
{
/*"FileMode.Append" dosya yoksa oluşturur ve açar.
Varsada sonuna eklemeye devam edecek şekilde
oluşturur ve açar.Okuma ve yazma işlemi
aynı anda yapılabilir.*/
auto dosya = new std.stream.File("ogrenciBilgi",FileMode.Append);
char[] ad;
char[] soyad;
char[] no;
char tus;

do
{
//Ekranı temizler
ekranTemizle();

write("Ad:");
din.readf(&ad);
write("Soyad:");
din.readf(&soyad);
write("No:");
din.readf(&no);

/*Kullanıcıdan alınan bilgiler
Dosyaya kaydedilir."%10.10s " ifadesi
verilerin dosyaya sabit aralıklar(boşluklar) ile
düzenli bir şekilde kaydedilmesini sağlar.*/
dosya.writef("%10.10s ",ad);
dosya.writef("%10.10s",soyad);
dosya.writefln("%10.10s",no);
writeln();
writeln("Kayıt Tamam...");
writeln("Yeni Kayıt girmek istermisiniz(E/H)?");
tus = tusAl();
}while(tus =='e' || tus=='E');
}

//Dosyadan veriler okunarak ekrana yazdırılır.
void dosyadanOku()
{
/*"FileMode.In" dosyayı sadece okuma işlemi
yapılabilecek şekilde açar.*/
auto dosya = new std.stream.File("ogrenciBilgi",FileMode.In);
char tus;

ekranTemizle();

/*Dosya sonuna gelene kadar veriler
satır satır okunarak ekran yazdırılır.*/
while(!dosya.eof())
{
char[] bilgi = dosya.readLine();
dout.writefln(bilgi);
}
writeln();
write("Ana menü icin Enter'a basin...");
din.readf(&tus);
}

char menu()
{
char tus;

ekranTemizle();

writeln("1-Ogrenci Kaydet");
writeln("2-Listele");
writeln("3-Cik");
writeln();
write("Birini seçin:");
tus = tusAl();

return tus;
}

int main()
{
char tus;

/*exist() fonksiyonu ile dosyanın daha önceden
oluşturulup oluşturulmadığını kontrol ediyorum.
Bu sayede program her çalıştırıldığında ogrenCiBilgi
adında dosya oluşturmayacak*/
if (!exists("ogrenciBilgi"))
{
auto dosya = new std.stream.File("ogrenciBilgi",FileMode.Append);
dosya.writef("%10.10s ","Ad");
dosya.writef("%10.10s","Soyad");
dosya.writefln("%10.10s","No");
dosya.writef("%10.10s","-------");
dosya.writef("%10.10s ","-------");
dosya.writefln("%10.10s","-------");
}

do
{
tus = menu();
switch(tus)
{
case '1':dosyaYaz();break;
case '2':dosyadanOku();break;
default:break;
}
}while(tus != '3');

return 0;
}

3 yorum:

Ufuk Şanlı dedi ki...

Esat ileride senin bu blogtaki bilgilerle kitap yazılır ya valla ellerine emeğine sağlık

Esat ARSLAN dedi ki...

Sağol :)

İleride yazarım belki bir kitap :D

Adsız dedi ki...

Çok güzel yazılar yazıyorsunuz.
D dilide çok güzel. Ancak siz sanırım D dilini bıraktınız. Sizin keyifli ve bilgili yazılarınız ile keşke D dili ile ilgili yazıları bir arada görebilsek.