DOSYA
(Kütük, File)
Dosya,
aynı tipten verilerin belirli bir sırayla (yazılış sırası) bir kayıt ortamına
yazılmasıyla oluşturulan yapısal bir veri türüdür.
Bilgisayar
kullanımını gerektiren çoğu işler çok sayıda veri kullanır. Üstelik, aynı
konularda bilgi veren verilerin gruplandırılarak bilgisayar izlencesinin her
yürütülüşünde yeniden kullanılması gerekebilir. Örneğin, bir kurumda çalışan
personelin maaş bordrosunu yapan izlencenin her ay yürütülüşünde herbir
personelin adı, soyadı, sicil_no, derecesi, kademesi, göstergesi, katsayı,...
v.b. bilgiler ana belleğe aktarılacaktır. Program yürüyüşü bitip, veriler ana
bellekten silinince, yeniden girilene kadar o verileri kullanma olanağı
olamayacaktır.
Her ay
bu verilerin, kullanıcı tarafından yeniden girilmesi pratik bir yol değildir.
Bunun yerine, her zaman kullanılacak verilerin ana bellek dışında kalıcı bir kayıt ortamına kaydedilerek,
gerektiğinde oradan ana belleğe aktarılabilmeye hazır durumda tutulması uygun bir
yöntem olacaktır. Bu biçimde, bir dış ortama kaydedilerek saklanan veri
kümelerine dosya (kütük, file) denilir.
Eski
programlama dillerinin birçoğu giriş-çıkış deyimlerine sahiptir; klavye, disk,
teyp, printer, ekran gibi çevre birimlerinin herbirisine bağlantı yapabilmesi
için özel komutlar gerekir. Dosyaları
açan, kapayan, dosyalar arasında veri alış verişi yapan anahtar sözcükleri
vardır.
Dosyalar, kayıt
ortamına, bileşenlerine erişim
yöntemine, bileşenlerinin yapısına göre farklı bakış açılarından sınıflara
ayrılabilir.
Genel olarak,
dosyaları, kalıcı (dış) dosyalar
ve geçici (iç) dosyalar diye ikiye ayırabiliriz. Kalıcı dosyalar disk, teyp
CDROM gibi bir dış kayıt ortamına kaydedilip korunabilen ve her istendiğinde
yeniden kullanılabilen dosyalardır.
Geçici dosyalar ise, program çalışırken sistem tarafından ana bellekte
yaratılan ve program kapanınca yok olan dosyalardır. Programcı ve kullanıcı
geçici dosyaların nasıl yaratıldığı ile ilgilenmek zorunda değildir; ama kalıcı
dosyalar hakkında yeterli bilgiye sahip olmalıdır.
Öte yandan,
kalıcı ve geçici bütün dosyalar, erişim yöntemine göre ikiye ayrılır:
1. Sıralı
Erişimli Dosyalar
2. Direk
Erişimli Dosyalar
Sıralı erişimli
bir dosyada kayıtları bir teyp şeridi üzerindeymiş gibi düşünebiliriz.
Kayıtlar, teyp şeridine sırayla yazılır ve sırayla okunur. Dolayısıyla,
dosyanın her açılışında, şeridin başından başlamak gerekir.
Direkt erişimli
dosyada ise, kayıtları bir gramofon plağı ya da bir disk (örneğin, disket, CDROM) üzerine yazılmış
gibi düşünebiliriz. Yazma/okuma kafası, diskte istenen iz ve sektör üzerine
gönderilebilir. Manyetik şeritte olduğu gibi, her seferinde başa sarılması
gerekmez. Dönen disk üzerinde her kaydın yeri (adresi) belirlidir ve sistem,
yazma/okuma kafasını disk üzerinde istenen yere gönderebilir. Dolayısıyla, disk
üzerinde istenen her kayda doğrudan
erişilebilir. Manyetik disket, sabit disk, CD ROM gibi kayıt ortamları buna
olanak sağlar.
1970 li
yıllardan önce, kayıt ortamları delikli karton kartlar, delikli kâğıt şeritler
ve manyetik teyp şeritleri idi. Bu nedenle, o yıllarda yazılan derleyiciler,
mevcut kayıt ortamlarının yapısına uyarak, yalnızca sıralı erişimli dosya türlerini
tanımladılar. Dolayısıyla, o yıllarda yazılan Standart PASCAL yalnızca sıralı
erişimli dosya yaratır.
Daha sonra,
manyetik disket ve disklerin ortaya çıkmasıyla birlikte, kayıt ortamlarını
adresleme (buna formatlama denilir) ve istenilen kayda direk olarak erişme
olanağı doğdu. Böylece, Direk Erişimli
Dosya tipleri yaratıldı. Bunlara, Rasgele
Erişimli (random access) Dosyalar da denilir.
Bu yeni kayıt
ortamları ortaya çıktıktan sonra yazılan bazı PASCAL derleyicileri de direk
erişimli dosya tipini yaratmaktadır. Turbo Pascal da bunlardan birisidir. Ama
ISO PASCAL yalnızca sıralı erişimli doya yaratır.
Bu derste kayıt
ortamlarının fiziksel yapısıyla ilgilenmeyeceğiz. Ancak, PC’ lerde
kullanacağımız disket disk ve CDROM gibi kayıt ortamlarının sağladığı erişim
kolaylığını bilmemiz gerekir. Sıralı erişimli dosyalar da disket, disk ve CDROM
üzerine yazılabilir. Bu kayıt ortamlarına yazılan sıralı erişimli dosyalara,
teyp üstüne yazılanlardan daha kolay ve hızlı erişmek mümkündür. Çünkü, bu
kayıt ortamlarına yazılan dosyaların başlangıç adresleri sistem tarafından
bilinir. Sistem, sıralı erişimli dosyanın bileşenlerinin adreslerini bilmese
bile, dosyanın başlangıç adresini bildiği için, yazma/okuma kafasını dosyanın
başladığı yere gönderebilir. Hızla dönen diskte baştan itibaren dosyanın
bileşenlerini sırayla okuması kolay olur. Dosyayı açmak için, manyetik şeritte
olduğu gibi başa sarma eylemi yoktur. Bu nedenle, bir çok uygulama yazılımı
için, disklere kayıtlı olduğunda, dosyanın sıralı erişimli mi yoksa direk
erişimli mi olduğu, kullanıcı açısından, önem taşımaz. Kullanıcı istediği
kayıtlara çok kolay ve hızlı olarak erişebilir.
Bu bölümde,
önce, Standart PASCAL’ın kullandığı sıralı erişimli dosya işlemlerini
inceleyeceğiz.
PASCAL’da sıralı
erişimli dosyalar Binary Dosyalar ve TEXT (yazı) dosyaları diye ikiye ayrılır.
Kayıt ortamına
ikili sayıtlama sistemine göre yazıldığı için, İngilizce karşılığı olan
“binary” nitelemesini alan dosyalardır.
Önce Standart
PASCAL’daki işlemleri inceleyecek, sonra Turbo Pascal’a has deyimleri
göreceğiz.
PASCAL’da dosya,
yapısal bir veri tipidir.
1. Dosya, aynı tipten verilerin bir kayıt ortamına yazılmasıyla
oluşur. Dosyayı oluşturan aynı tipten verilerin her birisine, dosyanın bir
bileşeni (kayıt) denilir.
2. Dosyanın bileşenleri integer, real, char, boolean gibi temel
veri tiplerinden birisi olabileceği gibi, numaralanmış küme, array, record gibi
programcının önceden tanımladığı bir veri tipi de olabilir.
3.
Ancak,
bileşenler dosya tipinden olamaz; yani bileşenleri dosya olan dosya
yaratılamaz.
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | |·<eof>
Sıralı erişimli bir
dosyanın bileşenleri
Dosya
tipi ile array tipinin benzer ve farklı yanları vardır:
Benzerlikler:
a. Her ikisi de yapısaldır.
b.
Her
ikisinin de bileşenleri aynı veri tipindendir.
Farklılıklar:
1. Array’lerden
oluşan array tanımlanabilir; yani çok boyutlu array yaratırken ARRAY[..] OF
ARRAY[...] OF... deyimi geçerlidir. Ama dosyalardan oluşan dosya yaratılamaz;
yani, FILE OF FILE OF... deyimi geçersizdir.
2. Array tek başına bir kayıt ortamına kaydedilip saklanamaz; mutlaka bir dosya içinde tanımlanmak ve o dosyayla kaydedilmek zorundadır. Dosya bir kayıt ortamına yazılır ve orada saklanabilir ve istenildiğinde çağrılıp yeniden kullanılabilir.
3. Array’in bileşenleri sınırlıdır ve sayısı önceden belirlidir. Dosyanın bileşenlerinin sayısı önceden belirlenmez, istenildiği kadar artırılabilir. Kayıt ortamının sığasından başka bir kısıtlama yoktur.
Dosya bildirimi değişken bildirimi gibidir. İstenirse, dolaysız
olarak, var bölümünde, dosyayı temsil eden bir değişken adı olarak
bildirilebilir: ya da dolaylı olarak type bölümünde yapılabilir.
Doğrudan Dosya Değişkeni Tanımlama:
Var dosya_adı : veri_tipi;
Dosya Tipi Tanımlama:
Type dosya_tipi_adı = FILE OF
<veri_tipi>
Var dosya_adı : dosya_tipi_adı
Örnek : Aşağıdaki bildirimlerin her biri doğrudan dosya
temsil eden değişken tanımlar.
var
Puan : FILE OF Integer;
Simge : FILE OF char;
Fiyat : FILE OF real;
Statu : FILE OF boolean;
Örnek : Aşağıdaki bildirim önce iki boyutlu bir array tipini, sonra bileşenleri o tipten olan bir dosyayı temsil eden değişkeni tanımlar.
Type matris = ARRAY[1..20,1..10] OF real;
Var tablo : FILE OF matris;
Örnek
: Aşağıdaki bildirim önce
bir record tipini, sonra bileşenleri o tipten olan bir dosyayı temsil eden iki
değişkeni tanımlar.
Type
kimlik = RECORD
musteriNo : 1..9999;
ad : string[20];
soyad : string[20];
bakiye : real;
END;
Var
Musteri1, musteri2 : FILE OF kimlik;
Örnek
: Aşağıdaki bildirim önce integer
tipinden bileşenlere sahip bir dosya tipini, sonra o dosya tipini temsil eden
değişkeni tanımlar.
Type Notlar = FILE
OF Integer;
Var Not
: Notlar;
Başlıca
Dosya İşlemleri şunlardır:
1.
Dosya yaratmak ve dosyaya veri yazmak (rewrite),
2.
Daha önce yaratılmış bir dosyadan veri okumak (reset),
3.
Daha önce yaratılmış bir verinin sonuna ek yapmak
(append),
4.
Daha önce yaratılmış bir dosyada bazı verileri
değiştirmek (güncellemek),
5.
Dosyaları birleştirmek (merge),
6.
Dosyayı bir veriye (anahtara) göre sıralamak (sort),
7.
Dosyadan istenen verileri bulup seçmek (dosyayı süzmek,
filter),
Genel amaçlı dillerin hemen hepsi bu işleri yapar; ama herbirisi için
komutlar farklıdır. Hatta, farklı Pascal sistemlerinde dosya işlemleri
birbirlerinden farklı deyimlerle yapılır. Ama bütün sistemlerin yaptığı iş
esasta aynıdır.
Pascal’da sıralı erişimli bir dosya, yukarıda yazılı olan ilk iki amaçtan
yalnız birisiyle açılabilir. Öteki dosya işlemleri bu ikisi yardımıyla yapılabilir.
Direk erişimli bir dosya açıldığında, üzerinde her türlü dosya işlemi
yapılabilir.
Dosya Tamponu (Dosya Değişkeni, File Buffer)
Dosya açılınca, ana
bellekte, dosya bileşeni tipinden bir dosya tamponu
(dosya değişkeni, file buffer) yaratılır.
Dosya tamponu, dosya açılınca, ana bellekte sistemin kendiliğinden oluşturduğu
bir değişkendir. Dosyaya yazılan veriler ve dosyadan okunan veriler bu dosya
tamponu aracılığı ile yapılır. Dosya tamponu, dosya bileşenlerinin tipindendir. Dolayısıyla,
bir dosya bileşeni büyüklüğü kadar yer kapsar. Char ise 1 byte, integer ise 2
byte, real ise 4 byte, record ise recordun büyüklüğü kadar,... Dosya tamponu,
dosyanın bir bileşenine veri gönderen
ve dosyanın bir bileşeninden veri alan bir değişkendir. Bir anda, yalnızca
dosyanın bir bileşeninin içeriğini kapsar.
Dosya İşaretçisi (File Pointer)
Dosya işaretçisi, dosyanın bileşenlerini işaret eder. Bir teypin yazma okuma kafası gibi
düşünülebilir. Belli bir anda bulunduğu yere yazabilir ya da bulunduğu yerdeki
veriyi okuyabilir.
Dosya yazılmak için
açılmışsa, dosya işaretçisi, dosya tamponundaki verinin yazılacağı yeri işaret
eder. Bu yer, dosyanın o andaki sonudur: <eof>.
Dosya okunmak üzere
açılmışsa, dosya işaretçisinin işaret ettiği dosya bileşenin içeriği, dosya tamponuna
girer. İlk açılışta, dosya işaretçisi
dosyanın ilk bileşenini işaret eder.
Dosya Yaratmak
Standart Pascal’da dosya
yaratmak için
Rewrite (Dosya_Adı);
deyimi kullanılır. Bu deyim, dosyayı yazmak için
hazırlar. Dosya
tamponu (file buffer) ana bellekte
açılır. Aynı adla bir dosya varsa, onun içeriğini tamamen siler. Bu adla bir
dosya yoksa, onu yaratır. Her iki durumda da, dosyada hiç bir kayıt olmadığı
için, Dosya
İşaretçisi, dosya sonunu <eof>
işaret etmeye başlar. Bu işlemle silinen dosyanın içeriği bir daha bulunamaz.
Dolayısıyla, var olan dosyaları yanlışlıkla silmemek için, Rewrite deyiminin
önüne bir denetim procedürü konulmalıdır.
Bunu
daha iyi anlatmak için, Standart Pascal’da dosyanın nasıl yaratıldığını,
dosyaya verinin nasıl yazıldığını ve dosyadan verilerin nasıl okunduğunu
açıklamak yetecektir. Bildirge bölümünde
Type PuanlarF = FILE OF Integer;
Var Puan : PuanlarF;
Rewrite(Puan);
deyimi, Puan adlı dosyayı yazmak için
hazır hale getirir. Dosyanın bileşenleri integer tipindendir. Dolayısyla her
bileşen 2 byte uzunlıkta olacaktır.
Standart Pascal’da, dosyayı ana bellekte temsil eden dosya tamponu, dosya değişkeninin (dosya adının) sağına (^)
simgesi konularak gösterilir. Dolayısıyla, Puan dosyasının ana bellekteki
tampon bölgesi Puan^ ile gösterilir. Şimdi veri
girişini şekille gösterelim.
Puan dosyayı, Puan^ ana bellekteki dosya tamponunu, içi dolu dikdörtgen dosya sonunu (EOF
ya da <eof>) ve yukarı ok simgesi dosya işaretçisini göstersin. Rewrite(Puan); deyiminden sonra
durumun şekille temsili aşağıdaki gibi yapılabilir

Bu şekilden görüldüğü
gibi, Puan^ ana bellekte boş olarak durmaktadır; veri almaya hazırdır. Açılan
dosyada hiç kayıt olmadığından, dosya işaretçisi, açılan dosyanın sonunu
<eof> işaret etmektedir. Dosyaya yazılmak üzere gönderilecek ilk veri
için ilk bileşen açılacak ve gelen veri oraya yazılacaktır. Şimdi, dosyanın ilk
bileşenine 45 değerini girmek istersek,
Puan^ := 45;
deyimini
kullanabiliriz. Ya da aynı türden bir değişkenin değerini aktarabiliriz.
Örneğin, x değişkeni Puan dosyasının bileşenleri ile aynı tipten ise (bu
örnekte integer’dir)
x := 45;
Puan^ := x;
aktarması
da geçerlidir. Bu deyimden sonra durum aşağıdaki gibi olur:

Dosya
tamponunda tutulan 45 değerini, puan dosyasının fiziksel kayıt ortamındaki ilk
bileşeni üzerine yazmak için
Put(Puan);
deyimi
kullanılır. Aynı işlemi,
write(Puan, 45);
ya da
write (Puan, x);
deyimleri
de yapar. Dosyaya ilk bileşen yazıldıktan sonra, dosya tamponu boşalır; dosya
işaretçisi bir ileriye gider.
Pascal
dosyalarında bileşenler 0 dan başlayarak numaralanır. İlk bileşen 0-ıncı
bileşendir.

Şimdi,
dosyanın ikinci bileşenine 76 değerini girmek istersek,
Puan^ := 76;
deyimini
ya da yukarıda yaptığımız gibi
x := 76;
Puan^ := x;

Dosya
tamponunda tutulan 76 değerini, fiziksel kayıt ortamının ikinci bileşeni
üzerine yazmak için, yukarıda yaptığımız gibi,
Put(Puan);
deyimini
kullanabiliriz. Aynı işi,
write(Puan, 76);
ya da
write (Puan,x);
deyimlerinden
birisiyle de yapabiliriz. Dosyaya ikinci bileşen yazıldıktan sonra, dosya
tamponu boşalır; dosya işaretçisi bir bileşen ileriye gider.

Benzer işlemi tekrarlayarak, üçüncü bileşene 83 sayısını
girebiliriz. Bu iş için,
Puan^ := 83
Yazmak
yetecektir. Tabii, aynı işi,
x := 83;
Puan^ := x;
Deyimleriyle
de yapabiliriz. Bundan deyimlerden sonra, durum aşağıdaki gibidir.

Dosya
tamponundaki 83 değerini dosyaya yazmak için,
Put(Puan);
ya da
Write (Puan, 83);
deyimi kullanılabilir. Bu deyim, üçüncü bileşen
üzerine 83 değerini yazar.

Bu
işleme istenildiği kadar (fiziksel kayıt ortamı dolana kadar) devam edilebilir.
Kayıt işlemi bitince
Close (Puan);
deyimiyle,
açık olan dosya kapatılmalıdır.
Dosya Okumak
Standart Pascal’da dosya okumak
için,
Reset (Dosya_Adı);
deyimi kullanılır. Bu deyim, dosyayı okumak için
hazırlar. Dosyayı açar ve ana bellekte, Dosya tamponu’nu
yaratır. Dosya işaretçisi dosyanın ilk bileşenini (0-ıncı bileşen) işaret eder.
Dosya işaretçisinin işaret ettiği bileşenin içeriği dosya tamponuna aktarılır.
Buna göre, Puan dosyasını okuma işlemini şekille gösterelim.
Reset (Puan);
Deyiminden sonra, Puan^ dosya
tamponu ve Puan dosyasının durumu şekildeki gibi olacaktır.

Get (Puan);
deyimi, dosya
işaretçisini bir sonraki bileşene gönderir. İstersek, işaretçiyi bir sonraki
bileşene göndermeden önce, tampon içindeki değeri aynı türden bir değişkene
aktarabiliriz. Bunun için
x := Puan^;
deyimi yeterli
olacaktır. Dolayısyla, sırasıyla,
x := Puan^;
Get (Puan);
deyimlerini
yazmalıyız. Bu iki deyimin yaptığı işi
Read (Puan, x);
deyimi tek başına
yapar; yani işaretçinin gösterdiği bileşenin içeriğini x değişkenine
aktardıktan sonra işaretçiyi bir sonraki bileşene yollar. Bu işlemden sonra x= 45 ve Puan^ = 76 dır.

Tekrar
x := Puan^;
Get (Puan);
deyimleri ya da
Read(Puan,x);
deyimi yazılırsa,
dosya işaretçisi bir sonraki bileşeni göstermeye başlar, x=76 ve Puan^ = 83 olur.

Aynı işlem bir daha yapılırsa, dosya işaretçisi dosya sonunu işaret eder, x=83 ve Puan^ = <eof> olur.

Turbo Pascal, dosya yaratırken ve dosya
okurken, Standart Pascal’dan biraz farklı davranır. Önce, dosya değişkenine
fiziksel kayıt ortamında atanacak dosya adının belirtilmesi gerekir. Örneğin,
Puan dosya değişkenine, kayıt ortamında atanacak dosyanın adı Notlar.dat ise, söz konusu atama işlemi
Assign (Puan,
‘Notlar.dat’);
deyimi ile yapılır. Fiziksel ortamdaki dosya adı bir string
olduğundan, (‘ ‘) simgeleri arasına
alınır. Ayrıca, bileşenlere değer yazıp okumak için Puan^ simgesi ile Put ve Get deyimleri
kullanılmaz. Dosyaya yazmak için
Rewrite (Puan);
write(Puan, x);
deyimleri, dosyayı okumak için de
Reset (Puan) ;
read (Puan, x);
deyimleri kullanılır. Bu söylediklerimizi bir program üzerinde gösterelim.
program dosya01;
uses wincrt;
const
max = 1000;
type
dosya = FILE
OF Integer;
var
Sayilar : dosya; {integer
dosyası}
i : integer; {döngü sayacı}
n : Integer; {Dosyadan ardışık okunacak sayılar için}
Begin
Assign(Sayilar,
'Veriler');
Rewrite(Sayilar); { 'Veriler' adlı boş dosyayı yazılmak için yaratır.}
for i:= 1 to max do
write(Sayilar,i); {
i tamsayısını 'Veriler' dosyasına yazar.}
Close(Sayilar); {Dosyayı
kapatır.}
Reset(Sayilar);
while not EOF(Sayilar) do
begin
Read(Sayilar,
n); {'Veri' dosyasından okunan sayıyı n'e atar.}
writeln(Output,
n:4) {Standart Çıkış Birimine
–ekrana- gider}
end;
Close(Sayilar)
End.
Şimdiye kadar sıralı erişimli
dosyaları inceledik. Şimdi direk erişimli dosyaları inceleyeceğiz. Direk
erişimli bir dosyayı, büyük bir array imiş gibi düşünebiliriz. Array’de olduğu
gibi, direk erişimli dosyanın her bir bileşeninin adresi bellidir. Dolayısıyla,
istenilen bileşene doğrudan erişilebilir.
Direk erişime (direct access), bazı kaynaklarda rasgele erişim (random
access) adı verilir.
Personel_Record_Tip = RECORD
SicilNo : integer;
Ad : string[20];
Soyad : string[20];
Ucret : real;
END;
Personel_Dosya_Tip = FILE
OF Personel_Record_Tip;
bildirimlerimlerinden ilki
bir record tipi tanımlar, ikincisi ise, bileşenleri birinci recordlardan oluşan
bir dosya tipi tanımlar.
PerRec : Personel_Record_Tip;
PerDosya : Personel_Dosya_Tip;
bildirimlerinden ilki
yukarıdaki recordu temsil eden PerRec değişkenini tanımlar. İkincisi
ise recordlardan oluşan dosyayı temsil eden PerDosya
değişkenini tanımlar.
Binary dosyaların açılması ve üzerinde işlem yapılması için kullanılan
deyimler, farklı derleyicilerde farklılıklar gösterir. Burada, Turbo Pascal’ın
deyimlerini ele alacağız. Başka bir derleyici kullanıyorsanız, dosya
işlemlerini yapan deyimleri görmek için, kullandığınız derleyicinin kılavuzuna
bakınız.
Şimdi PerDosya dosyasını
açmak isteyelim. Bunun için, bu dosyayı temsil edecek bir dosya adı
kullanmalıyız. Kullanacağımız dosya adı Personel.dat olsun. PerDosya
dosyasını açmak için
Assign(PerDosya, ‘Personal.dat’);
deyimi kullanılır. (Dosya adının ‘ ‘ içine alındığına dikkat
ediniz.) Bu deyim, Personal.dat dosya adını PerDosya dosya değişkeninin değeri
olarak atar. Bundan sonra, PerDosya dosya değişkeni üzerinde
yapılacak olan bütün işlemler Personal.dat dosyasına işlenir.
Dosyaya ilk kaydı girmek
için, dosya bileşenleriyle aynı türden olan PerRec değişkenini kullanabiliriz.
Yürütme bölümünde,
PerRec.Sicil.No
:= 216;
PerRec.ad :=
‘Derya’;
PerRec.soyad :=
‘Tan’;
PerRec.ucret:=
875000000;
değerlerini girmiş olalım.
Bu değerleri, Personel.dat dosyasının ilk bileşenine yazmak için
Write(PerDosya,
PerRec);
deyimi kullanılır. Bu deyim, PerRec değişkeninin bütün bileşenlerinin değerlerini, dosyanın ilk bileşenine
atar. Pascal, dosya bileşenlerini 0 dan
başlayarak 0,1,2,3,... biçiminde numaraladığını biliyoruz. Bu bileşenlerin her
biri ayrı bir personele ait bilgileri
içerir. Bileşenlerin her birisine bir kayıt diyeceğiz.
Yukarıdaki yazma işleminin her
tekrarlanışında, dosyaya yeni bir bileşen (kayıt) eklenir. İstediğimiz kadar
yeni kayıt ekleyebileceğimizi ; çünkü kayıtların sayısının, yalnızca
kaydedildiği fiziki ortamın (disket, disk) sığasıyla sınırlı olduğunu
söylemiştik.
Direk erişimli bir dosyanın
istenilen bir kaydına (bileşenine) erişmek için sözdizimi şöyledir:
Seek(dosya_adı, kayıt_numarası);
Örneğin, recordlardan oluşan
personel adlı direk erişimli bir dosyada 17 numaralı kayda (bileşene) erişmek
için
Seek(Personel,17);
deyimini kullanırız.
17
| | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |·<eof>
![]()
Bu deyim, dosya işaretçisini,
17 nci sırada kayıtlı olan dosya bileşeni üzerine götürür. Bu bileşen
personelin bilgilerinin yazılı olduğu record’dur. Bu recordda yazılı olan
verileri ana belleğe almak için, aynı türden bir recordu temsil eden PerRec değişkenini kullanabiliriz:
Read(Personel, PerRec);
Bu işlemden sonra, PerRec
recordunda kayıtlı bileşenlere kolayca erişebilir, onlarla istediğimiz
işlemleri yapabilir, onları güncelleyebiliriz. Bunun için, Record bileşenlerine
erişim yöntemlerini kullanmak yetecektir.
Direk erişimli dosyalarda
satırlar olmadığı için, ReadLn, WriteLn, EOLN fonksiyonları geçersizdir.
Dosyanın 17 numaralı kaydını
değiştirmek ya da tamamen yeni bir kayıt girmek için, girilecek veriler, önce
aynı türden bir record’a; sonra da write fonksiyonu ile dosyaya yazılır.
Örneğin, 17 numaralı kayıttaki verileri değiştirmek için PerRec değişkenine yeni verileri gireriz.
PerRec.Sicil.No
:= 514;
PerRec.ad :=
‘Tekin’;
PerRec.soyad :=
‘Kaya’;
PerRec.ucret:=
650000000;
Sonra, 17 numaralı kayda
erişmek için
Seek(PerDosya,17);
deyimini kullanırız. Bu
kaydı güncellemek için
Write(Personel, PerRec);
deyimi
kullanırız. Tabii, bu deyim, o anda dosya işaretçisinin gösterdiği dosya
bileşeni üzerine yazılacağından, Seek deyimi ile istenilen bileşeni önceden
çağırmış olmalıyız.
Direk erişimli ve sıralı
erişimli dosyalar arasında önemli farklar vardır:
1.
Sıralı erişimli bir dosya ya okunmak ya da
yazılmak için açılabilir. Açık dosya üzerinde ancak ya okuma ya da yazma işlemi
yapılabilir; hem okuma hem yazma işlemi yapılamaz.
2.
Sıralı erişimli bir dosya bir kelime işlemci
ile yaratılabilir.
3.
Direk erişimli dosya aynı anda hem okunmak hem
yazılmak için açılabilir.
4.
Direk erişimli dosyalar kelime işlemci ile
yaratılamazlar. Verileri klavyeden veya başka bir dosyadan okuyup dosyaya yazan
özel procedürler kullanmak gerekir.
5.
Direkt erişimli dosyada, dosya işaretçisi
istenilen bir bileşen üzerine gönderilebilir. O bileşen belleğe alınır.
Dolayısyla, açık dosya üzerinde, hem okuma (read) hem yazma (write) işlemi
yapılabilir.
6.
Direk erişimli dosyalarda satırlar olmadığı
için, readln, writeln ve EOLN fonksiyonları geçersizdir.
program file03;
{İki dosya yaratır; birinden
ötekine veri aktarır.}
uses wincrt;
const
max = 1000;
type
dosya_tip = FILE
OF Integer;
var
Dosya1,
Dosya2: dosya_tip; {integer
dosyaları}
i : integer; {döngü sayacı}
n : Integer; {Dosyadan ardışık okunacak
sayılar için}
PROCEDURE VeriGir;
Begin
Assign(Dosya1,
'Veri1');
Rewrite(Dosya1); {
'Veriler' adlı boş dosyayı yazılmak için yaratır.}
for i:= 1 to max do
write(Dosya1,i); {
i tamsayısını 'Veriler' dosyasına yazar.}
Close(Dosya1); {Dosyayı
kapatır.}
End;
PROCEDURE VeriAktar;
Begin
Reset(Dosya1);
Assign(Dosya2,
'Veri2');
Rewrite(Dosya2);
while
not EOF(Dosya1) do
begin
Read(Dosya1, n); {'Veri' dosyasından okunan
sayıyı n'e atar.}
write(Dosya2, n)
end;
Close(Dosya1);
Close(Dosya2);
End;
PROCEDURE VeriYaz;
Begin
Reset(Dosya2);
while
not EOF(Dosya2) do
begin
Read(Dosya2, n); {'Veri' dosyasından okunan
sayıyı n'e atar.}
write(Output,n:6);
if
(n mod 10)=0 then writeln;
end;
Close(Dosya2)
End;
Begin
VeriGir;
VeriAktar;
VeriYaz
End.
program ARRECF1;
{ Bu program RECORD lardan olusan
ARRAY turu kutuk yaratir}
uses wincrt;
const
mevcut = 2;
type
TANI = RECORD
no
: String[7];
adi
: String[15] ;
soyadi
: String[15];
danisman : String[15]
END;
KIM =
ARRAY[1..mevcut] of TANI ;
var
i,j : 0..mevcut;
Talebe,OGR3,
OGR1,OGR2 : KIM ;
OGRF1,OGRF2 : File of KIM ;
BEGIN
Assign(OGRF1,'OGRF1.DAT');
Rewrite(OGRF1);
For i := 1 to mevcut do
Begin
With OGR1[i] do
Begin
write('No := '); Readln(No);
write('Adi :=
'); Readln(Adi);
write('Soyadi := '); Readln(Soyadi);
write('Danisman := '); Readln(Danisman);
Write(OGRF1,OGR1);
writeln;
End
End;
Close(OGRF1);
CLRSCR;
Assign(OGRF2,'OGRF1.DAT');
Reset(OGRF2);
j := 0;
While not EOF(OGRF2) DO
Begin
j := j + 1 ;
Read(OGRF2,OGR2);
TALEBE[j] := OGR2[j];
With TALEBE[j] do
Begin
writeln('No
:',no:9);
writeln('Adi
:',Adi:17);
writeln('Soyadi
:',Soyadi:17);
writeln('Danisman:',Danisman:17);
writeln
End
End;
OGR3[1] := TALEBE[2] ;
OGR2[2] := TALEBE[1] ;
OGR2[1] := OGR3[1] ;
For i := 1 to mevcut do
Begin
With OGR2[i] do
Begin
writeln('No
:',no:9);
writeln('Adi
:',Adi:17);
writeln('Soyadi
:',Soyadi:17);
writeln('Danisman:',Danisman:17);
writeln
End
End
END.
TEXT, Pascal’da bir temel
veri türüdür. Düz yazı (metin) anlamına gelir. Bir TEXT dosyasını,
satırlara ayrılmış, char türünden bir array olarak düşünebiliriz. Dosyalar,
magnetik disk, teyp, CD gibi bir kayıt ortamı üzerinde saklanır, ama başka bir
araca da bağlı olabilirler. Örneğin Pascal'da INPUT klavyeye bağlı bir yazı
dosyası ve OUTPUT ekrana bağlı bir yazı
dosyasıdır.
Standart Pascal‘daki INPUT
ve OUTPUT text dosyaları program çalışırken daima açık olur ve özel bir işleme
gerek kalmadan kullanılabilirler. Ama başka dosyalar için bir bildirim
gereklidir.
TEXT Dosyası Bildirimi
Text bir veri tipi olduğu
için, onu temsil eden değişkenleri, Pascal’da değişken bildirimi yöntemiyle
tanımlayabiliriz. Bunun için sözdizimi şöyledir:
var
Dosya_Adı :
text;
Bilindiği gibi farklı veri
tipleri ile farklı işlemler yapılır. Örneğin, char, real, boolean veri tiplerini
temsil eden değişkenlerle yapılabilen işlemler birbirlerinden farklıdır ve
herbiri kendi veri tipine özgü işleri yapar. Aynı olgu, TEXT tipini temsil eden
değişkenler için de geçerlidir. O halde, text tipinden bir değişken ile
yapılabilecek işler, bir metin (düz yazı) ile yapılabilen işler olmalıdır.
İstediğimiz kadar ardışık
karakterler ekleyerek istediğimiz uzunlukta bir yazı yazabiliriz. Yazının
sonunu ve satırlarını belirtebiliriz. Öyleyse, TEXT türünden olan bir değişken
üzerinde de aynı işleri yapabilmeliyiz.
Anlamayı kolaylaştırmak
için, bir kelime işlemci ile bir yazı yazdığımızı düşünelim. Ortaya çıkan metni
bir ad vererek diske kaydettiğimizde bir TEXT dosyası yaratmış oluruz. Yazının
son karakterinden sonra, dosyanın sona erdiğini belirten bir simgeyi sistem
kendiliğinden koyar. İngilizce „End Of File“ deyiminin kısaltması olan bu
simgeyi <eof> ya da EOF ile göstereceğiz. Benzer olarak Enter (Giriş)
tuşuna her basışta satır sona erer ve yeni bir satıra geçilir. Enter’e basıldığında, satırın sona erdiğini
belirten bir simgeyi sistem kendiliğinden o satırın sonuna yazar. İngilizcede
„End Of Line“ deyiminin kısaltması olan bu simgeyi <eoln> ya da EOLN ile
göstereceğiz.
Bir kelime işlemcinin
yaptığı bu işleri Pascal’ın text dosyaları aynen yapar. Buna ek olarak, text
(yazı) içine sayısal verileri girebiliriz. Pascal, sayısal verileri karakter
dizisine dönüştürerek text’e yazar. Bunu okurken de ters işlem yaparak,
karakter dizisi olarak kaydettiği sayıyı yeniden sayı biçimine dönüştürür. Bunu
nasıl yaptığını bir örnekle açıklayalım.
Var n :
integer;
mesaj : Text;
bildirimlerinden sonra,
yürütme bölümünde
n := 745;
write (Mesaj, n:4) ;
deyimleri verilmiş olsun. Write
prosedürü, x değişkeninin değeri olan 745 sayısını alır, onu ‘ 745’ karakter
dizisine (string) dönüştürür ve mesaj değişkeninin temsil ettiği text
dosyasına ‘ 745’ karakter dizisini yazar. Bu dizi kayıt
ortamına bir metin (text) olarak yazılmıştır. Biri boşluk olmak üzere dört
karakterlik ( 4 byte) bir yer ayrılmaktadır. Aynı veriyi okutmak için,
read
(mesaj, n);
deyimini kullanabiliriz. Read fonksiyonu
‘ 745’ karakter dizisini okur ve onu 745 sayısına çevirerek n değişkenine atar.
Bu sayı integer tipinden olduğu için,
aslında 2 bytlık bir yere sığar. Ama, kayıt ortamında karakter dizisine
dönüştürüp 4 bytlık bir yere yazdırdık. Genel olarak, sayı karakter dizisine
dönüştüğünde daha çok yer tutar. Sayıdan karakter dizisine ve karakter dizisinden
sayıya dönüşüm işlemleri bir zaman alacağından, text dosyaları binary dosyalara
göre daha yavaştır.
Ayrıca, real veri tipi ile çalışırken,
text dosyasına kaç byte uzunlukta karakter dizisine dönüştürdüğümüze bağlı
olarak, kesir kısmından bazı rakamlar atılabilir. Örneğin x :=2.463072 sayısı real tipten olduğu için
4 bytlık bir yere sığar. Ama, bu sayı için
Write (mesaj, y : 4) ;
deyimi, mesaj
dosyasına ’2.46’ karakter dizisini yazar. Dolayısıyla,
Read(mesaj,
y) ;
deyiminden sonra y:=2.46 olacaktır. Bu da asıl sayıdan
0.003072 kesrinin atılmış olması demektir.
Bu sakıncalara dikkat edilmek koşuluyla,
Pascal programlarında text dosyaları çok kolay yaratılır ve üzerinde kolay
işlemler yapılır.
Bilindiği gibi, dosya yaratma, dosyaya
yazma ve dosyada yazılı olanları okuma eylemleri, farklı Pascal sistemlerinde
farklı deyimlerle yapılmaktadır. Ama, esas olarak yapılan işlem hepsinde
aynıdır. Bu olgu text dosyaları için de geçerlidir.
Hemen belirtelim ki, binary
dosyalarda Standart Pascal ve Turbo Pascal için yukarıda açıkladığımız
prosedürler, text dosyaları için de geçerlidir. Yalnızca, text dosyalarına
uygulanan prosedürler de vardır. Prosedürler için bölümün sonuna bakınız.
Standart Pascal’da text
dosyaları ile ilgili işlemler, sıralı erişimli binary dosyalardaki gibidir.
Text dosyasının bileşenleri karakter tipinden olduğu için, ana bellekteki dosya
tamponu bir karakter tutar.
Aşağıdaki örnekler, Turbo
Pascal’da text dosyalarının nasıl işlendiğini açıklamaktadır.
Örnek :
Aşağıdaki program, TPW derleyicisinde Mesaj adlı bir text dosyası yaratır. Klavyeden girilen
karakterler tek tek okunur, sonra kayıt ortamındaki Metin.txt adlı dosyaya aktarılır. Kullanıcı (*)
karakterini girince dosyaya yazma işi biter. Programda sayısal değişken
tanımlanmadığı için, klavyeden sayı girilse bile, sistem onu char olarak
algılayacaktır.
Program textchar01 (input, output);
uses wincrt;
Var
Ch : char;
Mesaj : Text;
Begin
Assign
(Mesaj, 'Metin.txt');
Rewrite
(Mesaj);
Repeat
Read
(ch) ;
write(Mesaj,
ch);
write
(Mesaj);
Until (ch = '*') ;
Close(Mesaj);
End.
Örnek : Aşağıdaki program, önce, yukarıdaki gibi text
dosyasını yaratır; sonra onu okumak için açar ve karakterleri tek tek okuyarak
ekrana yazar.
Program textchar (input, output);
uses wincrt;
Var
Ch : char;
Mesaj : Text;
Begin
Assign
(Mesaj, 'Metin.txt');
Rewrite
(Mesaj);
Repeat
Read
(ch) ;
write(Mesaj,
ch);
write
(Mesaj);
Until (ch = '*') ;
Close(Mesaj);
reset(Mesaj);
while
not EOF(Mesaj) do
begin
read(Mesaj,
ch);
write(ch)
end;
End.
Örnek : Aşağıdaki program, yukarıdaki programın
yaptığı işi, prosedürler kullanarak yapar.
Program charx03 (input, output);
uses wincrt;
Var
Ch
: char;
Txt : String[12];
Mesaj : Text;
Procedure AdVer;
Begin
writeln('Text
dosyasının adını giriniz.');
read(txt);
End;
Procedure TextYaz;
Begin
Rewrite
(Mesaj);
writeln('Lütfen metni giriniz. Bitirmek için (*) yazınız. ');
writeln;
Repeat
Read
(ch) ;
write(Mesaj,
ch);
write
(Mesaj);
Until (ch = '*') ;
Close(Mesaj);
End;
Procedure TextOku;
Begin
reset(Mesaj);
while
not EOF (Mesaj) do
begin
read(Mesaj,
ch);
write(ch)
end
End;
BEGIN
AdVer;
Assign
(Mesaj, txt);
TextYaz;
TextOku
END.
Örnek : Aşağıdaki
program, farklı veri türlerini bir text dosyasına yazmaktadır. Yazma işini
bitirince dosyayı kapatıp okunmak için yeniden açmakta ve dosyanın içeriğini
sırayla ekrana yazmaktadır. Text dosyasına yazmak ve text dosyasından okumak
için, aynı türden olmak koşuluyla farklı değişkenler kullanılabileceğine dikkat
ediniz.
PROGRAM
verix01 (Input, Output);
uses
wincrt;
var
h1,h2 : char;
m,n : Integer;
x,y : Real;
Dosyatxt : Text;
BEGIN
h1 := 'H';
m :=
745;
x :=
2.463072;
Assign (Dosyatxt, 'Veri.dat');
REWRITE(Dosyatxt);
Write (Dosyatxt, 'H');
Write (Dosyatxt, m:4);
Write (Dosyatxt, x:4);
Write (Dosyatxt, 2.0*x + 1.5
:6:1);
writeln;
Close (Dosyatxt);
Reset (Dosyatxt);
Read (Dosyatxt,h2);
Writeln
(h2);
Read (Dosyatxt,n);
Writeln (n);
Read (Dosyatxt,x);
Writeln (x);
Read (Dosyatxt,y);
Writeln (y);
END.
Örnek: Text dosyalarında da write ve read fonksiyonları birden çok veriyi aynı
anda yazıp okuyabilirler; yani
writeln(kutuk, 'A', 45:3, 66:3, 78:3);
read(kutuk, d, s1, s2, s3);
gibi deyimler geçerlidir. Aşağıdaki program buna bir
örnektir.
program text03(kutuk);
uses wincrt;
var
kutuk:
text;
d:
char;
s1,
s2, s3: integer;
BEGIN
Assign
(kutuk, 'sonuclar');
{Dosya deðişkenine deðer atar}
Rewrite
(kutuk); {Dosyayı yazmak için açar}
Writeln
(kutuk, 'A', 45:3, 66:3, 78:3); {Dosyaya yazma islemleri}
Writeln (kutuk, 'B', 87:3, 56:3, 98:3);
Write (kutuk, 'C', 55:3, 76:3, 78:3);
Close
(kutuk); {Dosyayı kapatır}
Reset
(kutuk); {Dosyayı okumak için açar}
Readln
(kutuk, d, s1, s2, s3);
{Dosyayı okur}
Writeln
(d, s1:3, s2:3, s3:3); {Okunan verileriekrana yazar}
Readln
(kutuk, d, s1, s2, s3);
Writeln
(d, s1:3, s2:3, s3:3);
Read
(kutuk, d, s1, s2, s3);
Write
(d, s1:3, s2:3, s3:3);
Close
(kutuk)
END.
Buraya kadar söylediklerimizi özetleyelim:
1.
Pascal’da text dosyası bir temel veri türüdür. Bileşenleri karakterlerden oluşur.
var m1 :FILE OF char;
var m2 : TEXT;
bildirimleri aynı işi
yapar.
2.
Pascal’da char, integer, real tipten değişkenlerin değerleri
ve sayısal bir işlemin sonucu text dosyasına yazılabilir. Bu yazma işlemini
yapan write fonksiyonu, sayısal verileri karakter dizilerine dönüştürür.
Yazılacak veri tipi ve ayrılacak uzunluk belirtilirse, write fonksiyonu onu
uygun bir karakter dizisine çevirerek kaydeder.
3.
Ardışık sırayla text dosyasına yazılan farklı veri tipleri,
yazıldığı sırayla okunabilir. Okuma işlemini yapan read fonksiyonu, karakter
dizisine dönüşen sayısal verileri tekrar sayısal biçime dönüştürür. Bu işin
doğru yapılabilmesi için, bu verileri yazılış sırası ve türüyle okutmak
gerekir.
4.
Verileri dosyaya yazmak ya da dosyadan okumak için, aynı
türden herhangi bir değişken kullanılabilir. Bu değişkenler üzerinde,
türlerinin izin verdiği her türlü işlem yapılabilir. Ama karakter dizisine
dönüşünce, sayısal veriler üzerinde aritmetik işlemler yapılamaz.
5.
Real tiplerin yazılış ve okunuşunda istenen duyarlığa
yetecek kadar yer ayrılmalıdır.
6.
Write ve read fonksiyonları aynı anda birden çok veriyi
yazıp okuyabilirler.
7.
Bu işlerden birisi yanlış yapılırsa, dönüşümler yanlış veya
eksik olacaktır.
8.
Bu nedenle, çok sayıda farklı veri türleri ardışık olarak
yazılıp okunacaksa text dosyaları tavsiye edilmez. Onun yerine bileşenleri
yapısal veri tipi (record, array) olan binary dosyaların kullanılması önerilir.
Turbo
Pascal’ın dosya işlemleri için kullandığı prosedürlerden başlıcaları
şunlardır :
Append (Dosya_A) Dosya_A dosyasını, sonuna ek yapılmak üzere açar. Rewrite deyiminin yaptığı işi yapar; ancak Dosya_A dosyasını silmez, işaretçi, dosyanın sonunda <eof> durur. Dolayısıyla, yeni kayıtlar dosyanın sonuna eklenir.
Assign (Dosyax, ‘veriler.dat’) Dosyax adlı dosya değişkenine veriler.dat dosyasını atar (bağlar). Kayıt ortamında, Dosyax değişkeninin değeridir. Dosyax üzerinde yapılacak her işlem Veriler.dat dosyası üzerine işlenir.
Close(Dosya_A) Dosya_A dosyasını kapatır.
Erase (Dosya_A) Dosya_A dosyasını kayıt ortamından (disket, disk) siler. Silme işleminin olabilmesi için Dosya_A dosyası kapalı olmalıdır.
Flush(Dosya_B) Dosya_B dosyasına yazılmak istenen verilerin gerçekten dosyanın bulunduğu fiziksel ortama yazılmasını garanti eder. Turbo Pascal, text dosyası yaratırken, bazen, dosyaya gönderilen verileri bellekte tutmaya devam eder. Flush prosedürü, bellekte bekleyen verilerin kayıt ortamına gitmesini sağlar.
Read(Dosya_A, x) Yapısal bileşenli dosyadan, işaretçisinin gösterdiği yapısal bileşeni (örneğin bir record’u) okur ve x değişkenine aktarır. Böylece, sözkonusu bileşen, x değişkeni yardımıyla ana belleğe taşınır ve onunla istenilen işlemler yapılabilir.
Read(Dosya_A, ch) Text dosyaları için, dosya işaretçisinin gösterdiği karakteri okur ve ch karakter değişkenine aktarır. Böylece, sözkonusu bileşen, ch değişkeni yardımıyla ana belleğe taşınır ve onunla istenilen işlemler yapılabilir. İstenirse, birden çok karakter okunabilir. Bunun için, Read_A, ch1, ch2, ...); deyimi kullanılır.
Readln(Dosya_A, ch) Text dosyaları için Read(Dosya_A, ch) deyiminin yaptığı işi aynen yapar; ancak karakteri okuduktan sonra dosya işaretçisi bulunduğu satırdan bir sonraki satıra geçer.
Rename (Dosya_A, Yeni_Ad) Dosyanın kayıt ortamında kendisine eşlenen adını değiştirir.
Reset (Dosya_A) Dosya_A adlı dosyayı okunmak üzere hazırlar; yani dosyayı okunmak üzere açar, dosya işaretcisi dosyanın ilk bileşenini işaret eder. Eğer dosya boşsa ya da bu adla bir dosya yoksa, EOF(Dosya_A) fonksiyonu TRUE değerini, değilse FALSE değerini alır.
Rewrite (Dosya_B) Dosya_B adlı dosyayı yazmak için hazırlar. Dosyayı açar ve dosya işaretçisi dosyanın sonunu gösterir. Bu adla bir dosya yoksa, açarken onu yaratır. Bu adla bir dosya varsa, onun içeriğini tamamen siler ve yeni bir dosya açıyormuş gibi davranır. Bu işlemle silinen dosyanın içeriği bir daha bulunamaz. Dolayısıyla, var olan dosyaları yanlışlıkla silmemek için, Rewrite deyiminin önüne bir denetim procedürü konulmalıdır.
SetTextBuf Text dosyalarına ana bellekte bir Giriş/Çıkış tamponu ayırır.
Str Sayısal bir değeri stringe dönüştürür.
Truncate (Dosyax) Dosyax işaretçisinin bulunduğu yerden
sonraki bileşenlerin hepsini siler.
Val Str prosedürünün tersini yapar. Stringe dönüştürülmüş bir sayısal değeri tekrar sayısal biçimine dönüştürür.
Write(Dosya_B, x) Yapısal dosyalar için, Read deyiminin tersini yapar. x yapısal değişkeninin değerini Dosya_B dosyasında, işaretçinin bulunduğu yere yazar.
Write (Dosya_text, ch) Text dosyaları için, Read deyiminin tersini yapar. Ch değişkeninin değerini Dosya_text dosyasında, işaretçinin bulunduğu yere yazar.
Writeln (Dosya_text, ch) Text dosyaları için, Write deyiminin yaptığı işi aynen yapar; ancak ch değerini dosyaya yazdıktan sonra <eoln> karakterini ekler. Dolayısıyla, yazdığı karakter satırın sonu olur. Ondan sonrakiler bir sonraki satıra yazılır.
Turbo Pascal’ın dosya işlemleri için kullandığı fonksiyonlardan
başlıcaları şunlardır :
EOF (Dosya_A) EOF, İngilizce’deki “End Of File” deyiminin kısaltılmışıdır. Açık dosyanın son bileşenine gelinip gelinmediğini söyler. Dosya işaretçisi, Dosya_A dosyasının son bileşenine gelince, EOF(Dosya_A) fonksiyonu TRUE değerini, aksi halde FALSE değerini alır.
EOLN (Dosya_A) Dosya işaretçisinin bulunduğu satırda başka karakter olup olmadığını söyler. İşaretçi satırın son bileşenine geldiğinde EOLN(Dosya_A) TRUE değerini, aksi halde FALSE değerini alır.
FilePos (Dosya) Dosya
işaretçisinin nerede olduğunu; yani dosyanın kaçıncı bileşenini işaret ettiğini
gösterir.
FileSize (Dosya) Dosyanın büyüklüğünü; yani dosyada kaç bileşen olduğunu gösterir.
IOResult Son yapılan Giriş/Çıkış işleminin statüsünü belirtir.
Seek (Dosya, P) Dosyada
P inci bileşeni bulur. Dosyanın ilk bileşeni 0 numaralıdır.
SeekEOF(Dosya_A) Dosya_A dosyasında boşluk, tab, eoln karakterlerinden başka bir karakter olup olmadığını bildirir. Bu fonksiyon EOF fonksiyonuna benzer; ancak boşluk, tab, eoln karakterlerini atlar. EOF ‘a ulaşmadan önce başka karaktere raslarsa FALSE, değilse TRUE değerini verir.
SeekEOLN(Dosya_A) Dosya_A dosyasında, dosya işaretçisinin bulunduğu satırda boşluk ve tab’ dan başka karakter olup olmadığını bildirir. EOLN fonksiyonuna benzer; ancak boşluk ve tab karakterlerini atlar. EOF ‘a ulaşmadan önce başka karaktere raslarsa FALSE, değilse TRUE değerini verir.