8- Turbo Pascal Programlama İle Dosya İşlemleri Dosya işlemleri bilgisayar programlamada verilerin tekrar kullanılması açısından çok önemlidir. Yazılan bilgisayar programlarında elde edilen sonuçlar eğer bilgisayar ortamında saklanmaz ise kaybolur. Tekrar kullanılmak istenen bu bilgiler kayıtlı olmadığından tekrar kullanılma veya kontrol edilme şansı yoktur. Bilgisayar programlama dillerinin bu tür problemlerden kurtarmak için bilgisayar üzerinde elde edilen sonuçların saklanması gerekir. Sonuçları bilgisayar ortamında saklamak için yazı türünde veya ikilik dosya formatında saklayabiliriz. Yazı türündeki dosyaları okuyabilir ve bu dosyadan bilgileri başka bir ortama okunabilir şekilde aktarabiliriz. Diğer saklama türü olan ikilik (binary) saklama türü genelde bilgisayarın üzerinde okunması gerekmeyen ve sadece üzerinde resim veya görüntü işleminin yapılması gereken dosyalardır. Yazı (text) türündeki dosyalar yazdığımız bilgisayar programında elde ettiğimiz sonuçlar olduğu gibi aynı zamanda bir bilgisayar programına girdi verisi olarak kullanılacak olan veriler olabilmektedir. Dosyalama işlemleri bilgisayar yardımı ile yapılan birçok işlemi tekrar kullanılma işlemi ile defalarca kullanılmasına olanak tanır. Bilgisayar programlarında dosya işlemleri yapabilmek için bir dosya değişkenine sahip olmak gerekir. Bu dosya değişkeni kullanıcının verisini girmesi veya çıktı almasını sağlamak için bilgisayar programı ile dosya arasında veri taşıyan bir değişkendir. Eğer veri yazı ise tanımlama text olacaktır. Bir dosyadan basit olarak veri okumak için aşağıdaki gibi bir program kodu yazılır. Genel olarak görüldüğü gibi bir dosya değişkeni aracılığı ile yapılmaktadır. Dosya değişkenlerinin tanımlanmasında sonra Assign(sayi,'C:\VERI\SONUC.DAT'); dosyanın bilgisayar üzerinde oluşması sağlanır. Tanımlamadan görüldüğü gibi sayi program ile dosya arasında veri taşımayı sağlar. Daha sonra C:\VERI\SONUC.DAT ile disk üzerinde dosyanın nereye açılacağı yazılır. Bu bildirimin ardından dosya disk üzerinde açılmış olacaktır. Açılan her dosyanın program donsunda 98
kapatılması gerekir. Kapatılma işlemi Close(sayi); ile dosya değişkeni yardımı ile yapılır ve programın çalışması bittikten sonra dosya kapatılır. program dosya_oku_1; var sayi : text; karakter : string[80]; Assign(sayi,'SONUC.DAT'); Reset(sayi); while not Eof(sayi) do Readln(sayi, karakter); Writeln(karakter); Close(sayi); Dosya açıldıktan sonra okumak için dosyanın başına gitmek gerekecektir. Bu işlem için Reset(sayi); ile programın dosyanın başına gitmesi sağlanır. Başına gidildikten sonra program dosyanın sonuna kadar while not Eof(sayi) do komutu ile okuma ve ekrana yazma işlemini yapacaktır. Bir başka örnek verelim. Bu örnekte dosyadan okuma işlemi yapalım. Bu programda veriler for-do yapısı ile okunmaktadır. program dosya_oku_2; var yazi : text; Index: byte; satir: integer; Real1,Real2,Real3 : real; 99
Assign(yazi,'C:\VERI\SONUC.DAT'); Reset(yazi); for Index := 1 to 7 do Readln(yazi,satir,Real1,Real2,Real3); Writeln(satir:7,Real1:12:3,Real2:12:3,Real3:12:3); Close(yazi); İkilik dosya formatına girdi işlemine örnek olarak Numerical Recipes adlı kitaptan alınan aşağıdaki örneği verebiliriz. program Binary_Input; type Input_Record = record Number : integer; Amount : real; Name : string[30]; var Input_File : file of Input_Record; Bird_Food : array[1..20] of Input_Record; Index : byte; (* main program *) Assign(Input_File,'KIBBLES.BIT'); Reset(Input_File); for Index := 1 to 20 do if not Eof(Input_File) then Read(Input_File,Bird_Food[Index]); Close(Input_File); Writeln(Bird_Food[6].Number:6,Bird_Food[20].Amount:13:5, ' ',Bird_Food[1].Name); 100
Aynı örneğin çıktı için olan örneğini aşağıdaki gibi verebiliriz. Burada dosya türüne dikkat edilir ise ikilik (binary) türdendir. Kayıt tipinde veri tanımlanmış ve veriler tipik temel nesne yapısındadır. Bu yapı tipinde veriler basitçe nesne olarak oluşturulmuştur. program Binary_Output_Example; type Dat_Rec = record Count : integer; Size : real; Name : string[30]; var Output_File : file of Dat_Rec; Dog_Food : array[1..20] of Dat_Rec; Index : byte; (* main program *) Assign(Output_File,'KIBBLES.BIT'); Rewrite(Output_File); for Index := 1 to 20 do Dog_Food[Index].Count := Index; Dog_Food[Index].Size := 12345.6789; Dog_Food[Index].Name := 'Large size Kibbles & Bits'; Writeln('Begin outputting data'); for Index := 1 to 20 do Write(Output_File,Dog_Food[Index]); Close(Output_File); Writeln('End of output'); 101
Dosya türlerine örnek verirken unutulmaması gereken bir noktada yazıcı kullanımıdır. Yazıcıları kullanmak veya var olan bir dosyayı yazdırmak gerektiğinde USES CRT; bildirimini USES PRINTER; şeklinde değiştirerek ekrana göndereceğimiz çıktıları yazıcıya yönlendirebiliriz. program Printout_Example; uses Printer; var Index : byte; Writeln(Output,'Printer program example'); Writeln(Output,'yazıcıyı açarak kağıt yerleştirin'); Writeln(Lst,'Pascal içien dem yazısıdır.'); Writeln(Lst); for Index := 1 to 15 do Write(Lst,'Index değeri '); Write(Lst,Index:3); Writeln(Lst,' dir'); 102