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.

Ancak, çağdaş işletim dizgelerinin çoğu klavye, printer, disk, ekran v.b. çevre birimleriyle doğrudan ilişki kurmaz; onların herbirisini bir kanal (channel) olarak algılar. Dolayısıyla bir kanaldan veri alır (giriş) ya da bir kanala veri gönderir (çıkış). Böylece, bu kanallar yoluyla işletim dizgesi çevre birimlerine bağlanmış olur. Bu mekanizmanın avantajı şudur: girişin ya da çıkışın yapılacağı çevre biriminin değişmesi, ana programda bir değişiklik yaratmayacaktır. Örneğin, çıktının ekrana, printere ya da bir dosyaya gönderilmesi işlemleri temelde aynıdır; yalnızca istenen çevre birimine bağlı olan kanalın seçilmesi yeterlidir.

 

DOSYA TÜRLERİ

 

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.

 

PASCAL’da Binary Dosyalar

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.

  1. Dosya’nın bileşenlerine birer birer erişilir. Bu nedenle, bileşenler, ana belleğe birer birer gelir.  Array’in bileşenleri ise, tanımlı olduğu program boyunca ana bellekte durur.

 

 

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;    

 

 

 

Pascal’da Dosya İşlemleri

 

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; 

 

Bildirimi yapılmış olsun. Yürütme bölümünde,

 

               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;

aktarmasını kullanabiliriz. Sonra durum aşağıdaki gibi olur:

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.

 

Örnek

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.

 

 

DİREK ERİŞİMLİ DOSYALAR

Ş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.

Örnek

Type

    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.

Var

    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.

Kayıt Okuma

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.

Güncelleme

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.

Örnek

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.

Örnek

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 Dosyaları

 

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.