Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

PROGRAMLAMA Dosyalama İşlemleri

Benzer bir sunumlar


... konulu sunumlar: "PROGRAMLAMA Dosyalama İşlemleri"— 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 <fstream.h>) 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 Bu işlemleri C-dilinde şöyle ifade ederiz:
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); ifstream dosya; // ofstream dosya veya fstream dosya dosya.open(const char dosya_adı, const char açma_amacımız); dosya.close();

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

6 Dosya Açma Modları(C++ dili)
Dosya modu Anlamı ios:app Dosya varsa içindeki değerler korunur ve yazılanlar dosyanın sonuna eklenir. Eğer dosya yoksa açılır. ios:in Giriş 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:noreplace Eğer dosya varsa, yeniden açılmasını engeller. ios:nocreate Eğ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 <iostream>
#include <fstream> using namespace std; main(){ fstream dosyam("notlar.dat", ios::out); cout << dosyam.dat acildi.\n"; } #include <stdio.h> main(){ FILE *dosyam; dosyam=fopen("notlar.txt","a+"); puts("notlar.txt acildi.\n"); fclose(dosyam); getchar(); }

9 Dosya İşlem Komutları fp=fopen(“dosyam.dat”,”r”) ; if(!fp) {
Dosyanın açıldığının testi.  fp=fopen(“dosyam.dat”,”r”) ; if(!fp) {       printf(“Hata\n”;);  }      #include <iostream> #include <fstream> 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 <stdio.h> 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 <stdio.h> 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 <stdio.h> #include <string.h> 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 <stdio.h> 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 #include <iostream> #include <fstream>
C++ dosyaya << operatörü ile veri yazma #include <iostream> #include <fstream> 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 #include <fstream> using namespace std; int main(){
C++ dosyaya << operatörü ile veri yazma #include <fstream> 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.precision(4);

17 #include <iostream> #include <fstream>
C++ dosyaya << operatörü ile veri yazma #include <iostream> #include <fstream> #include <iomanip> 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 #include <iostream> #include <fstream>
C++’da >> operatörü ile dosyadan veri okuma #include <iostream> #include <fstream> 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 #include <iostream> #include <fstream>
C++’da >> operatörü dosya sonuna kadar veri okuma #include <iostream> #include <fstream> #include <cstring> 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 dosya.getline(cumle, 81, ‘\n’);
C++’da getline komutu ile dosyadan veri okuma 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.

21 #include <iostream> #include <fstream>
C++’da getline komutu ile dosyadan veri okuma #include <iostream> #include <fstream> 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 #include <iostream> #include <fstream>
C++’da get komutu ile dosyadan veri okuma #include <iostream> #include <fstream> 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 fstream oku("oku.txt", ios::in); fstream yaz("yaz.txt", ios::out); do{
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<<kar1; }else if(islower(kar)){ kar1=toupper(kar); }else if(isspace(kar)){ yaz<<kar; } }while (!oku.eof()); oku.close(); yaz.close();

24 fstream dosya("sentence.txt", ios::out); char ch;
C++’da get komutu ile dosyadan veri okuma 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();

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

26 Table 12-7

27 Table 12-8

28 Program 12-21 // This program demonstrates the seekg function.
#include <iostream.h> #include <fstream.h> 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); cout << "Byte 10 from end: " << ch << endl;

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

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 Program 12-23 // This program demonstrates the tellg function.
#include <iostream.h> #include <fstream.h> #include <ctype.h> // 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 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 Rastgele Erişimli Dosya komutları
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

34 Rastgele Erişimli Dosya komutları
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" indir ppt

Benzer bir sunumlar


Google Reklamları