|
Abruzzi
|
 |
« : Mayıs 11, 2008, 12:58:06 ÖS » |
|
Unit tanımlama Yazılımı : UNIT ünite_ismi; INTERFACE Global Tanımlamalar IMPLEMENTATION Lokal Tanımlamalar Global prosedür ve fonksiyonlar END . Örnek 8.1 : Unit ikisayi; Interface Procedure degis (var x, y : real) ; Implementation Procedure degis (var x, y : real) ; Var Yed : real ; Begin Yed : = x ; X : = y ; Y : = yed ; End ; End . Unit kelimesiyle başlayan bir unit 'in, normal programlar gibi bir de ismi vardır. Derlendikten sonra diskte bu isimde saklanır. Bu unit 'in ismi aynı zamanda dosya ismi olarak kullanıldığından 8 karakteri geçmemelidir. Bir ünite derlenir, ancak bir program gibi çalıştırılamaz. Sadece normal programlar içersinde kullanılabilir. Bir unit interface ve implementation adı verilen iki bölümden oluşur. Interface bloğu, global tanımlamaları içerir. Global tanımlamalar; üniteyi kullanan programlar tarafından kullanılacak olan değişken, sabit, prosedür veya fonksiyon isimleriyle varsa parametreleridir. Unit içersinde kullanılacak standart bir unit (dos, crt gibi ...) veya kullanıcının kendisinin hazırladığı bir unit varsa onlar da buraya yazılır. Implementation bloğunda ise; lokal tanımlamalar, unit içersinde yazılan prosedür veya fonksiyon tarafından kullanılacak olan değişken, sabit, tip tanımlamalarıdır. Örnek 8.2 : Unit Ekran ; Interface Uses crt; Procedure sil ; Implementation Procedure sil ; Begin Clrscr ; End ; End . Standart bir komut olan "clrscr" komutunu kullanarak aynı işlemi yapan Türkçe isimli prosedürün tanımlandığı unit 'in hazırlanması Alt + F9 ile derlenir. ("Compile menüsü" içersindeki "destination" seçeneğinin karşısında "disk" yazılı olmalıdır.) Program EKRAN.TPU adıyla derlendikten sonra diske kaydedilecektir. Örnek 8.3 :"Ekran" adlı unit 'i kullanarak ekranda belirli sürelerle yanıp sönen yazı yazdıran program. Program Ekran_kullan ; Uses ekran, crt ; Var I : integer ; Begin Sil ; Repeat Write ('Mehmet Kemal Coşkunöz Anadolu Teknik Lisesi') ; Delay (500) ; Sil ; Until keypressed ; End . Unit kuvvet ; Interface Procedure kare (var x : integer) ; Procedure kup (var y : integer) ; Implementation Procedure kare (var x : integer) ; Begin X : = x * x ; End ; Procedure kup (var y : integer) ; Begin Y : = y * y * y ; End ; End . Örnek 8.4 : Kuvvet adında bir kullanıcı ünitesi hazırlayarak bir sayının karesini ve küpünü alan prosedürleri içersine yazmak. Alt + F9 ile derlendikten sonra kuvvet.tpu adı altında derlendikten sonra kaydedilecektir. Örnek 8.5 : Program hariciproc ; Uses crt, kuvvet ; Var a, b : integer ; Begin Clrscr ; Write ('Bir Tam sayı giriniz : >') ; readln (a) ; Writeln ('1. Kare Alma') ; Writeln ('2. Küp Alma') ; Write ('Seçiminiz>') ; readln (b) ; Case b of 1 : kare(a) ; 2 : kup(a) ; end ; Writeln ('Sonuç :' , a ) ; End . "Kuvvet" ünitesini programın içerisindeki uses bloğunda tanımlayarak klavyeden girilen bir sayının karesini ya da küpünü seçime göre alan program. Bu programda klavyeden okunan sayı, "a" değişkeni içerisine atanmıştır. Daha sonra, kare ya da küp alma için seçim yapıldığında, "b" değişkeni içerisine 2 atandığından, kup(a) prosedürü çalıştırılmıştır. Bu prosedürde "a" değişkeni içerisindeki 2 sayısı, örnek 8.4 deki ünitenin interface bloğu içerisindeki "kup (var y : integer)" tanımında bulunan "y" değişken parametresine aktarılmıştır. Daha sonra implementation bloğundaki prosedürdeki "y" değişkeni, kendisiyle üç defa çarpılarak yine "y" değişkeni içersine atanmıştır. "y" değişkeni prosedürün değişken parametresi olduğundan, elde edilen değeri tekrar ana programa gönderebileceğini biliyoruz. Böylece ana programda "a" değişkeni içersine gönderilen sonuç, writeln komutuyla ekrana yazdırılmıştır. STANDART PROSEDÜR ve FONKSİYONLAR CHR Fonksiyon Chr fonksiyonu ASCII kod numarasının karşılığı olan karakteri verir. Yazılımı : CHR (N) ; Örnek : Chr (66) ; {B harfini verir} Chr (13) ; {zil sesi verir} Chr fonksiyonunun sonucu char tipidir. N sayısı 0-255 arasında bir tam sayı ya da bir tam sayı değişken ismi olması gerekir. Chr fonksiyonuyla yapılan işlem, write komutu ile de yapılabilir. Örneğin : Writeln (chr(63)) yerine writeln (#63) Yazıldığında sonuç aynıdır. Her ikisinde de 63 sayısının ASCII kodu karşılığı olan "?" ekrana yazdırılır. Örnek 1 :ASCII kod numarası 14-255 arasında olan sayıları karakter karşılığı yanlarına numaraları ile birlikte yan yana yazdıran program. Uses crt ; Var i : integer ; Begin Clrscr ; For i := 14 to 255 do write (i:3, '=', chr(i)) ; Writeln ; Writeln (' "65" in ASCII karşılığı =',#65, 'dır') ; Writeln (#7) ; {zil sesi üretir} End . ORD Fonksiyon Bir elemanın tanımlı olduğu kümede kaçıncı sırada olduğunu bulmak için kullanılır. ORD fonksiyonu CHR fonksiyonunun tersine çalışır. Yani, verilen karakterin ASCII kod numarasını verir. Yazılımı : ORD (N) ; Örnek : Ord ('B') ; {66 sayısını verir} Ord ('Mart') ; {Mart stringinin tanımlı olduğu sıralı tip bir veride mart Verisinin kaçıncı sırada olduğunu verir. Ord (False) {true} Ord (1) {1} Ord fonksiyonunun sonucunun tipi longint 'tir. Eğer ord fonksiyonunun sonucu bir değişkene aktarılmak isteniyorsa, bu değişkenin tipi mutlaka tamsayı tipinde olmalıdır. N 'in tipi byte, integer, boolean, char veya sıralı tip bir verideki elemanın ismi olabilir. Örnek 2 : Sıralı bir veri tipindeki bir elemanın kaçıncı sırada olduğunu ve 'A' harfinin ASCII kod numarasını bulan program. Type Renkler = [kirmizi, mavi, yesil, sari, siyah] ; Begin Writeln ('Yesil in sıralı veri tipindeki sırası=', ord (yesil)) ; Writeln (' "A" harfinin ASCII kodu', ord('A'), 'dır') ; End . TEXTBACKGROUND Prosedür Text modunda zeminin rengini değiştirmek için kullanılır. Yazılımı : TextBackGround (N) ; Örnek : TextBackGround (7) ; {ekran zeminini beyaz yapar} TextBackGround (White) ; {ekran zeminini beyaz yapar} N, 0-7 arasında bir sayı ya da, bu sayılara karşılık gelen standart sabit isimlerdir. Standart sabit isimler İngilizce 'deki renk isimleridir. TEXTCOLOR Prosedür Text modunda ekrandaki karakter rengini değiştirmek için kullanılır. Yazılımı : TextColor (N); Örnek : TextColor (1) ; {karakter rengini mavi yapar} TextColor (blue) ; {karakter rengini mavi yapar} N, 0-15 arasında bir tam sayı ya da, bu sayılara karşılık gelen standart sabit isimlerdir. Standart sabit isimler İngilizce 'deki renk isimleridir. Eğer N 'den sonra "blink" yazılırsa, karakterin rengi yanıp sönen biçimde olur. Kod Sabit İsmi Renk Kod Sabit İsmi Renk 0 Black Siyah 8 Darkgray Koyu gri 1 Blue Mavi 9 Lightblue Açık mavi 2 Green Yeşil 10 Lightgreen Açık yeşil 3 Cyan Turkuaz 11 Lightcyan Açık turkuaz 4 Red Kırmızı 12 Lightred Açık kırmızı 5 Magenda Bordo 13 Lightmagenda Açık bordo 6 Brown Kahverengi 14 Yellow Sarı 7 lightGray Açık gri 15 white beyaz READKEY Fonksiyon Klavyeden sadece bir karakter okuyup char tipi bir değişkene aktarmak için kullanılır. Yazılımı : Readkey ; Örnek : ch := Readkey ; İşlem sırası readkey prosedürüne gelince program durur ve klavyeden bir karakter girilmesi beklenir. Herhangi bir tuşa basılır basılmaz readkey prosedürü bu değeri okur ve değişkene aktarır. Ancak klavyeden yazılan karakter ekranda görülmez. Örnek 3 :Readkey prosedürü ile klavyeden okunan bir tuşun ASCII kod numarasını ekrana yazdıran program. Uses crt ; Var ch : char ; Begin Repeat Writeln ('Bir tuşa basınız') ; Ch := readkey ; If ch = #0 then Begin Ch := readkey ; Writeln ('Tuş numarası:', ord(ch), 'olan bir kontrol tuşuna bastınız' ) ; End Else Writeln ('ASCII kod numarası', ord(Ch), 'olan tuşa bastınız') ; Until ch = #27 ; End . KEYPRESSED Fonksiyon Programın çalışması sırasında klavyeden bir tuşa basılıp basılmadığını kontrol etmek için kullanılır. Yazılımı : Keypressed ; Keypressed fonksiyonu bir boolean değişkenidir. Programın çalışması esnasında bir tuşa basılmış ise fonksiyonun sonucu true 'dir, basılmamışsa False 'dir. Crt standart ünitesi program içinde tanımlı olması gerekir. Örnek 4 :Klavyeden bir tuşa basılıncaya kadar ekrana çeşitli karakterlerle dolduran program. Uses crt ; Begin Repeat Write (#176, #219, #178) ; Until keypressed ; End . GOTOXY Prosedür Kursör pozisyonunu istenilen ekranın istenilen koordinatlarına konumlandırmak için kullanılır. Yazılımı : GotoXY (Sütun_no, Satır_no) ; Örnek : Gotoxy (1,1) ; {ekranın sol üst köşesi} Gotoxy (80,25) ; {ekranın sağ alt köşesi} Sütun_no 1-80 arasında bir sayı, Satır_no 1-25 arasında bir tamsayı veya bunların yerine kullanılacak bir tamsayı değişken adıdır. Örnek 5:ekranın sol üst köşesine ve sağ alt köşesine ASCII karakter kod numarası 219 olan karakteri ve ayrıca ekranın ortasına "Uygulamalarla Temel Bilgisayar" yazan program. Uses crt ; Begin Clrscr ; Gotoxy (1,1) ; write(#219) ; Write (2burası ekranın sol üst köşesidir') ; Gotoxy (35,12) ; Write ('Uygulamalarla') ; Gotoxy (33,13) ; Write ('Temel Bilgisayar') ; Gotoxy (80,24) ; write (#219) ; End . WINDOW Prosedür Text modunda ekranda pencere oluşturmak için kullanılır. Yazılımı : Window (X1,Y1,X2,Y2) ; Örnek :Window (1,1,80,25) ; X1 ve Y1 pencerenin sol üst köşesinin sütun ve satır numaralarını, X2 ve Y2 ise pencerenin sağ alt köşesinin sütun ve satır numaralarını gösterir. Window ile ayrılan alan ekranın aktif çalışma alanıdır. Yani crt standart ünitesi içinde bulunan (gotoxy, clrscr, clreol, delline, insline, wherex, wherey) prosedürlerle, writeln ve readln komutları bu pencere içerisinde işlev görürler. Örnek 6: Ekranın belirtilen koordinatları içerisinde pencere oluşturan ve bu pencere içerisinde gotoxy prosedürünü kullanan program. Uses crt ; Begin Window (1,10,60,20) ; Gotoxy (1,1) ; Textcolor (black) ; Textbackground (white) ; Clrscr ; Writeln ('Burası pencerenin sol üst köşesidir.') ; Writeln ; Write ('Çıkış için enter tuşuna basınız') ; Readln ; Textbackground (black) ; Textcolor (white) ; Window (1,1,80,25) ; Clrscr ; End . LENGTH Fonksiyon Bir stringin kaç karakterden oluştuğunu bulmak için kullanılır. Length fonksiyonunun sonucu integer tiptir. String sabit değeri yerine bir değişken adı da kullanılabilir. Yazılımı : Length (String) ; Örnek : Length ('Bilgisayar') ; {10 tamsayı üretir} Length (' Levent') ; {11 tamsayı üretir} Length ('Alperen ') ; {15 tamsayı üretir} Örnek 7: Klavyeden bir string okuduktan sonra, bu stringi oluşturan karakterleri bir sonraki ile değiştirerek şifreleyen ve sonra da ekrana yazdıran program. Var Asckod, uz, j : integer ; Sif, st, st2 : string ; K, ch : char ; Begin Write ('Bir string giriniz :') ; readln (st) ; Sif :=' ' ; Uz := length (st) ; Writeln ('Girilen string in uzunluğu =', uz) ; For j := 1 to uz do Begin St2 := copy (st, j, 1) ; For k:= 'a' to 'z' do If st2 = k then Begin Ch := k ; Asckod := ord (ch) ; Asckod := asckod + 1 ; Sif := sif + chr (asckod) ; End ; End ; Writeln ('Şifrelenmiş string =', sif) ; End . EXIT Prosedür İşlenmekte olan program bloğundan direkt olarak çıkmak için kullanılır. İşlenen blok bir prosedür ise, bu prosedürün çağrıldığı noktaya geri dönülür. Eğer işlenen blok ana program bloğu ise, programın işlemesi tamamen sona erer. Yazılımı : Exit ; Örnek 7:Klavyeden 0 'dan farklı bir sayı girildiği sürece program akışını devam ettiren, 0 girildiğinde ise programın işlemesini sona erdiren program. Uses crt ; Var i : byte ; Begin Repeat Write ('0-255 arasında sayı giriniz') ; readln (i) ; If i=0 then exit ; Writeln ('Sayının ASCII karakter karşılığı :', chr(i)) ; Until false , End . HALT Prosedür İşlenmekte olan bir program herhangi bir noktada sona erdirmek için kullanılır. Halt prosedürü ister bir prosedür içerisinde, ister ana program içinde kullanıldığında programın işlemesi o noktada kesilir. Yazılımı : HALT ; DELAY Prosedür Çalışmakta olan bir programın işlenmesini belirlenen bir süre durdurur. Yazılımı : Delay (N) ; Örnek : Delay (200) ; {program 200 milisaniye durdurulur} N bir tamsayıdır. Delay prosedürü kullanıldığında program N milisaniye kadar durur. SOUND Prosedür Bilgisayarın ses üretecinden farklı sesler elde etmek için kullanılır. Yazılımı : Sound (N) ; Örnek : Sound (350) ; {350 Hz. Frekansında ses üretir} Sound prosedürü, sistemin içinde bulunan hoparlörden N frekansında ses üretilmesini sağlar. N, sesin frekansını belirleyen bir tam sayıdır. Sistemde ses üretilmeye başlandıktan sonra, program diğer komutlarını işletmeye devam etse de bu ses kesilmez. Sesi kesmek için nosound prosedürünü kullanmak gerekir. Örnek 8 : Frekansı değiştirerek ses çıkaran ve belirli sürelerle bekleyerek ekrana Coşkunöz Anadolu Teknik Lisesi yazdıran program. Uses crt ; Var i:integer ; Begin Repeat Clrscr ; For i := 100 to 300 do Begin Delay (4) ; sound (i) ; End ; Gotoxy (35,10) ; writeln ('Coşkunöz') ; Nosound ; Delay (40) ; For i := 300 to 500 do Begin Delay (2) ; sound (i) ; End ; Gotoxy (33,12) ; writeln ('Anadolu') ; Gotoxy (33,14) ; writeln ('Teknik') ; Delay (40) ; For i := 500 to 1 do Begin Delay (3) ; sound (i) ; End ; Gotoxy (34,16) ; writeln ('Lisesi') ; Nosound ; Delay (20) ; Until keypressed ; End . RANDOM Fonksiyon Sistemin rasgele sayı üretecinden tesadüfi sayılar elde etmek için kullanılır. Yazılımı : Random (N) ; Random fonksiyonu işlendiğinde 0 ile N arasında önceden ne olacağı bilinmeyen bir sayı üretir. Ancak random fonksiyonu her çalıştırılışında aynı sayıyı üretir. Eğer randomize prosedürü program içerisinde önceden yazılırsa bu durumda rasgele sayı üretecinin başlangıç değeri sistemin saatine göre her an değiştirilmiş olur. böylece random fonksiyonu her çalıştırıldığında birbirinden farklı sayılar üretir. Örnek 9 : TextAttr standart değişkeni içerisine her defasında farklı bir sayı atayarak yazılacak karakterin renk niteliğini her an değiştiren ve ekrana 255 farklı renkte karakter yazdıran program. Uses crt ; Begin randomize ; repeat textAttr := random (16) ; write (#176) ; until keypressed ; end . Örnek 10 : Enter tuşuna basıldığı sürece ekranın ortasında görülecek biçimde üç adet zar atılışını gerçekleştiren program. Uses crt ; Var I : integer ; Ch : char ; Begin Clrscr ; Gotoxy (20,8) ; Writeln ('Üç adet zar atmak için enter tuşuna basınız') ; Ch := readkey ; While ch=#13 do Begin Gotoxy (35,12) ; For i := 1 to 3 do Begin Write (random (6) : 3) ; End ; Ch := readkey ; End ; End . IORESULT Fonksiyon Pascal programları çalışırken oluşan run-time hata kod numarasının Pascal ortamına alınmasını sağlar. Yazılımı : IORESULT Örnek : If IOResult <> 0 then Writeln ('Directory bulunamadı') ; Bu fonksiyon {I-} compiler bildirisi ile birlikte kullanılır. Eğer program çalışırken bir giriş, çıkış hatası yapılırsa, bu hatanın kod numarası IOResult fonksiyonuna aktarılır. Programcı, bu kod numarasını kullanarak hatanın giderilmesini sağlayabilir. Örnek 11: Var Intsay : integer ; Label Hata ; Begin {I-} hata : write ('Bir sayı giriniz :') ; readln (intsay) ; If IOResult = 106 then Begin Writeln ('Tam sayı girişi yapmalısınız !') ; Goto hata ; End ; Writeln ('Sayının karesi :', intsay*intsay) ; End . Integer bir değişken içerisine karakter bilgi girildiğinde 106 nolu run-time hata kod numarası üretildiğini ve programın icrasının kesildiğini biliyoruz. Bu program, kullanıcı tam sayı girinceye kadar her defasında gerekli uyarıyı ekrana yazar ve programın hatalı giriş nedeniyle kesilmesini önler. COMPILER BİLDİRİLERİ Turbo Pascal derleyicisinin, bazı özellikleri, compiler bildirileri ile kontrol altında tutulabilir. Compiler bildirileri program text 'i içinde istenilen her noktada yer alabilir. Her bildiri ifadesinin açıklama karakterleri {} içerisine alınması zorunludur. Her compiler bildirisi bir harften oluşur. Bu harfin solunda $ işareti, sağında ise "+" veya "-" karakteri bulunur. Bildiriyi takiben yazılan "-" işareti, bu bildiri ile sağlanan özelliğin pasif duruma geçmesi için "+" işareti ise aktif duruma geçmesi için kullanılır. Her compiler bildirisinin bir default değeri vardır. Bu bildiriler programcı tarafından aksi belirtilmediği sürece bazıları aktif bazıları da pasif durumdadır. Bir bildirinin aktif olması programın çalışma hızını düşürecek, ancak pasif durumda iken de bildiri kontrolü yapılamayacaktır. {$I+} ve {$I-} Giriş çıkış işlemleri sırasında, yapılacak hataların kontrol edilip edilmemesini sağlar. Diğer bir deyişle, Pascal 'ın hata yakalama rutinlerini aktif ya da pasif hale geçirmek için kullanılır. Default I+ 'dır. Böyle bir durumda bir giriş çıkış hatası yapılırsa, hatayı gösteren bir mesaj ile programın icrası kırılır. I bildirisi pasif durumda iken, bir giriş çıkış hatası yapılırsa, programın icrası kırılmaz. Bunun yerine IOResult fonksiyonuna aktarılan değeri kontrol ederek hatanın giderilmesi sağlanabilir. {$R+} ve {$R-} Kullanım amacı, sınırlı tip değişkenlere, sınır dışı değer verildiğinde, Pascal compiler 'ın gerekli run-time hatasını vermesini sağlamaktır. {$R-} bildirisi default 'tur. Yani sınır kontrolü yapılmamasını compiler 'a bildirir. {$R+} ise sınır kontrolünün yapılmasını sağlar. İndis değerlerinin kontrolü için kullanılır. Default değeri R- olup, pasiftir. Böyle bir durumda, indis değerleri üzerinde veya byte ve dizisel tipteki değerler üzerinde sınır kontrolü yapılamaz. Bu da çeşitli hatalara yol açabilir. R bildirisi aktif duruma geçirildiğinde, bu tür değerler üzerinde sınır kontrolü yapılacak ve bir hata bulunduğunda, programın çalışması kırılacaktır. {$B+} ve {$B-} Giriş/çıkış modunu kontrol etmek için kullanılır. Default B+ 'dır. Aktif durumda iken giriş/çıkış işlemleri için CON: aygıtı kullanılır. Bu da default giriş/çıkış aygıtı demektir. Bildiri pasif durumda iken TRM: aygıtı kullanılır. Bu bildiri global özelliğe sahiptir. Diğer bir deyişle program içinde aktif ya da pasif duruma geçirilemez. Programın başında kullanılan bir B bildirisi, bu özelliğin program sona erinceye kadar ya aktif durumda ya da pasif durumda kalmasını sağlar. B bildirisi pasif durumda ise, değer okunuşu sırasında kullanılan read deyimleri readln gibi çalışacaktır. Diğer bir deyişle giriş sırasında giriş sırasında, klavyeden son olarak gönderilen CR karakteri, read deyimine etki edecek ve ekranda, imlecin bir alt satıra inmesini sağlayacaktır. {$C+} ve {$C-} Ctrl C ve Ctrl S tuşlarını aktif ya da pasif duruma geçirmek için kullanılır. Bu bildirinin default değeri C+ 'dır. Yani aktif durum default 'tur. C bildirisi aktif durumda iken (u bildirisi de pasif durumda ise), sadece giriş çıkış işlemleri sırasında ctrl c ve ctrl s tuşlarının kullanılmasına izin verir.bir çıkış aygıtına veri yazılırken, ya da giriş aygıtından bilgi okunurken ctrl c tuşlarına basılırsa programın icrası kırılır. Ctrl s tuşlarına basılırsa, başka bir tuşa basıncaya kadar programın icrası durdurulur. C bildirisi pasif duruma düşürülürse, giriş çıkış işlemleri sırasında ctrl s ve ctrl c tuşlarının kontrol özelliği ortadan kalkar. Bu bildiri programın içinde sadece bir kez ve programın en başında olmak şartı ile kullanılabilir. {$V+} ve {$V-} v bildirisi alt programlar ile ana program arasında veya sadece alt programlar arasında, değer transferi için kullanılan string tipteki parametrelerin uzunluk kontrolünü yapar. Default V+ olup aktiftir. Böyle bir durumda string tipteki formal ve aktual parametrelerin uzunlukları farklı ise hata tespit edilir ve derleme işlemi durdurulur. V bildirisi pasif duruma geçirilirse, değer transferi için kullanılacak formal ve aktual parametrelerin uzunlukları kontrol edilmeyecektir. {$U+} ve {$U-} Ctrl c tuşunun etkisini kontrol altında tutmak için kullanılır. Default değeri U- olup pasiftir. Bu durumda, sadece giriş çıkış işlemleri gerçekleşirken ctrl c tuşlarına basılırsa, çalışmakta olan programın icrası kırılır. {$F+} ve {$F-} Herhangi bir programın çalışması sırasında, aynı anda açılabilecek dosya sayısını bildirmek için kullanılır. Global yapıya sahip bu bildiri sadece programın başında kullanılabilir. Bildirinin default değeri F16 'dır. Aksi belirtilmedikçe aynı anda açık tutulabilecek dosya sayısı 16 'dır. {$D+} ve {$D-} Text dosyalar için aygıt kontrolü yapan bu bildirinin default değeri D+ 'dır. Bu bildiri aktif olduğu sürece, açılan her text dosya için, işletim sistemi aracılığıyla kontrolü yapılır. Açılan dosya direkt olarak bir aygıtı gösteriyorsa, bu dosya için dosya buffer 'ı ayrılmaz. Böyle bir dosyanın giriş çıkış işlemi değişkenler ve aygıt arasında direkt olarak gerçekleştirilir. Bildiri pasif duruma düşürülürse her dosya için buffer ayrılacaktır. {$G+} ve {$G-} G bildirisi "-" ya da "+" işareti ile değil, bir tamsayı değer ile kullanılır. Bildirinin default değeri G0 'dır. G bildirisi ile 0 kullanılmış ise, Pascal tarafından belirlenen giriş buffer 'ı kullanılır. Bildiri ile beraber kullanılan rakam sıfırdan farklı bir rakam ise, dos tarafından gösterilen standart giriş buffer 'ı kullanılacaktır. {$P+} ve {$P-} G bildirisi gibi, bir tamsayı ile birlikte kullanılır. Default değeri P0 'dır. Bu durumda Pascal tarafından kontrol edilen dosya (çıkış) buffer 'ı kullanılır. P bildirisi ile birlikte kullanılan rakam 0 'dan farklı ise, dos tarafından gösterilen standart çıkış buffer 'ı kullanılacaktır. TURBO PASCAL HATA MESAJLARI COMPILER HATA MESAJLARI Hata Kodu Mesaj Açıklama 1 Out of memory Sistem hafızası (ram) yetersiz veya program çok büyük. Config.sys dosyasından gereksiz sürücüleri çıkartınız. 2 Identifier Expected Bir Pascal reserved kelimesi tanımlama bloğunda kullanılıyor. 3 Unknown Identifier Var bloğunda tanımlanmamış bir değişken programda kullanılıyor. 4 Duplicate Identifier Bir değişken veya sabit aynı tanımlama bloğunda iki defa tanımlanıyor. 5 Syntax error Program içerisinde geçersiz bir karakter kullanılıyor. 6 Error in real constant Sabit real tanımında hata var. 7 Error in integer constant Sabit integer tanımında hata var. 8 String constant exceeds line String sabitlerin sonundaki tırnak unutulmuş veya fazladan tırnak konulmuş. 10 Unexpected end of file Bir program bloğu sonuna end yazılmamış veya "." Unutulmuş. 11 Line too long Bir satıra 126 karakterden daha fazla yazılmış. 12 Type identifier expected Type tanımlayıcı bekleniyor. 13 Too many open files Aynı anda açık olan dosya sayısı çok fazla config.sys files satırı 20 olmalı. 14 Invalid file name Dosya ismi geçersiz ya da belirtilen path yanlış 15 File not found Belirtilen dosya aktif directory içerisinde bulunamıyor. 16 Disk full Disket ya da hard disk dolu. 17 Invalid compiler directive Geçersiz compiler bildirisi. 18 Too many files Aynı anda açılmış çok sayıda dosya var gereksiz dosyaları kapatınız. 19 Undefined type in pointer Pointer tanımında bilinmeyen tip. 20 Variable identifier expected Değişken tanımlayıcısı bekleniyor. 21 Error in type Bu sembol ile tip tanımlamasına başlanamaz. Tip hatası var 26 Type mismatch Bir atama deyiminde değişken içine atanan değer ile değişken tipi arasında uyuşmazlık var. 28 Lower bound greater than upper bound Sınırlı tip veri tanımında alt sınır, üst sınırdan fazla 29 Ordinal type expected Real, string veya sınırlı tip veri burada kullanılamaz. 30 Integer constant expected Sadece integer sabit kullanılabilir. 31 Constant expected Burada sadece sabit kullanılır. 32 Integer or real constant Sadece sayısal sabit kullanılabilir. 33 Type identifier expected Tip tanımı gerekiyor. Tipinin tanımlanması gerekli olan bir değişkenin tipi tanımlanmamış. 34 Invalid function result type Geçerli olan fonksiyon tipi sadece standart veri tipleri ve string tiptir. 36 Begin expected Begin kelimesi kullanılmamış. 37 End expected End kelimesi kullanılmamış. 38 Integer expression expected İfade integer tipte olmalıdır. 39 Ordinal expression expected İfade sıralı (ordinal) tip olmalıdır. 40 Boolean expression expected İfade boolean tip olmalı. 41 Operand type does not match operator Aritmetik operatör bu tip veriler için uygun değildir. Örneğin ('A' div '2') 42 Error in expression Bir ifade içersinde operatör yazmak unutulmuş. Örneğin "a:=5*" 50 Do expected Do yazılmamış. 54 Of expected Of yazılmamış. 55 Interface expected Interface yazılmamış. 57 Then expected Then yazılmamış. 58 To or downto expected To veya downto yazılmamış. 62 Division by zero /, div veya mod operatörü ile bir sayının sıfıra bölümü oluşuyor. 63 Invalid file type Readln komutu record tip dosyada veya seek komutu text tipi dosyada kullanılmış. 64 Cannot read or write variables of this type Bu tip veri read veya write komutu ile kullanılamaz. 66 String variable expected Bu değişken string tip olmalı. 67 String expression expected İfade string tipte olmalı. 73 Implementation expected Implementation yazılmamış. 74 Constant and case type do not match Case deyiminin seçici değişkeni ile etiket tipleri arasında uyumsuzluk var. 75 Record variable expected Bu değişken record tipte olmalı. 76 Constant out of range Sınır dışında kalan bir sabit değer, değişkene atanmış. 79 Integer or real expression expected İfade integer veya real tipte olmalı. 84 Unit expected Unit yazılması gerekiyor. 85 ";" expected ";" yazılması gerekiyor. 86 ":" expected ";" yazılması gerekiyor. 87 "," expected ":" yazılması gerekiyor. 88 "(" expected "(" yazılması gerekiyor. 89 ")" expected ")" yazılması gerekiyor. 90 "=" expected "=" yazılması gerekiyor. 91 ":=" expected ":=" yazılması gerekiyor. 92 "[" or "(." expected "[" veya "(." yazılması gerekiyor. 93 "]" or ")." expected "]" veya ")." yazılması gerekiyor. 94 "." expected "." yazılması gerekiyor. 95 ".." expected ".." yazılması gerekiyor. 97 Invalid for control For deyimi içerisindeki kontrol variable değişkeni integer tipte olmalı. 98 Integer variable expected Integer değişken kullanılmalı. 102 String constant expected String sabit kullanılmalı. 113 Error in statement Bu sembol ile bir deyim yazmaya başlanamaz. 116 Must be in 8087 mode to compile this Bu ifadenin derlenmesi için compiler 8087 modunda olmalı. 121 Invalid qualifier Array olarak tanımlanmamış bir değişken indeksli olarak kullanılmaya çalışılıyor. 132 Critical disk error Kritik bir disk hatası mevcut. Örneğin sürücüde disk yok. 133 Cannot evaluate this expression Bu ifade debug fonksiyonu ile değerlendirilemez. Örneğin sin fonksiyonu veya bir sabit watch penceresinde yazılmış. RUN-TIME HATA MESAJLARI Hata Kodu Mesaj Açıklama 1 Invalid function number Geçersiz fonksiyon numarası. Mevcut olmayan dos fonksiyonu çağrılıyor. 2 File not found Reset, append, rename veya erase komutlarıyla belirlenen dosya bulunamıyor. 3 Path not found Reset, rewrite, append, rename, erase, chdir, mkdir veya rmdir komutlarıyla belirtilen path bulunamıyor. 4 Too many open file Aynı anda açılan dosya sayısı çok fazla. 5 File access error Reset, append, rewrite, rename, erase, rmdir komutları kullanıldığında ortaya çıkar. a) read-only bir dosya silinmeye çalışılıyor. b) Directory dolu. c) İsim değiştirilirken var olan bir dosya ismi kullanılıyor. d) Var olan bir directory isminde bir directory açılmaya çalışılıyor. e) İçi boş olmayan veya var olmayan bir directory silinmeye çalışılıyor. f) Açık olmayan bir dosyadan veri okunmaya ya da yazılmaya çalışılıyor. 6 Invalid file handle Geçersiz bir dosya isteği dos sistemine iletilmiş. 12 Invalid file access code Geçersiz dosya erişim kodu. Reset veya append komutlarıyla geçersiz dosya modu değeri kullanılmış. 15 Invalid drive number Getdir komutu ile geçersiz bir sürücü numarası kullanılmış. 16 Cannot remove current directory Rmdir komutu ile aktif directory silinmeye çalışılıyor. 17 Cannot rename accross drives Rename komutu ile aynı sürücüdeki dosyaların ismi değiştirilmeye çalışılıyor. 100 Disk read error Read komutu ile eof karakterinden sonraki bir kayıt okunmaya çalışılıyor. 101 Disk write error Close, write, writeln komutlarıyla dolu bir diskete işlem yapılıyor. 102 File not assigned Assign komutu ile dosya bir temsilci değişkene atanmamış. 103 File not open Açılmamış bir dosya üzerinde işlem yapılıyor. 104 File not open for input Text dosyası giriş için açık değil. Bu hata read, readln, eof, eoln, seekeof veya seekeoln komutlarının açık olmayan dosyaya kullanılması esnasında verir. 105 File not open for output Text dosyası çıkış için açık değil. Bu durumdaki dosyaya write ya da writeln komutlarının kullanımı sırasında ortaya çıkar. 106 Invalid numeric format Text dosyasından read veya readln komutu ile sayısal bir veri okunurken uygun olmayan bir sayısal değer ile karşılaşıldı. 150 Disk is write protect Disket yazmaya karşı korumalı. 151 Unknown unit Tanımsız ünite. 152 Drive not ready Disket, sürücüye takılmamış veya sürücü kolu kapatılmamış. 154 CRC error in data Diskete kaydedilmiş datada hata var. Disk yüzeyinde fiziksel hata olabilir. 156 Disk seek error Disketten data okunurken hataya rastlandı. 157 Unknown media type Disket dos tarafından tanınmıyor. Formatsız veya uyumsuz formatlı bir disk okutulmaya çalışılıyor. 158 Sector not found Disket bozuk olduğundan data bulunamıyor. 159 Printer out of paper Yazıcıya kağıt takılmamış 160 Device write fault Donanım hatası nedeniyle disket ya da hard diske yazılamıyor. 161 Device read fault Donanım hatası nedeniyle disket ya da hard diskten data okunamıyor. 162 Hardware failure I/O portunda arıza tespit edildi. 200 Division by zero /, div veya mod operatörü ile bir sayının sıfıra bölümü oluşuyor. 201 Range check error {$R+} compiler bildirisi kullanıldığında bir değişkene sınırları dışında veri girilmekte veya bir dizi değişkenin boyutları sınır dışında kalıyor. 205 Floating point overflow Tanımlanmamış bir real değişkene sınırları dışında veri atanmaya çalışılıyor. ANLATILACAK KONULAR: 9- DOSYALAR A-Dosya Kavramı B-Text Dosyalar 1-Dosya Yaratma 2-Dosyaya Bilgi Yazma 3-Dosyadan Bilgi Okuma 4-Dosyaya Bilgi Ekleme 5-Dosyadan Bilgi Silme 6-Dosyada Bilgi Değiştirme Giriş : Kullanılan programlama dili ne olursa olsun, programcı tarafından ele alınacak dosyalar iki grupta incelenebilir. Bunlar program ve veri dosyalarıdır. Program ve veri dosyaları, kendi içlerinde alt sınıflara ayrılabilir. 1. Program Dosyaları a. Source Dosyalar i. Ana Program Dosyaları ii. Include Dosyalar b. Object Dosyalar i. COM uzantılı dosyalar ii. CHN uzantılı dosyalar iii. Overlay dosyalar iv. External dosyalar 2. Veri Dosyaları a. Sırasal Erişimli Dosyalar (Text dosyalar) b. Rasgele Erişimli Dosyalar (Record tipi dosyalar) c. Byte tipi Dosyalar Object Program Dosyaları : Source program (program text'i) dosyalarının derlenmesi sonucunda elde edilir. Object dosyalar, sadece object kodları içeren icra edebilir dosyalardır. Bunlardan com uzantılı olanlar, isimlerinin sistem komut satırından girilmesi durumunda icra görürler. Diğer object kod dosyaları ise, com uzantılı bir program dosyasının icrası sırasında çağrılarak icra ettirilir. Diğer bir deyişle, overlay ve external dosyalar ile chn uzantılı dosyalar, com uzantılı dosyalar tarafından kullanılırlar. Ancak bir com uzantılı dosya, başka bir object kod programı tarafından da çağrılarak icra ettirilebilir. Com ve chn uzantılı dosyaların, başka programlar tarafından çağrılarak icra ettirilebilmesi için execute ve chain prosedurleri kullanılır. Overlay dosyalar : Ana programa ait object kodun bir parçası olmakla birlikte, ana programa ait dosyadan ayrı olarak oluşturulan dosyalara overlay dosya adı verilmektedir. Bilgisayarın belleğine sığmayacak büyüklükteki programların parçalara ayrılması, bu parçaların dosyalar halinde disk/diskete kayıt edilmesi ve icra sırasında her bir dosyanın ayrı ayrı, aynı bellek bölgesine aktarılarak icra ettirilmesi Turbo Pascal tarafından sunulan bir tekniktir. Bu tekniğe overlay dosya sistemi adı verilir. Ana programın hacmini büyüten alt programlar (prosedur ve fonksiyonlar), programcı tarafından overlay olarak tanımlanabilir. Derleme sırasında bu tür programlara rastlanırsa, alt programa ait object kod, ana programın oluşturduğu object kod dosyasına değil ayrı bir dosyaya yazılır. Bu tür dosyalar da overlay dosyalardır. Overlay alt programları içeren bir ana program icra ettirilmek istendiğinde, overlay dosyaların yükleneceği boş bir bellek bölgesi ile birlikte ana programa ait object kod belleğe yerleşir. Bu boş bellek bölgesine overlay alanı adı verilir. Overlay alanlarının sayısı, derleme esnasında oluşturulan overlay dosyalarının sayısı kadardır. Overlay bellek alanının büyüklüğü, en büyük overlay alt programını kapsayacak şekilde düzenlenir. Böylece ayrılan alanın, bütün overlay alt programlarını alabilecek genişlikte olması sağlanmış olur. External dosyalar : Daha önceden yazılmış ve object kod halinde disk/diskete kaydedilmiş programlar Pascal programı içersinden çağrılarak kullanılabilir. Örneğin, daha çok makine dili ile yazılmış olan, fakat Pascal programı içinden kullanılabilen object dosyalar, başka bir program dosyası olup, external dosya olarak isimlendirilir. External dosya içinde yer alan programlar, Pascal tarafından birer alt program olarak ele alınırlar. Tanımlanırken, tanım başlığını takiben external bildirisi kullanılan alt programlara (fonksiyon veya prosedurlere) external alt program adı verilmektedir. External alt programların bir tanım veya icra blokları yoktur. Bu tür bir alt programın tanımlanmasında sadece tanım başlığı kullanılır. Tanım cümlesinin bitiminde yazılan external bildirisini takiben, bu alt program tarafından kullanılacak external dosyanın adı yazılır. Bu ad string forma uygun olmalıdır. Derleme sırasında bir external bildirisine rastlanırsa, external dosya içindeki object kod okunarak, tanımlanan alt program için ayrılan alana yerleştirilir. Bu object kodun Doğru veya yanlış olması Pascal tarafından kontrol edilmez. Include dosyalar : Turbo Pascal editörü içinde yazılabilecek kaynak programların maksimum uzunluğu 64 K dır. Bu uzunluk, küçük belleğe sahip bilgisayarlar için daha da azalmaktadır. 64 K yı geçen, oldukça geniş kapsamlı programlar yazılmak istendiğinde, editörün sunduğu hacim yeterli olmayacaktır. Turbo Pascalın $I bildirisi, bellekte yani editörün içinde bulunmayan fakat o anda diskette bulunan program parçalarının derleme esnasında okunmasını ve bellekteki programın bir parçası olarak kabul edilmesini sağlar. Bu tür kaynak program dosyalarına include dosyalar adı verilir. Include dosyalarının diğer bir kullanım amacı ise; programcı tarafından library niteliğinde oluşturulan program parçaları veya rutinlerinin ayrı dosyalar halinde disk/diskette saklanması ve her ihtiyaç duyulduğunda, include dosya olarak, başka program textlerine ilave edilmesidir. Veri Dosyaları : Veri dosyaları, derleme anında değil icra anında, programları tarafından oluşturulur ve kullanılır. Bu dosyaların içeriklerinde object kodlar değil, programlar tarafından işlenen bilgiler yer alır. Aynı yapıdaki kayıtların oluşturduğu bütündür. Sürekli olarak saklanması gereken bilgiler ya program içersinde sabit olarak tanımlanırlar ya da dosyalarda saklanırlar. Program içersinde sabit olarak bilgiler yazılabilir. Ancak bir okuldaki öğrenci listesi, bir işletmenin müşteri kayıtları ve bunlara ait hareketler veya muhasebe kayıtları gibi bilgiler program içersinde yazılamazlar. Bu bilgilerin dosyalarda tutulması gerekir. Turbo Pascal programlama dilinde üç farklı dosyalama şekli mevcuttur. Veri Dosyaları ? Sırasal Erişimli Dosyalar (Text dosyalar) ? Rasgele Erişimli Dosyalar (Record tipi dosyalar) ? Byte tipi Dosyalar Sırasal Erişimli Dosyalar (Text Dosyalar) : Metin dosyaları olarak adlandırılan bu dosyalarda kayıtlar arka arkaya yazılırlar. Her kaydın sonunda CR (Carriage Return) (EOL = End Of Line) işareti vardır. Dosyaya yazılan ilk kayıt dosyanın başında, son girilen kayıt ise dosyanın en sonunda bulunur. Bir kayıta erişmek için o kayıta kadar olan bütün kayıtların okunması gerekir. Çok kayıttan oluşan dosyalarda kayıtlara erişim yavaş, yani çok zaman gerektirdiğinden text dosyalar tavsiye edilmez. Bu dosyaların içerikleri herhangi bir editör programı ile görülebileceği gibi DOS'un type komutu yardımı ile de görülebilir. Text dosyalarda dosyaya kayıt yazmak veya okumak için dosya farklı komutlarla açılmalıdır. Bunun için dosyanın her defasında kapatılıp yeniden açılması gerekir. Okunan kayıtları tekrar okumak için dosyanın kapatılıp yeniden açılması gerekir. Text dosyalar, diğer bir tabirle sırasal erişimli dosyalar, karakterleri içeren satırlardan oluşur. Dosya içinde yer alan her bir satır, bu dosyanın bir kaydı olarak kabul edilir. Sırasal erişimli dosya organizasyonunda, gerek kayıt yapılması, gerek mevcut kayıtların okunması sırasal yapıda gerçekleşir. Ayrıca, aynı anda, hem okuma hem yazma işlemi yapılamaz. Text dosyaların sırasallığını daha net belirtmek üzere, text dosyanın kayıtlarının normal satırlara benzediğini kabul edelim. Böyle bir durumda, kayıt yapma işlemi, ilk satır üzerinde başlayacak, daha sonra yapılacak kayıt ise bir sonraki satır üzerine gerçekleştirilecektir. Diğer bir deyişle 2 nolu satır üzerine kayıt yapabilmek için 1 nolu satıra kayıt yapılması zorunludur. Aynı kural, mevcut bir dosyanın kayıtlarının okunması sırasında da geçerlidir. Dosya açıldığında ilk okunacak kayıt, dosyanın ilk satırındaki kayıt olacaktır. Her okuma işlemi sonrasında, bir sonraki pozisyonda bulunan kayıt, okunabilecek yeni kayıt olarak belirlenir. Diğer bir deyişle, istenilen bir kaydın okutulabilmesi için, bir önceki kayıtın okutulmuş olması şarttır. Disk veya disket sürücüsündeki okuma/yazma kafası, her bir giriş/çıkış işleminden sonra, bir sonraki satırın üzerine gelecek şekilde hareket eder. Dosya açık olduğu sürece, daha önce okutulan veya yazılan bir kayıt tekrar okutulamaz veya yazılamaz. Diğer bir deyişle, sırasal dosyalar için okuyucu ve yazıcı kafaların geriye hareket ettirilmesi mümkün değildir. Sırasal dosyalar üzerinde kullanılan üç ayrı açılış komutu iki ayrı açılış moduna karşılık gelir. Bunlar yazma ve okuma modlarıdır. Bir dosya yazma modunda açılmışsa, bu dosya üzerine sadece kayıt yapılabilir. Okuma modunda açılan dosyalarda ise, sadece okuma işlemlerinin yapılmasına izin verilir. Sırasal erişimli dosyanın her bir kaydı, ASCII karakterlerinden oluşur. Disk veya diskete ise bu karakterlerin ASCII kodları, byte'lar halinde yazılır. Byte'ları içermesi nedeniyle sırasal erişimli dosyalar, içerik bakımından byte tipi dosyalardan farksızdır. Dosyanın her bir kaydı, bir satır sonu işareti içerir. Bu işaret CR/LF ikili karakterlerinden meydana gelir ve her kayıtın sonunda yer alır. Bu işaret kayıtların birbirinden ayrı tutulmasını sağlar. Sırasal dosyalarda kayıt uzunlukları sabit değildir. Diğer bir deyişle, her bir satırın içerdiği karakter sayısı bir diğerinden farklı olabilir. Son kayıtın sonunda, yani dosyanın sonunda dosya sonu işareti bulunur. Bu işaret Ctrl + Z karakterine karşılık gelir. Dosya sonu işareti, yazma modunda açılan bir dosyanın kapatılması esnasında dosya sonuna yerleştirilmektedir. Sırasal dosyanın her bir kaydı birden fazla bilgiyi içerebilir. Bu bilgiler, aralarında bir ayraç karakteri olmadan dosyaya yazdırılır. Aynı kayıt veya aynı satır üzerinde yer alan bilgilerin, birbirine karıştırılmaması programcının sorumluluğu altındadır. Text dosyalar için kullanılan deyim, prosedur, fonksiyon ve bildiriler aşağıda listelenmiştir: Text : Bildiri deyimi Assign : Aktarma deyimi Reset : Dosyanın açılması Rewrite : Dosyanın açılması Append : Dosyanın açılması Write, WriteLn : Kayıt yapma Read, ReadLn : Kayıt okuma Eoln : Satır sonu kontrolü SeekEoln : Satır sonu kontrolü Eof : Dosya sonu kontrolü SeekEof : Dosya sonu kontrolü Truncate : Dosyanın kesilmesi Close : Dosyanın kapatılması Dosya Kullanma Aşamaları Sırasal bir dosyanın programcı tarafından kullanıma hazır hale getirilmesi, kullanılması ve kullanım sonrasındaki işlemleri inceleyelim : Dosya Değişkeninin Tanımlanması : Disket veya diskte açılacak sırasal bir dosya, program içersinde sabit isimlerle değil, bir değişken ile temsil edilir. Dosyaları temsil eden değişkenlere dosya değişkeni adı verilir. Sırasal dosyaların bellekteki temsilcisi olan dosya değişkenleri TEXT bildiri deyimi, veri tipi ile tanımlanır. Tanımlama VAR bölümünde gerçekleştirilir. Tanımlamanın genel formu aşağıda verilmiştir. DosyaDeğişkeni : TEXT ; veya DosyaDeğişkeni : TEXT [XX] ; Text bildirisi ile tanımlanan her dosya değişkeni için, bellekte bir alan ayrılır. Bu alan buffer olarak isimlendirilir ve tanımlanan dosya değişkeni ile temsil edilir. Bu alanın uzunluğu 128 byte'tır. Ancak bu default uzunluk, yukarıdaki ikinci tanım cümlesi kullanılarak değiştirilebilir. İkinci tanım cümlesinde köşeli parantezler içersinde yazılan XX sayısı, bir tamsayı değer olup, dosya değişkeni için ayrılacak alanın uzunluğunu gösterir. Dosya Buffer'ları : Text dosyaları temsil eden her bir dosya değişkeni için, compiler tarafından bir bellek bölgesi ayrılır. Dosyaya yazdırılacak veya dosyadan okutulacak bilgilerin, disk ile bellek arasındaki transferleri bu bellek bölgesi üzerinden yapılır. Bu bellek bölgesine söz konusu dosyanın buffer'ı denilir. Text dosyalar için, Turbo Pascal tarafından ayrılan buffer'ın uzunluğu 128 byte'tır. Ancak bu default uzunluk programcı tarafından değiştirilebilir. Buffer uzunluklarının küçük ya da büyük olması, disk veya disketlerle olan okuma veya yazma işlemlerinin yoğunluğunu etkiler. Dosyaya üst üste kayıt yapılması sırasında, dosyaya yazılacak bilgiler önce buffer'a aktarılırlar, bu bilgiler buffer dolduğunda toplu halde dosyaya yazılırlar. Dosya değişkeni için ayrılan buffer ne kadar küçükse , bu yazma işlemi de o kadar sık tekrarlanır ve her yazma işlemi programın icrasını belli bir süre durdurur. Buffer uzunluğu yeteri kadar büyükse yazma işlemi bu denli sık tekrarlanmayacak ve programın icrası daha çok hızlanacaktır. Çünkü dosyaların açıldığı disk/disket sürücüleri elektronik özellikleri olmakla birlikte daha çok mekanik kısımlardan meydana gelmektedir. Bilgisayar sisteminin mekanik kısımları elektronik kısımlarına oranla çok daha yavaş çalışırlar. O halde mekanik kısımlarının birkaç kez yerine sadece bir kez kullanılması hızı artıracaktır. Bu nedenle, dosya buffer'larının büyük olması tercih edilir. Ancak buffer'ların büyük olmasının dezavantajı da vardır. Bu dezavantaj, kullanılan belleğin önemli bir kısmının dosya için harcanmasıdır. Programda kullanılacak herhangi bir text dosyasının buffer uzunluğunu değiştirmek için; TEXT bildiri deyimini takiben köşeli parantez içersinde istenilen buffer uzunluğu verilir. Örneğin aşağıdaki tanım cümlesi, Dos isimli dosya değişkeni tarafından temsil edilecek sırasal dosya bufer'ının 2 K olmasını sağlar; Dos : Text [ 2048 ] ; Not : Text dosyaya ait herhangi bir kaydın maksimum uzunluğu ile, buffer uzunluğunun aynı olması şeklinde bir kural yoktur. Text Dosyalarda Kullanılan Komutlar 1- Dosya Değişkenlerine Değer Aktarılması : Dosya değişkenleri üzerinde yapılacak işlemler diğer değişkenlere göre oldukça farklıdır. Her şeyden önce bir dosya değişkenine değer aktarımı için bilinen yöntemler kullanılamaz. Tanımlanan bir dosya değişkeninin temsil edeceği değerler gelişigüzel veriler değil, aygıt isimleri veya disketler üzerindeki dosya isimleridir. Böyle bir ismin, dosya değişkenine aktarılması için ASSIGN deyimi kullanılır. ASSIGN (DosD, St - Procedure) Dosya değişkenine dosya ismini atamak için kullanılır. Formda yer alan DosD bir dosya değişkeni, St ise bir string sabit veya string değişkendir. Assign prosedürü, dosya isimlendirme kurallarına uygun olarak verilen ve St ile temsil edilen dosya ismini DosD isimli dosya değişkenine aktarır. Kısaca assign prosedürünün işlevi; dosya oluşturmak, bilgi girişi yapmak, girilen bilgileri okutmak amacı ile dosyanın açılmasını sağlar. Yazılımı : ASSIGN (Dosya Tanımı , '[Bulunduğu çalışma alanı] Dosyanın Manyetik ortamdaki Adı . Uzantısı') ; "Dosya tanımı" dosyanın program içinde kullanılacak ismidir. Tek tırnak içinde; dosya manyetik ortamda hangi çalışma alanında, hangi isim ve uzantı ile bulunduğu belirtilmelidir. DOS'ta dosya ismi en fazla 8 karakter, uzantısı ise en fazla 3 karakter olabilir. İsmi ve uzantısı arasına nokta işareti konulur. Örnek : ASSIGN (dosya,'MUSTERI.DAT'); ASSIGN (dosya,'C:\YAZI\MUSTERI.DAT'); ASSIGN (dosya,'A:\HESAP\MUS\MUSTERI.DAT'); Sürücü ve director adı verilmediğinde dosya default sürücü ve directorde bulunduğu kabul edilir. Dosya adının değişken olması durumunda aşağıdaki gibi işlem yapılabilir. Örnek : Var Dos : TEXT ; Begin ASSIGN (Dos,'Ornek.Dat') ; ... Örnek : Var Dosyaadi : String [67] ; Dosya : Text ; Begin Write ('Dosya Adı :') ; Readln (Dosyaadi) ; Assign (Dosya, dosyaadi ) ; ... End. 2-Dosyaların Açılması : Sırasal bir dosya üzerinde giriş/çıkış işlemlerini yapabilmek için, bu dosyanın açılması gerekir. Dosyanın açılması file pointer denilen, disket sürücüsündeki okuyucu veya yazıcı kafanın dosya üzerine konumlandırılmasıdır. Bu konumlanma gerçekleştikten sonra, dosyaya bilgi yazılması veya dosyadan bilgi okunması işlemlerine geçilebilir. Sırasal dosyalar birkaç farklı şekilde açılır. Reset, ReWrite ve Append komutlarının icrası, sırasal dosyayı yazma modunda açar. Reset komutu ise söz konusu dosyayı okuma modunda açacaktır. Dosyanın açılma modu, dosya üzerinde yapılacak işlemin amacına bağlıdır. Dosyadan kayıt okunacaksa reset, dosyaya kayıt yapılacaksa ReWrite veya Append komutları kullanılır. REWRITE DosD - Procedure Dosyaya bilgi yazılması için dosyanın açılmasını sağlar. Bu prosedür, DosD ile temsil edilen dosyayı disk/diskette ilk defa oluşturmak için kullanılır. Eğer bu dosya belirtilen manyetik ortamda mevcutsa bu dosya yeniden oluşturulacak ve içindeki bilgiler silinecektir. ReWrite ile açılmış sırasal dosyalar yazma modunda açılacağına göre, bu dosya üzerinde sadece Write ve WriteLn deyimleri çalıştırılabilir. Yazılımı : REWRITE (dosya değişkeni) Dosya açılmadan önce dosya değişkenine Assign komutu tarafından dosya isminin atanması gerekir. {$I-} ve IOResult fonksiyon değerinin sıfır olması, işlemin başarılı olarak yapıldığını, farklı bir değer alması işlemin yapılmadığını gösterir. APPEND DosD - Procedure Dosyaya bilgi eklemek için dosyanın açılmasını sağlar. Bu prosedür, DosD ile temsil edilen ve disk/diskette mevcut olan dosyayı yazma modunda açar ve yazıcı kafayı dosyanın sonuna konumlandırır. Böylece dosyanın sonundan itibaren, dosyaya kayıt ilavesi gerçekleştirilebilir. Belirtilen manyetik ortamda eğer dosya mevcut değilse, bir run-time hatası meydana gelir ve programın çalışması kırılır. Append ile açılmış sırasal dosyalar üzerinde sadece write ve writeln deyimleri çalıştırılabilir. Yazılımı : APPEND (Dosya Değişkeni) {$I-} ve IOResult fonksiyon değerinin sıfır olması, işlemin başarılı olarak yapıldığını, farklı bir değer alması işlemin yapılmadığını gösterir. RESET DosD - Procedure Mevcut dosyadan bilgilerin okunması için dosyayı açar. Bu prosedür, DosD ile temsil edilen ve disk/diskette mevcut olan dosyayı okuma modunda açar. Diğer bir deyişle, Disk/disket sürücüsünde bulunan okuyucu kafa dosyanın ilk kaydı üzerine konumlandırılır. Belirtilen manyetik ortamda eğer dosya mevcut değilse, bir run-time hatası meydana gelir ve programın çalışması kırılır. Reset ile açılmış sırasal dosyalar üzerinde sadece read ve readln deyimleri çalıştırılabilir. Yazılımı : RESET (Dosya değişkeni) Dosyada kayıt okuma işlemi dosya sonu (EOF=End Of File) işaretine kadar yapılabilir. {$I-} ve IOResult fonksiyon değerinin sıfır olması, işlemin başarılı olarak yapıldığını, farklı bir değer alması işlemin yapılmadığını gösterir. Sonuç olarak; dosya okunacaksa reset, dosya ilk defa oluşturularak yeni kayıt yapılacaksa ReWrite, mevcut bir dosyaya kayıt ilavesi yapılacaksa Append komutlarının kullanılacağını söyleyebiliriz. Ayrıca disk/diskette mevcut olmayan bir dosyanın Reset veya Append ile açılmasının hataya sebep olacağı açıktır. 3- Giriş / Çıkış İşlemleri : Dosyaya kayıt yapılması veya dosyanın mevcut kayıtlarının okunması şeklindeki giriş/çıkış işlemleri dosya açık olduğu sürece gerçekleştirilebilir. Giriş/çıkış amacıyla kullanılan Write/WriteLn deyimleri yazma modu altında, Read/ReadLn deyimleri ise okuma modu altında çalıştırılabilir. Ayrıca okuma modu altında açılan dosyalar üzerinde, kontrol amacıyla kullanılan fonksiyonlar vardır. Reset ile açılmış bir dosya üzerinden kayıt okunurken, her okuma işleminin öncesinde, okunabilecek bir bilgi ya da kayıdın bulunup bulunmadığının kontrol edilmesi gerekir. Çünkü, olmayan bir kayıdın okunmak istenmesi hatalara yol açabilir. Bu tür kontroller için Eoln, Eof, SeekEoln ve SeekEof fonksiyonları kullanılır. WRITE DosD,D1,D2,..Dn - Procedure Formda yer alan, D1, D2, .. Dn değerleri, DosD ile temsil edilen dosyaya yazılacak olan değişken, sabit veya ifadelerdir. Write deyiminin bir dosya üzerindeki etkisi, ekran üzerindeki etkisinden farksızdır. Farklı olan tek şey, değer çıktısı yapılacak alanın imleç ile değil, disk/disketteki yazıcı kafa ile gösterilmesidir. Write deyiminin icrası ile, verilen değerler söz konusu dosyaya, o anki pozisyondan itibaren yazılırlar ve yazıcı kafa son yazılan değerin yanında kalır. Yazılımı : Write (dosya değişkeni, Bilgi veya değişken listesi) Giriş yapılan bilgiler, birden fazla satırdan oluşuyor ve her satır girişinden sonra, enter tuşuna basılmışsa bile bilgilerin tamamını tek bir satır gibi yazdırır. Örnek: Var x2 : text ; Cins : String [20] ; Mik : integer ; Begin assign (x2,'C:\lesson\pascal\x2.dat') ; rewrite (x2) ; Write ('Cinsi = ') ; readln (cins) ; Write ('Miktarı = ') ; readln (mik) ; Write (x2 , cins) ; Write (x2 , mik) ; close (x2) ; Assign (x2 , 'C:\lesson\pascal\x2.dat') ; reset (x2) ; ReadLn (x2 , cins , mik) ; WriteLn ('Cinsi = ' , cins , 'miktarı = ' , mik ) ; ReadLn ; close (x2) ; End . Program çalıştırıldığında; Cinsi = XYZ Miktarı = 789 Cinsi = XYZ789 miktarı = 0 Komut ; write (x2,cins,mik); şeklinde verilirse de sonuç aynı olur. WRITELN DosD,D1,D2,..Dn - Procedure WriteLn deyimi tamamen Write deyimi gibi çalışır. Write deyiminden farklı olarak, yazım işleminin sonrasında son yazılan değerin sonuna satır sonu işareti yazdırılır. Bu işaret satırın sonunu gösterdiğine göre, yazıcı kafanın bulunduğu yeni pozisyon bir sonraki satırın ilk byte 'ı olacaktır. Böylece satır sonu işaretleri, dosyanın kayıtları arasında, ayraç karakteri olarak kullanılmış olur. Bu nedenle Write yerine WriteLn deyimlerinin kullanılması tercih edilir. Yazılımı : WriteLn (dosya değişkeni, Bilgi veya değişken listesi) Bu komutun kullanılabilmesi için dosyanın ReWrite veya Append komutları ile açılmış olması gerekir. Dosya değişkeni, text dosyalar için TEXT veri tipi ile tanımlanmış olmalıdır. WriteLn deyimi kullanılarak klavyeden girilen her satır bilgisi enter yapıldığında satır sonuna <CR> ve <LF> satır sonu işaretlerini vererek manyetik ortama yazdırır. Komut girilen bilgileri manyetik ortama yazdırırken 0D ve 0A satır sonu işaretlerini her satırın sonuna ekler. <CR> Carriage Return : Decimal 13, hexadecimal 0D olan belirleyicidir. <LF> Line Feed : Decimal 10, hexadecimal 0A olan belirleyicidir. Örnek : Write (dd, maas) ; Writeln (dd, saat:3 , maas:4:2) ; Değişken listesi içerisindeki veriler, istenilen formata göre "dd" ile temsil edilen dosya içersinde yazılırlar. Değişken listesi içerisindeki değişkenlerin tipi standart (Boolean, Char, integer, real) tip olduğu gibi string tip de olabilir. Değişken char tipinde ise, dosyaya sadece bir tek karakter yazılır. Diğer tiplerde ise bir dizi karakter yazdırılabilir. Örnek: Her satır için, yazdırma komutu ayrı ayrı verilirse istenilen normal çıktı alınır. Var x1 : text ; Cins : String [20] ; Mik : integer ; Begin assign (x1,'C:\lesson\pascal\x1.dat') ; rewrite (x1) ; Write ('Cinsi = ') ; readln (cins) ; Write ('Miktarı = ') ; readln (mik) ; WriteLn (x1 , cins) ; WriteLn (x1 , mik) ; close (x1) ; Assign (x1 , 'C:\lesson\pascal\x1.dat') ; reset (x1) ; ReadLn (x1 , cins , mik) ; WriteLn ('Cinsi = ' , cins , 'miktarı = ' , mik ) ; ReadLn ; close (x1) ; End . Program çalıştırıldığında; Cinsi = ABC {manyetik ortama ABC0D0A şeklinde verilir.} Miktarı = 123 {manyetik ortama 1230D0A şeklinde verilir.} Cinsi = ABC Miktarı = 123 Ancak komut; writeln (x1,cins,mik) ; şeklinde verilirse, cins ve miktar bilgilerinden sonra satır sonu işareti verilir (ABC0D0A) ve write komutu gibi sonuç alınır. READ DosD,D1,D2,..Dn - Procedure Genel formda yer alan D1, D2, ...Dn lerin her biri, değerleri dosyadan okunacak olan değişkenlerdir. Reset deyimi ile açılan bir dosyadan ilk okunacak olan kayıt dosyanın ilk kaydıdır. Read deyiminin her icrasından sonra, okuyucu kafa ile okutulan karakter sayısı kadar ilerler. Eof fonksiyonu true değerini veriyorsa, okuyucu kafa daima aynı yerde, yani dosya sonu işaretinin üstünde kalır. Yazılımı : Read (Dosya değişkeni , değişken listesi) Text dosyasındaki kaydın satır sonu kontrol karakteri de dahil bilginin tamamını tanımlanan değişkenlere okur. Satır sonu belirleyicisi olan <CR> veya <LF> işaretleri dahil tüm bilgilerin okunmasını sağlar. Örnek : Read (dd, x, y, z) ; Read deyimi her işleyişinde dosyanın ilk kaydının ilk karakterinden itibaren okuyucu kafayı okutulan karakter kadar ilerletir. Okuyucu kafa her ilerleyişinde dosya içersindeki veriler değişken listesindeki değişkenlere atanır. Değişken listesindeki her bir değişkenin tipi char, integer veya real olabilir. Eğer değişkenin tipi char ise değişken içersine sadece bir karakter okunur. Şayet değişken tipi integer veya real ise bir dizi sayı okunur ve okuyucu kafa boşluk karakterinden sonraki sayıya ilerler. READLN DosD,D1,D2,..Dn - Procedure ReadLn deyimi, Read deyimi gibi çalışır, read deyiminden farklı olarak her icradan sonra okuyucu kafa bir sonraki kayıdın ilk karakteri üzerine konumlanır. Diğer bir deyişle okuyucu kafa okutulan karakter sayısı kadar ilerledikten sonra, kayıdın sonunda yer alan satır sonu işaretini arar ve bu işareti takip eden ilk karakterin üstüne konumlanır. Yazılımı : ReadLn (Dosya değişkeni , değişken listesi) Reset komutu ile açılmış dosyadan kayıt okumak için kullanılır. Text dosyasındaki kaydın satır sonu kontrol karakteri hariç tamamını tanımlanan bellek değişkenlerine okur. Diğer bir deyişle, satır sonu belirleyicisi olan <CR> veya <LF> işaretlerine kadar bilgilerin okunmasını sağlar. Dosyanın mevcut ve EOF (dosya sonu) fonksiyonunun sonucunun False olması gerekir. Bilgi okuma işleminin EOF işaretinden sonra yapılması hata oluşmasına sebep olur. Örnek : ReadLn (dd, ch1, ch2) ; Aşağıdaki tabloda read ve readln prosedürleri için çeşitli örnekler verilmiştir. Bu örnekte, "R" real, "I" integer, "C" char tipi değişkenlerdir. Veriler arasındaki boşluklar "_" alt çizgi ile gösterilmiştir. Buna göre Prosedürün icrasından sonra aldığı değerler yine bu tabloda görülmektedir. Read veya ReadLn ifadesi ve icrasından sonra aldığı değerler Veriler Read (dd , R , I , C ) ; R = 1234.56 , I = 789, C = ' ' 1234.56_789_A345.67 <eoln> W<eoln><eof> ReadLn (dd , R , I , C ) ; R = 1234.56 , I = 789, C = ' ' 1234.56_789_A345.67<eoln> W<eoln><eof> Read (dd , R , C , I ) ; R = 1234.56, C = ' ' , I = 789 1234.56_789_A345.67<eoln> W<eoln><eof> ReadLn (dd , R , C , I ) ; R = 1234.56 , C = ' ', I = 789 1234.56_789_A345.67<eoln> W<eoln><eof> Read (dd , C , R , I ) ; C = 1 , R = 234.56 , 1234.56_789_A345.67<eoln> W<eoln><eof> ReadLn (dd , C , R , I ) ; C = 1 , R = 234.56 , C = 789 1234.56_789_A345.67<eoln> W<eoln><eof> Readln (dd , R , I ) ; Read (dd , C) ; R = 1234.56 , I = 789 , C = 'W' 1234.56_789_A345.67<eoln> W<eoln><eof> Readln (dd , R ) ; Readln (dd , C ) ; R = 1234.56 , C= 'W' 1234.56_789_A345.67<eoln> W<eoln><eof> Örnek : ... assign (xdosya,'C:\LESSON\PASCAL\xdosya.dat') ; reset (xdosya) ; ReadLn (xdosya, kayit) ; ... Örnek : Sayısal verilerden oluşan bir text dosyası oluşturalım. Aşağıdaki sayıları yazalım. Sayılar arasında en az bir karakter boşluk bırakılacak. 1234 567 <enter> 999 -17 23 <enter> Program ekrayaz2 ; Var i : integer ; dd : text ; {1} Begin Assign (dd, 'text2.dat') ; {2} Reset (dd) ; {3} While not eof (dd) do {4} Begin Read (dd, i ) ; {5} Write (i : 5) ; {6} end ; close (dd) ; {7} End . Program çıktısı : 1234 567 999 -17 9 Açıklama : {1} "dd" değişkeni, program içersinde kullanılacak olan text tipi dosyayı temsil edeceğinden, "dd" değişkeni var bloğunda text tipi olarak tanımlandı. {2} Data dosyasının ismi, dosya değişkeni içersine atandı. {3} Reset prosedürü disk/disket sürücünün okuyucu kafasını "dd" ile temsil edilen "text2.dat" dosyasının ilk kaydı üzerine konumlandırır. {4} While döngüsü, <eof> fonksiyonunun değeri döngü içersindeki read deyimi ile okunan veri "true" olmadığı sürece devam eder. Çünkü <eof> un değeri dosya sonuna ulaşılmadığı sürece "false" değerindedir. Buna göre "eof (dd)= false" ise, "not eof(dd) = true" dir. {5} "dd" ile temsil edilen "text2.dat" dosyasından her defasında yan yana yazılan bir dizi sayı okunur. Read deyiminin her icrasında ise okuyucu kafa aradaki boşluk ne kadar olursa olsun, bir sonraki sayı üzerine konuşlanır ve o sayıyı "i" değişkeni içersine atar. {6} "i" değişkeni içersine okunan her değer verilen formata göre ekrana yan yana yazılır. {7} Reset ile açılan dosya close prosedürü ile tekrar kapatılır. EOLN DosD - Function (End of Line) Lojik bir fonksiyon olan eoln, okuyucu kafanın kayıt sonu işareti üzerinde bulunup bulunmadığını kontrol eder. Okuyucu kafa kayıt sonu işareti olan CR / LF ikilisinin ilk karakteri üzerinde ise true değerini aksi takdirde false değerini verir. Eoln fonksiyonunu kullanmaktaki amaç, üzerinde bulunulan kaydın, bulunulan pozisyondan itibaren okunabilecek karakteri olup, olmadığını öğrenmektir. Yazılımı: Eoln (Dosya değişkeni) ; While not Eoln (dosya değişkeni) ; WriteLn (Dosya,satır) komutuyla satır sonuna verilen, 0D ve 0A işaretlerini kontrol ederek, satır sonuna gelindiği için okuyucu kafasının bir alt satır başına yönelmesi sağlanır. Bir pascal programı, char tipi bir değişken içersine <eoln> karakterini read komutu ile okuduğunda, o değişkenin içersindeki değer Ctrl + M tuşlarının (enter) ürettiği karakterdir. Eğer değişkenin içersindeki değer ekrana yazdırılacak olursa bir şey görülmez. Örnek : Eoln (dosya) ; Eoln (d) ; Dosya değişkeni ile temsil edilen text dosyası içersinde, okunan karakter <eoln karakteri ise, fonksiyonun sonucu true dir. Aksi halde fonksiyon sonucu false dir. Buradan anlaşıldığı gibi fonksiyon sonucunun tipi boolean dir. Örnek : Var x1 : text ; satir : string [50] ; i : integer ; Begin Assign (x1,'c:\lesson\pascal\x1.dat') ; ReWrite (x1) ; For i : = 1 to 4 do Begin Write (i,' .satır = ' ) ; Readln (satir) ; WriteLn (x1, satir ) ; End ; Close (x1) ; Assign (x1,'c:\lesson\pascal\x1.dat') ; Reset (x1) ; If eoln (x1) then halt ; Readln (x1, satir) ; Writeln (satir) ; ReadLn ; close (x1) ; End . Açıklama : Program çalıştırıldığında art arda dört satır girildiği halde, okuma bölümünde satır sonu kontrolü yapıldığından, ilk satır bilgisinin görüntüsü alındıktan sonra program durdurulur. SEEKEOLN DosD - Function Tamamen eoln fonksiyonu gibi çalışır. Eoln 'dan farklı olarak okuyucu kafanın bulunduğu pozisyon ile kayıt sonu işareti arasında boşluk karakterleri varsa bu karakterleri atlar. Diğer bir deyişle bulunulan pozisyon ile kayıt sonu işareti arasında sadece boşluk karakteri varsa veya bulunulan pozisyon direkt olarak kayıt sonu işareti ise true değerini, aksi takdirde false değerini verir. EOF DosD - Function End Of File. Okuma işlemi sırasında dosya sonuna gelinip gelinmediğini kontrol etmek amacıyla kullanılır. Sonucu boolean tipinde bir fonksiyondur. Okuyucu kafa, DosD ile temsil edilen dosyanın sonunda ise, yani dosya sonu işaretinin üzerinde bulunuyorsa true, aksi halde false değerini verir. Eof fonksiyonu doğru değerini verdikten sonra read veya readln deyimleri kullanılamaz. Eof fonksiyonunu kullanmaktaki amaç, bulunulan pozisyondan itibaren okunabilecek kayıt olup olmadığını öğrenmektir. Yazılımı : Eof (Dosya değişkeni ) ; Örnek : Eof (dosya) ; Eof (d) ; Eof karakteri sistem tarafından otomatik olarak konulur ve bu karakterin DOS'taki karşılığı Ctrl + Z dir. Text dosyası okutulmak amacıyla açıldığında close deyimiyle kapatılarak koruma işareti verilen konumuna kadar olan bilgilerin okunması sağlanır. Yapılan bu kontrol ile programın dosya sonu işaretine rastlandığında okuma işlemi durdurulur. SEEKEOF DosD - Function Eof fonksiyonu gibi çalışır. Eof fonksiyonundan farklı olarak, bulunulan pozisyonda dosya sonu işareti varsa veya bulunulan pozisyon ile dosya sonu işareti arasında sadece boşluk karakteri varsa true, aksi takdirde false değerini verir. 4- Dosyaların Kapatılması : Reset, ReWrite veya Append ile açılmış bir dosya üzerinde istenilen giriş / çıkış işlemleri yapıldıktan sonra, bu dosyanın kapatılması gerekir. Dosyanın kapatılması için Close prosedürü kullanılır. CLOSE DosD - Procedure Close deyimi DosD ile temsil edilen dosyayı kapatır. Dosya ilk defa açılmış ise veya dosyanın sonuna yeni kayıt ilaveleri yapılmış ise dosya sonu adresinin directory'e kayıt edilmesini sağlar. Kayıt işlemleri sonrasında close deyimi kullanılamazsa, dosyanın disk / disketteki yeni durumu directory'e kayıt edilmez, böyle bir durumda da dosya üzerinde yapılan son işlemler geçersiz sayılır. Yazılımı : CLOSE (dosya değişkeni) ; TRUNCATE DosD - Procedure Okunmak üzere açılan dosyalarda kullanılır. Truncate prosedürünün icrası ile, okuyucu kafanın bulunduğu pozisyona dosya sonu işareti yerleştirilir, böylece bu pozisyondan sonraki kayıtlar silinmiş olur. Truncate prosedürünün bir başka etkisi close gibi çalışması yani dosyayı kapatmasıdır. Yazılımı : TRUNCATE (dosya değişkeni) ; Truncate prosedürü ile close prosedürü arasındaki fark, close prosedürü eof özel karakterini dosya sonuna (kayıtların bulunduğu en son karakterden sonra) koyar. Truncate ise, okuyucu kafanın bulunduğu pozisyona koyar. Böylece bu pozisyondan sonraki kayıtların tamamı silinmiş olur. Dosya Oluşturmak Örnek : Turbo Pascal editöründe yeni bir dosya açıp aşağıdakileri aynen görüldüğü gibi yazınız. Satır sonlarında enter tuşuna basınız. Bu bir text dosyasıdır. <enter> İki satırı vardır. <enter> Bu dosyayı text1.dat adında kaydediniz. Yukarıda yazılan text dosyasını okuyup ekrana yazdıran program aşağıda görülmektedir. Program ekrana_yaz ; Var Ch : char ; Dosya : text ; Begin Assign (dosya,'text1.dat') ; Reset (dosya) ; While not eof (dosya) do Begin Read (dosya,ch) ; Write (ch) ; End ; Close (dosya) ; End . Açıklama : Program çıktısı : Bu bir text dosyasıdır. İki satırı vardır. Yukarıdaki programda while do döngüsünde kullanılan not eof ifadesi şunu belirtmektedir: Dosya sonu işareti true olmadıkça yani ch değişkeni ile okunan karakterler içersinde Ctrl + Z tuşlarının oluşturduğu karakter olmadığı sürece, read komutu ile text dosyasından bir karakter oku ve write komutu ile ekrana yaz. Program çıktısından görüldüğü gibi, text dosyasına daha önce yazdığınız tüm karakterler ekrana yazıldı. Şimdi de <eoln> fonksiyonunu kullanarak sadece bir satırı ekrana yazdıralım. Yukarıdaki programda eof yerine eoln yazıp programı tekrar çalıştırınız. Bu defa ekranda sadece ilk satır olan, "Bu bir text dosyasıdır" satırını ekranda göreceksiniz. Çünkü while döngüsü ile ch değişkeni içersindeki karakter Ctrl + M tuşunun (enter) oluşturduğu karakter okununcaya kadar devam edildi. Örnekteki text1.dat dosyasının yerine istenilen bir text dosyasının içeriği de görüntülenebilir. Örneğin autoexec.bat dosyasının içeriğini görüntüleyebiliriz. Dosyaya Bilgi Yazmak Örnek : Klavyeden girilen öğrenci isimlerini ve bir dersten aldığı iki sı
|