Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

PROGRAMLAMA Dosyalama İşlemleri Doç. Dr. Murat ÇAKIROĞLU Sakarya Üniversitesi Mekatronik Mühendisliği.

Benzer bir sunumlar


... konulu sunumlar: "PROGRAMLAMA Dosyalama İşlemleri Doç. Dr. Murat ÇAKIROĞLU Sakarya Üniversitesi Mekatronik Mühendisliği."— Sunum transkripti:

1 PROGRAMLAMA Dosyalama İşlemleri Doç. Dr. Murat ÇAKIROĞLU Sakarya Üniversitesi Mekatronik Mühendisliği

2 Dosyalama İşlemleri Programlama dilleri dosya oluşturma, dosya silme, dosyadan bilgi okuma ve dosyaya bilgi ekleme gibi temel işlevler için gerekli komutları içerirler. Programlama dilinde klasik dosyalama yöntemleri sınıflandırılırlar: – Saklama türüne göre: İkili (binary) ve metin (text) – Kayıtlara erişim türüne göre: Sıralı (sequential) ve Rastgele (random)

3 Dosya Değişkeni Programlarda dosya işlemleri yapabilmek için bir dosya değişkeni işaretci (pointer) kullanılarak aşağıdaki gibi tanımlanır. – FILE *dosyaAdi ; // C-dili – fstream dosyaAdi; //C++ (#include ) Bilgisayar programı ile işletim sistemi dosyası arasında veri taşıyan bu değişken dosya açma, dosya kapatma, dosyaya veri ekleme ve dosyadan veri okuma işlemlerinde kullanılır.

4 Dosyalama İşlemleri Dosyalarla ilgili yapılan işlemlerde aşağıdaki adımlar takip edilir; – Dosyanın açılması – Dosya ile ilgili işlem yapılması ( kayıt okuma, yazma, düzeltme, silme gibi) – Dosyanın kapatılması Bu işlemleri C-dilinde şöyle ifade ederiz: FILE *dosya; /* dosya göstericisi */ dosya = fopen(const char dosya_adı, const char açma_amacımız);... dosya işlemleri... fclose(dosya); Bu işlemleri C-dilinde şöyle ifade ederiz: ifstream dosya; // ofstream dosya veya fstream dosya dosya.open(const char dosya_adı, const char açma_amacımız);... dosya işlemleri... dosya.close();

5 Dosya Açma Modları(C-dili)

6 Dosya Açma Modları(C++ dili) Dosya moduAnlamı ios:appDosya varsa içindeki değerler korunur ve yazılanlar dosyanın sonuna eklenir. Eğer dosya yoksa açılır. ios:inGiriş modudur. Bilgiler dosyadan okunur. Eğer dosya yoksa oluşturulamaz ve hata verir. ios:out:Çıkış modudur. Bilgiler dosyaya yazılır. Eğer dosya yoksa oluşturulur, varsa içindekiler silinir ve yeniden açılır ios:noreplaceEğer dosya varsa, yeniden açılmasını engeller. ios:nocreateEğer dosya varsa, oluşturulmasını engeller. ios:binaryİkili dosya formatıdır. Bu modda bilgiler yazı modu yerine ikili formatta yazılır. Belirtilmediği takdirde yazı modu geçerlidir.

7 Dosya İşlem Komutları fopen : Dosya açma komutudur. Örnek: “dosyam.dat” adlı bir dosyayı “r (read-okuma)” modunda açarak adresini fp isimli değişkende saklar. fp=fopen(“dosyam.dat”,”r”) ; //C-dilinde dosya açma fstream dosyam(“girdiler.dat”, ios::out); //C++ dilindeTanımlandığı yerde dosya açma

8 Dosya İşlem Komutları #include using namespace std; main(){ fstream dosyam("notlar.dat", ios::out); cout << dosyam.dat acildi.\n"; } #include main(){ FILE *dosyam; dosyam=fopen("notlar.txt","a+"); puts("notlar.txt acildi.\n"); fclose(dosyam); getchar(); }

9 Dosya İşlem Komutları Dosyanın açıldığının testi. fp=fopen(“dosyam.dat”,”r”) ; if(!fp) { printf(“Hata\n”;); } #include using namespace std; int main(){ fstream dosya; dosya.open("testfile.txt", ios::out); if (!dosya){ cout << "Dosya acma hatasi!" << endl; return 0; } cout << "Dosya basarili sekilde olusturuldu\n"; cout << "Dosya simdi kapatiliyor\n"; dosya.close(); }

10 Dosya İşlem Komutları (C-dili) fclose: Dosyayı kapatır. Örnek: fclose(fp); fprintf veya fputs(): Dosyaya veri yazar. Örnek: fputs(“Ali",fp); fprintf(fp, “Ali"); fscanf veya fgets(): Dosyadan veri okur. Örnek: fgets(str, 12, fp); fscanf(fp, "%s", str); feof(dosyaAdi): Dosya sonuna gelinip gelinmediğini kontrol eder. Örnek: while (!feof(fp)){ fscanf(fp, "%s", str); // Dosyadan Oku printf(" %s \n“, str); // ve Ekrana yaz } rename(): Dosya adını değiştirir. rename("eski.txt", "yeni.txt"); remove(): Belirtilen dosyayı siler. remove("eski.txt");

11 İsminizi dosyaya 5 kez yazan program #include void main(){ FILE *dosya; char str[100]; int i; dosya = fopen("Ad.txt", "w"); for (i=0; i<5; i++) { fprintf(dosya, "Murat\n"); } fclose(dosya); } Açma Modu: “w” write (yazma), “r” read (okuma), “a” append (ekleme), “w+”, “r+” ve “a+” hem okuma hem yazma, “b” binary (ikili, diğerleri ile birlikte kullanılır: “w+b” gibi)

12 Ad.txt dosyasının içeriğini okuyup ekrana yazan program #include void main(){ FILE *dosya; char str[100]; int i; dosya = fopen("Ad.txt", "r"); while (!feof(dosya)){ fscanf(dosya, "%s", str); printf("%s\n", str); } fclose(dosya); getchar(); } feof() :Dosya sonuna gelinmediği sürece tüm kayıtları tarar. feof fonksiyonu dosya sonuna gelinince true değer döndürür. fscanf komutu yerine fgetc fonksiyonu da dosyadan bir karakter (byte) veri okumada aşağıdaki gibi kullanılabilir. printf("%c", fgetc(dosya));

13 Klavyeden girilenleri alarak dosyaya ekleyen program (C) #include void main(){ FILE *d; char str[100]; d = fopen("metin1.txt", "w"); do { gets(str); fprintf(d, "%s\n", str); } while (strlen(str)); fclose(d); } Bir satır boş bırakılana kadar girilen tüm satırları dosyaya yazar scanf kullanımı boşluk karakterinde sorun çıkardığı için gets kullandık str = "" olduğunda strlen sıfır döndürür. while(0) döngüden çıkış anlamına gelir.

14 Dosyadaki verileri başka bir dosyaya kopyalayan program (C) #include void main(){ FILE *d1, *d2; char chr; d1 = fopen("metin1.txt", "r"); d2 = fopen("metin2.txt", "w"); while (1) { chr = fgetc(d1); if (feof(d1)) break; fputc(chr, d2); } fclose(d1); fclose(d2); } while (!feof(d1)) fputc(fgetc(d1), d2); Yukarıdaki kullanım d2'ye eof karakterini de yazar. Yani d2 dosyası, d1 dosyasından 1 byte fazla olur.

15 15 C++ dosyaya << operatörü ile veri yazma #include using namespace std; int main(){ fstream dosya; dosya.open("test.txt", ios::out); if (!dosya){ cout << "Dosya acma hatasi!" << endl; return 0; } cout << "Dosya basarili sekilde olusturuldu\n"; dosya<<"C++ dosyaya yazmak gayet kolay\n"; dosya<<"C ise biraz daha zor\n"; dosya.close(); }

16 16 C++ dosyaya << operatörü ile veri yazma #include using namespace std; int main(){ fstream dosya; float sayi = ; dosya.open("test.txt", ios::out); if (!dosya){ cout << "Dosya acma hatasi!" << endl; return 0; } dosya << sayi << endl; dosya.precision(5); dosya << sayi << endl; dosya.precision(4); dosya << sayi << endl; }

17 17 C++ dosyaya << operatörü ile veri yazma #include using namespace std; int main(){ fstream dosya("table.txt", ios::out); int sayilar[3][3] = { 2897, 5, 837, 34, 7, 1623, 390, 3456, 12 }; for (int satir = 0; satir < 3; satir++){ for (int sutun= 0; sutun < 3; sutun++){ dosya << setw(4) << sayilar[satir][sutun]<< " "; } dosya << endl; } dosya.close(); }

18 18 C++’da >> operatörü ile dosyadan veri okuma #include using namespace std; int main(){ fstream dosya; dosya.open("test.txt", ios::out); if (!dosya){ cout << "Dosya acma hatasi!" << endl; return 0; } cout << "Dosya basarili sekilde olusturuldu\n"; dosya<<"C++ dosyaya yazmak gayet kolay\n"; dosya<<"C ise biraz daha zor\n"; dosya.close(); }

19 19 C++’da >> operatörü dosya sonuna kadar veri okuma #include using namespace std; int main(){ string isim; fstream dosya("isimler.txt", ios::in); do{ dosya>>isim; cout << isim << endl; }while (!dosya.eof()); dosya.close(); cout << "\nBitti\n"; }

20 20 dosya.getline(cumle, 81, ‘\n’); cumle– Dosyadan okunan karakterlerin saklanacağı Karakter dizisinin adı 81 – Dosyadan okunacak maksimum karakter adedi (NULL karakteri unutulmamalıdır). ‘\n’ – Dosyadan okumanın sonlandırılacağı karakter. Yazılmadığı takdirde ‘\n’ kabul edilir. C++’da getline komutu ile dosyadan veri okuma

21 21 C++’da getline komutu ile dosyadan veri okuma #include using namespace std; int main(){ char satir[300]; fstream dosya("mars.txt", ios::in); if (!dosya){ cout << "Dosya bulunamadi!" << endl; return 0; } do{ dosya.getline(satir,300); cout << satir << endl; }while (!dosya.eof()); dosya.close(); cout << "\nBitti\n"; }

22 22 C++’da get komutu ile dosyadan veri okuma #include using namespace std; int main(){ char kar; fstream dosya("mars.txt", ios::in); if (!dosya){ cout << "Dosya bulunamadi!" << endl; return 0; } do{ dosya.get(kar); cout << kar; }while (!dosya.eof()); dosya.close(); cout << "\nBitti\n"; }

23 23 C++’da get komutu ile dosyadan veri okuma int main(){ char kar,kar1; fstream oku("oku.txt", ios::in); fstream yaz("yaz.txt", ios::out); do{ oku.get(kar); if(isupper(kar)){ kar1=tolower(kar); yaz<

24 24 main(){ fstream dosya("sentence.txt", ios::out); char ch; cout << "Bir cumle giriniz"; while (1){ cin.get(ch); dosya.put(ch); if (ch == '.') break; } dosya.close(); } C++’da get komutu ile dosyadan veri okuma

25 Random Access Files Random Access means non-sequentially accessing informaiton in a file. Figure 12-11

26 26 Table 12-7

27 27 Table 12-8

28 28 Program // This program demonstrates the seekg function. #include void main(void) { fstream file("letters.txt", ios::in); char ch; file.seekg(5L, ios::beg); file.get(ch); cout << "Byte 5 from beginning: " << ch << endl; file.seekg(-10L, ios::end); file.get(ch); cout << "Byte 10 from end: " << ch << endl;

29 29 Program continues file.seekg(3L, ios::cur); file.get(ch); cout << "Byte 3 from current: " << ch << endl; file.close(); }

30 30 The tellp and tellg Member Functions tellp returns a long integer that is the current byte number of the file’s write position. tellg returns a long integer that is the current byte number of the file’s read position.

31 31 Program // This program demonstrates the tellg function. #include #include // For toupper void main(void) { fstream file("letters.txt", ios::in); long offset; char ch, again; do { cout << "Currently at position " << file.tellg() << endl; cout << "Enter an offset from the beginning of the file: "; cin >> offset;

32 32 Program continues file.seekg(offset, ios::beg); file.get(ch); cout << "Character read: " << ch << endl; cout << "Do it again? "; cin >> again; } while (toupper(again) == 'Y'); file.close(); }

33 – fgetc Dosyadan bir karakter okur FILE işaretçisini alır fgetc( stdin ) eşittir getchar() karakter = fgetc(dosya); – fputc Dosyaya bir karakter yazar FILE işaretçisini alır ve karakter yazar fputc( 'a', stdout ) eşittir putchar( 'a' ) fputc(karakter, dosya); Dosya kopyalama işleminde dosya1’in sonuna gelene karakter karakter dosya2’ye yazarken aşağıdaki gibi bir kullanım uygulayabilirsiniz: fputc(fgetc(dosya1), dosya2); Karıştırmayalım! – fgets Satır okur – fputs Satır yazar Rastgele Erişimli Dosya komutları

34 C’de genellikle rasgele erişimli dosyalar binary tipte yer alır fseek komutu ile istenilen kayda doğrudan erişim sağlanabilir. Fakat dosyadaki kaydın sıra numarası yerine dosyada kaçıncı bayta konumlanılacağı verilir. – 11. kaydın başına konumlanmak için, 10. kaydın sonu olan sizeof(personel)*10 gibi bir ifade kullanılabilir.

35 fseek ve ftell C’de bir dosyanın belirli bir yerine konumlanmak için fseek, bulunduğumuz yeri öğrenmek için ftell kullanılır: fseek(dosya, 1600, SEEK_SET); Dosyanın başından 1600 bayt ileriye konumlanır. (SEEK_CUR ile bulunulan konumdan itibaren, SEEK_END ile dosya sonundan itibaren konumlama yapılabilir) ftell(dosya); Dosyanın neresinde bulunduğumuzu döndürür (kaçıncı bayt) sizeof(personel)*10

36 fread ve fwrite C’de bir kayıt deseninin tamamını bir defada dosyaya eklemek için fwrite, dosyadan okumak için ise fread kullanılır: fwrite(&kayit,sizeof(personel),1,dosya); fread(&kayit,sizeof(personel),1,dosya); fread NULL değer döndürürse kayıt okuyamamış (muhtemelen dosya sonuna gelmiş) demektir.


"PROGRAMLAMA Dosyalama İşlemleri Doç. Dr. Murat ÇAKIROĞLU Sakarya Üniversitesi Mekatronik Mühendisliği." indir ppt

Benzer bir sunumlar


Google Reklamları