A szövegfájlok karaktereket tartalmazó különböző hosszúságú sorokból épülnek fel. Minden sort az EOLN (End Of LiNe) jel zár, az egész állományt pedig az EOF (End Of File) jel zárja, ami hiányozhat is a fájl végéről (fájlvége jel lehet az állomány belsejében is).

A SeekEoLN(fájlváltozó) akkor is jelzi a sor végét, ha az aktuális fájlpozíció és a sor vége között csak szóköz vagy tabulátor karakterek állnak.

 

EOLN             #13#10 (CR,LF)                    <ENTER>

EOF                #26                                         <CTRL+Z>

 

A szövegfájl a szekvenciális állományokhoz tartozik: tartalmát az elejétől olvashatjuk, vagy felülírhatjuk. Lehetőség van a fájl végétől kezdődő hozzáírásra is.

 

A fájlkezelés lépései

 

Az állományok tartalmának eléréséhez az oprendszertől és a programnyelvtől függetlenül mindig ugyanazokat a főbb lépéseket kell végrehajtani: előkészületek, megnyitás, feldolgozás fájlműveletekkel, az állomány lezárása.

 

a) Előkészületek

A lemezen tárolt állományokat a fájlváltozóval azonosítjuk. Deklarálása:

 

var változónév : TextFile;

 

A megfelelő típusú fájlváltozó létrehozása után, az AssignFile eljárás segítségével össze kell rendelni a fájlváltozót egy létező vagy új állomány nevével.

 

AssignFile(fájlváltozó, fájlnév elérési útja )

 

Ha az elérési utat nem adjuk meg, akkor a hivatkozás relatív lesz, tehát ott keresi majd a fájlt, ahol a program elhelyezkedik. („hordozható lesz” a program)

 


b) A fájlnyitás

A reset eljárás segítségével csak létező állomány nyitható meg. A nyitás után az EOF függvény true értéke jelzi, ha a fájl üres. A Reset az aktuális fájlpozíciót a fájl elejére állítja (a művelet már megnyitott állományon is elvégezhető).

A rewrite eljárás új állományt hoz létre, vagy a már meglévő fájlt újraírja, így annak teljes tartalma elvész. Az állomány elejére állítja az aktuális fájlpozíciót.

Az append eljárás létező szöveges állományt nyit meg hozzáírásra. Az aktuális fájlpozíciót a fájl végére állítja.

Szöveges állományok esetén mindhárom fájlnyitó eljárás egy 128 bájtos adatátviteli puffert rendel az állományhoz. A fájlműveletek tovább gyorsíthatók, ha az alapértelmezési szövegpuffer helyett egy nagyobb méretűt jelölünk ki. Ezt a SetTextBuf eljárás hívásával, az állomány megnyitása előtt hajthatjuk végre. Ajánlott a pufferméretet 2 hatványának választani.

 

c) Írás és olvasás

Ha írásra nyitottuk meg a fájlt, akkor a Write és a Writeln eljárásokkal végezhetjük a beírást. A különbség, hogy a writeln eljárás sorvége jeleket is ír a fájlba.

A szöveges állományba történő írás esetében a karakterek először az adatátviteli pufferbe kerülnek, és csak a puffer kiürítésekor kerülnek ki a fájlba. Ennek ürítése: Flush(fájlváltozó). A Write, Writeln, Closefile automatikusan ürítik a puffert.

 

Ha olvasásra nyitottuk meg, akkor a Read és a Readln használható. A Read karakterenként olvas be, az aktuális fájlpozíció a következő karakter előtt lesz. A Readln sorokat olvas, az aktuális fájlpozíció a következő sor eleje lesz.

Módja: read(fájlváltozó, változólista)  {A második paraméter, amibe beolvasunk}

 

d) A fájl lezárása

A CloseFile eljárás frissíti az állományt, így az utoljára végrehajtott műveletek eredménye is megjelenik az állományban.

Az állomány lezárása után is megmarad a kapcsolat a fájlnév és a fájlváltozó között, így ha a programban újra meg kell nyitni egy már lezárt állományt, akkor nincs szükség újabb AssignFile hívására.

A Delphi programból kilépve minden nyitott állományt automatikusan, a fájltartalom frissítése nélkül zár le a rendszer. Ez az írásra megnyitott fájlok esetén adatvesztéssel járhat.

 

Előnyei: Platform-független, nyelv-független, ember számára olvasható, rögzítetlen struktúrájú.

Hátrányai: nem hatékony tárolás (a számokat karakteres formában tárolja, míg a típusos fájl bináris formában)

 

e) Szövegfájl tartalmának kiolvasása

Var      i: textfile;

            St: string;

Assignfile(t, ’adat.txt’);

Reset(t);

While not eof(t) do Readln(t,st);         {teljes sort olvas}

 

f) Szövegfájl sorainak megszámlálása

Db:=0;

While not eof(t) do db:=db+1;

 


g) Tömb tartalmának kiírása szövegfájlba

Var      t: textfile;

            A: array[1..10] of rec;

            I: integer;

Rewrite(f);

For i:=1 to 10 do writeln(t, A[i].nev, A[i].cím);

 

h) Törlés szövegfájlból

Amit nem szeretnénk törölni, átmásoljuk egy típusos fájlba, majd onnan visszaírjuk a kiürített szövegfájlba.

 

 

While not eof(t) do begin

                                                  Readln(t,str,i,j);

                                                 Rec.x:=i;

                                                 Rec.y:=j;

                                                 Rec.szoveg:=str;

                                                 Write(f,rec);

                                     End;

 

i) Karakterenként olvasás

Karakterenként olvassuk a fájlt, amíg egy adott elválasztójelhez nem érünk.

 

While ch<> ’,’ do begin

                                               Read(t,ch);

                                               Str:=str+ch;

                                   End;

 

j) Elemekre darabolás sztringműveletekkel

db:=0;

while not eof(t) do begin

                    db:=db+1;

                    readln(t,sor);

                    tomb[db].eloado:=copy(sor,1,pos('#',sor)-1);

                    delete(sor,1,pos('#',sor));

 

                    tomb[db].albumcim:=copy(sor,1,pos('#',sor)-1);

                    delete(sor,1,pos('#',sor));

 

                    tomb[db].ar:=strtoint(sor);

                    delete(sor,1,length(sor));

 

                    delete(sor,1,pos('#',sor)+1);

                    end;

 

A bejegyzés trackback címe:

https://delphi-learning.blog.hu/api/trackback/id/tr421601224

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása