© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Chapter 11 – Dosya İşleme Outline 11.1Giriş 11.2Veri Hiyerarşisi 11.3Dosya ve Akışlar(Stream) 11.4Sıralı erişimli dosya yaratmak 11.5Sıralı Erişimli dosyadan Veri okumak 11.6Rasgele Erişimli Dosyalar 11.7Rasgele Erişimli dosya yaratmak 11.8Rasgele Erişimli Dosyaya rasgele veri yazmak 11.9Rasgele Erişimli Dosyadan rasgele veri okumak 11.10Örnek: Evrak işleme Sistemi
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 2 Amaç Bu bölümde aşağıdakileri öğreneceğiz: –Dosyayı oluşturmak,okumak, yazmak ve güncelleştirmek. –Sıralı Erişimli Dosya işleme –Rasgele Erişimli Dosya işeme.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Giriş Veri Dosyaları –C programları saysinde dosyalar oluşturulabilir, güncelleştirilebilir. –Büyük Verileri Kalıcı bir yerde saklamak için kullanılır
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Veri Hiyerarşisi Veri Hiyerarşisi: –Bit – En küçük Veri Öğesidir. Değerleri 0 yada 1 –Byte – 8 bit Karakterleri saklamak için kullanılır –Ondalıklı basamaklar, harfler, ve özel semboller –Field (Alan) – Karakter grupları örnek: sizin isminiz. –Record(kayıt - tutanak) – birbiri ile alakalı alanlar(field) –Struct yada class şeklinde temsil edilir. Maaş sisteminde,ilgili çalışanın kayıtları şunları içermektedir: Kimlik numarası, ismi, adresi gibi.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Veri Hiyerarşisi Veri Hiyerarşisi (devam): –Dosya –Birbiri ile alakalı ver grupları örnek: maas dosyası –Veri tabanı – birbiri ile alakalı dosya grupları
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Veri Hiyerarşisi Veri Dosyaları –Kayıt anahtarı Dosyadan alınan belirli kayıtları belirlenmesini kolaylaştırır. –Sıralı erişimli dosya Kayıtlar tipik olarak anahtar ile sıralanır.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Dosya ve Akışlar(Stream) C her dosyayı bit dizileri şeklinde görür –Dosyalar end-of-file işaretiyle biter Ya da dosya belli bir bitte biter Dosya açılınca “akış” oluşturulur –Dosya ve programlar arasında haberleşme kanalı sağlar –Bir dosyayı açmak FILE yapısına bir işaretçi döndürür Örnek dosya işaretçileri: stdin – standart giriş (klavye) stdout – standart çıkış (monitör) stderr – standart hata (monitör)
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Dosya ve Akışlar(Stream) FILE yapısı –Dosya belirteci İşletim sistemi dizisi için dosya gösterir –Dosya Kontrol Bloğu (File Control Block-FCB) Her dizi elemanı işletim sisteminin bir dosyayı yönetebilmesi için Dosya Kontrol Bloğu içerir
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Dosya ve Akışlar(Stream)
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Dosya ve Akışlar(Stream) Read/Write fonksyaonları standart kütüphanede bulunur –fgetc Dosyadan bir karakter okur FILE işaretçisini alır fgetc( stdin ) eşittir getchar() –fputc Dosyaya bir karakter yazar FILE işaretçisini alır ve karakter yazar fputc( 'a', stdout ) eşittir putchar( 'a' ) –fgets Satır okur –fputs Satır yazar –fscanf / fprintf Scanf ve printf gibidir
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 11 fig11_03.c (1 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 12 fig11_03.c (2 of 2) Program Output Enter the account, name, and balance. Enter EOF to end input. ? 100 Jones ? 200 Doe ? 300 White 0.00 ? 400 Stone ? 500 Rich ? ^Z
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Sıralı erişimli dosya yaratmak C de dosya için yapı yoktur –Kayıt gibi gösterimler C nin parçası değildir –Programcı dosya yapısını oluşturmalıdır Dosya oluşturmak –FILE *cfPtr; FILE işaretçisi cfPtr oluşturur. –cfPtr = fopen(“clients.dat", “w”); Fopen fonksyonu dosyayı açar İki arguman alır –dosya ve açma modu Dosya açılmazsa, NULL döner
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Sıralı erişimli dosya yaratmak
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Sıralı erişimli dosya yaratmak –fprintf Dosyayı yazdırır Printf gibi, ilk argumanı FILE işaretçisi alır feof( FILE işaretçisi ) –fclose( FILE işaretçisi ) Dosyayı kapatır Program bittiği zaman otomatik bir şekilde gerçekleştirilir. Dosyayı kapatmak için güzel bir pratik Detaylar –Programlar belki hiç dosya işlemeyebilir, yada sadece bir tane üzerinde işlem yapar, veya birden çok dosya üzerinde işlem yapabilir. –Bütün dosyaların benzersiz bir isme sahip olmaları gerekir ve kendisine ait bir pointer ı(göstericisi).
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Sıralı erişimli dosya yaratmak
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Sıralı Erişimli dosyadan Veri okumak Sıralı Erişimli dosyadan okumak –FILE pointer ı oluşturulur, dosya okumak için dosyanın linki verilir. cfPtr = fopen( “clients.dat", "r" ); –Dosyadan okumak için fscanf kullanılır Örnek olarak scanf, ilk argüman hariç- ilk argüman FILE gostericisidir. fscanf( cfPtr, "%d%s%f", &accounnt, name, &balance ); –Verileri baştan sona kadar okur –Dosya pozisyon göstericisi Bir sonraki okuyacağı yada yazacağı byte ı sayısını içerir. Gerçek bir gösterici değil, fakat bir tamsayı değeri Bunun yanında ofset byte ı olarak bilinir –rewind( cfPtr ) Yeniden yerleştirilen dosya göstericisi doyanın başlangıcını tutar (byte 0 )
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 18 fig11_07.c (1 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 19 fig11_07.c (2 of 2) Account Name Balance 100 Jones Doe White Stone Rich
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 20 fig11_08.c (1 of 5)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 21 fig11_08.c (2 of 5)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 22 fig11_08.c (3 of 5)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 23 fig11_08.c (4 of 5)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 24 fig11_08.c (5 of 5) Program Output Enter request 1 - List accounts with zero balances 2 - List accounts with credit balances 3 - List accounts with debit balances 4 - End of run ? 1 Accounts with zero balances: 300 White 0.00 ? 2 Accounts with credit balances: 400 Stone ? 3 Accounts with debit balances: 100 Jones Doe Rich ? 4 End of run.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Sıralı Erişimli dosyadan Veri okumak Sıralı Erişimli Dosya –Verileri kaybetme riskine karşı,dosya değiştirilemez. –Alanlar(Fields) değişen büyüklükte olabilir Dosyaların farklı şekilde temsil edilmesi 1, 34, -890 hepsi tamsayı, fakat bunların hepsi disk te değişik boyutta yer tutarlar 300 White Jones (old data in file) Eyer White ismini Worthington ismi ile değiştirmek istesek 300 White Jones Worthington 0.00ones Worthington 0.00 Verinin üstüne yazılır
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Rasgele Erişimli Dosyalar Rasgele Erişimli Dosyaları –Farklı verilere ulaşmayı diğer kayıtları aramaksızın gerçekleştirir. –Dosyadaki Verilere hemen ulaşmamızı sağlar. –Veri diğer veriler yok edilmeden eklenebilir. –Veri ilk önce kaydedilir, sonra güncelleştirilebilir yada silinebilir(üzerine yazılmadan) Sabit uznunluktaki kayıtlar kullanılarak gerçekleştirilmiş –Sıralı erişimli dosyalar sabit uzunluktaki kayıtlar içermezler byte offsets } }} }}}} bytes
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Rasgele Erişimli dosya yaratmak Rasgele Erişimli dosya içerisindeki veri –Biçimlenmemiş (“sıra byte ları” şeklinde kaydedilir.) Bütün veriler aynı tip’ı(type)(örneğin int) kullanır ve aynı büyüklükte hafızada yer işgal eder. Aynı tipteki bütün kayıtlar sabit uzunluktadır. İnsanlar tarafından okunacak veriler değildirler.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Rasgele Erişimli dosya yaratmak Biçimsiz I/O fonksiyonları –fwrite Byte’ları hafızadan adresinden dosyaya doğru transfer eder. –fread Byte’ları Dosyadan hafızaya transfer eder. –örnek: fwrite( &number, sizeof( int ), 1, myPtr ); &number –Trasnfer edilecek byte’ların adresi sizeof( int ) –Transfer edilecek byte’ların Sayısı 1 – diziler için, transfer edilecek elemanların sayısı –Buna göre, dizinin “tek eleman” ’ı transfer edilir myPtr –Kendisinden transfer edilecek yada kendisine transfer edilecek dosya
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Rasgele Erişimli dosya yaratmak Struct’ ları yazmak fwrite( &myObject, sizeof (struct myStruct), 1, myPtr ); –sizeof –parantez içerisindeki nesnenin büyüklüğünü byte cinsinden döndürür Dizinin bazı elemanlarını yazmak –Dizinin ilk elemanını gösteren gösterici –Elemanların numarası üçüncü argüman olarak yazılır
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 30 fig11_11.c (1 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 31 fig11_11.c (2 of 2)
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Rasgele Erişimli Dosyaya rasgele veri yazmak fseek –Dosyanın göstericisini belirli bir pozisyona belirler –fseek( pointer, offset, symbolic_constant ); pointer – dosyaya karşı gösterici offset –dosya göstericisinin pozisyonu (0 ilk adresi) symbolic_constant – Dosyanın neresinden okunacağını açıklar SEEK_SET –Dosyanın başlangı olan yeri arar ve oradan başlar SEEK_CUR –Dosyanın o anki pozisyonun arar ve oradan başlar SEEK_END –Dosyanın sonunu arar ve oradan başlar
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 33 fig11_12.c (1 of 3)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 34 fig11_12.c (2 of 3)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 35 fig11_12.c (3 of 3) Program Output Enter account number ( 1 to 100, 0 to end input ) ? 37 Enter lastname, firstname, balance ? Barker Doug 0.00 Enter account number ? 29 Enter lastname, firstname, balance ? Brown Nancy Enter account number ? 96 Enter lastname, firstname, balance ? Stone Sam Enter account number ? 88 Enter lastname, firstname, balance ? Smith Dave Enter account number ? 33 Enter lastname, firstname, balance ? Dunn Stacey Enter account number ? 0
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Rasgele Erişimli Dosyaya rasgele veri yazmak
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Rasgele Erişimli Dosyadan rasgele veri okumak fread –Açıklanan sayıdaki byteları büyüklüğü kadar hafızadan okuma yapar fread( &client, sizeof (struct clientData), 1, myPtr ); –Birden çok sabit büyüklükteki dizi elemanlarını okuyabilir Diziye bir gösterici sağlanır Okuyacağı elemanların sayısını içerir –Birden fazla eleman okuyabilmek için,üçüncü argümanı tanımlamak gerekir.
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 38 fig11_15.c (1 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 39 fig11_15.c (2 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 40 Program Output Acct Last Name First Name Balance 29 Brown Nancy Dunn Stacey Barker Doug Smith Dave Stone Sam 34.98
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Örnek: Evrak işleme Sistemi Bu program –Rasgele dosya erişimini kullanarak o esnadaki bankanın hesap bilgilerine ulaşacak ve gerekli işlemler yapılacak. Şunları yapacağız –Varolan hesabı yenileyeceğiz –Yeni bir hesap açacağız –Hesap silebileceğiz –Text Dosyasındaki bütün hesapları biçiledirerek listeleyip kaydedeceğiz.
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 42 fig11_16.c (1 of 11)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 43 fig11_16.c (2 of 11)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 44 fig11_16.c (3 of 11)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 45 fig11_16.c (4 of 11)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 46 fig11_16.c (5 of 11)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 47 fig11_16.c (6 of 11)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 48 fig11_16.c (7 of 11)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 49 fig11_16.c (8 of 11)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 50 fig11_16.c (9 of 11)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 51 fig11_16.c (10 of 11)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 52 fig11_16.c (11 of 11)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 53 Program Output After choosing option 2 accounts.txt contains: Enter account to update ( ): Barker Doug 0.00 Enter charge ( + ) or payment ( - ): Barker Doug After choosing option 3 accounts.txt contains: Enter new account number ( ): 22 Enter lastname, firstname, balance ? Johnston Sarah After choosing option 1 accounts.txt contains: Acct Last Name First Name Balance 29 Brown Nancy Dunn Stacey Barker Doug Smith Dave Stone Sam 34.98