Marec 2007


Súbory v pascale nemusia byť len textové. Keď je nutné ukladať iné ako textové dáta. je možné povedať, aký typ bude súbor ukladať. Premenná následne nie je typu **Text** ale **File**. Veľa príklazov je ale podobných.

Keď sa deklaruje premenná pre súbor, povie sa aj jeho typ – napríklad nasledujúci program uloží písmeno A do súboru znaky.dat.
Tento súbor sa prepíše, ak už existuje, keďže sa vytvoril pomcou príkazu **Rewrite**.

/—code pascal
program DataFiles;

var
f: file of Char; {f bude subor z Char-ov}
b: Char;

begin
Assign(f,’znaky.dat’); {priradenie nazvu suboru preemennej}
Rewrite(f); {vytvorenie alebo prepisanie suboru}
b := ‘A’;
Write(f,b); {zapisanie premennej b do suboru}
Close(f); {ukoncenie prace so suborom – zavretie}
end.
\—

Pre čítanie zo súboru je možné použiť príkaz **read** (pozor, nie **readln**!) a príkaz **seek** – ktorý mení pozíciu v súbore. **Začiatok súboru má index (číslo) 0**.

Nasledujúci program otvorí súbor a prečíta prvý znak.

/—code pascal
program DataFiles;

var
f: file of Char; {f bude subor z Char-ov}
b: Char;

begin
Assign(f,’znaky.dat’); {priradenie nazvu suboru preemennej}
Reset(f); {otvorenie datoveho suboru}
Seek(f,0); {presun na zaciatok suboru}
Read(f,b); {nacitanie zo suboru f do premennej b}
Writeln(b); {vypisanie obsahu b na obrazovku}
Close(f); {ukoncenie prace so suborom – zavretie}
end.
\—

Pozícia v súbore sa dá zistiť príkazom **FilePos(f)**, celková veľkosť príkazom **FileSize(f)** a teda napríklad prečítanie celého súboru a jeho výpis na obrazovku bude vyzerať nasledovne.

/—code pascal
program DataFiles;

var
f: file of Char; {f bude subor z Char-ov}
b: Char;

begin
Assign(f,’znaky.dat’); {priradenie nazvu suboru premennej}
Reset(f); {otvorenie datoveho suboru}
while FilePos(f) <> FileSize(f) do
{pokial nie je pozicia v subore rovna velkosti suboru}
begin
Read(f,b); {nacitaj z f ho b}
Writeln(b); {vypis obsah b na obrazobku}
end;
Close(f); {uzavri subor}
end.
\—

Niekedy je potrebné zmazať zvyšok súboru od aktuálnej pozície – používa sa na to príkaz **Truncate(f)**;
Nasledujúci program vymaže zo súboru všetko za pozíciou tri.

/—code pascal
program DataFiles;

var
f: file of Char; {f bude subor z Char-ov}
b: Char;

begin
Assign(f,’znaky.dat’); {priradenie nazvu suboru premennej}
Reset(f); {otvorenie datoveho suboru}
Seek(f,3); {prechod na poziciu tri}
Truncate(f); {“odstrihnutie zvysku”}
Close(f); {uzavri subor}
end.
\—