Soubor (file)

3 typy souborů v Pascalu:

·       typový soubor (file of typ)

·       netypový soubor (file)

·       textový soubor (text)

vždy vazba na externí (diskový) soubor

dynamická velikost, počet komponent není určen deklarací (lze přidávat a rušit informace v souboru)

paměťové nároky - typový a netypový 128 bajtů, textový 256 (vlastní data jsou na disku!)

položky stejného typu (typový - libovolný kromě file a nesmyslný je pointer, netypový - byte; textový - char)

 

Typové soubory

položky stejného typu (libovolného kromě typu soubor)

přístupná 1 položka (ukazovátko)

Popis: file of typ (typ=typ prvku)

Příklad deklarace:

var

F: file of integer; A:integer;

G: file of OSOBA; B: OSOBA; (kde type OSOBA=record ... end)

Základní procedury a funkce pro práci s typovým souborem

Assign (var F; S:string)

přiřazuje proměnné jméno externího souboru S

S - řetězec se specifikací diskového souboru, maximální délka 79 znaků

F - jakýkoli soubor, nesmí být otevřen

propojení trvá tak dlouho, dokud se neprovede další assign se stejnou proměnnou

Reset (var F)

otevře existující soubor

F - libovolný soubor, musí být přiřazena externímu souboru procedurou assign (neexistence souboru - chyba; soubor otevřen - uzavření a znovuotevření)

ukazatel na první položku

ze souboru lze číst a lze do něj zapisovat

Rewrite (var F)

vytvoří a otevře nový soubor

existence souboru - obsah se vymaže

otevřený soubor - uzavření, znovuvytvoření a otevření

takto otevřený soubor je vždy prázdný

ukazatel na začátek

lze číst i zapisovat

Read (F, seznam proměnných)

 čtení položek ze souboru F do proměnných v seznamu (musí být odpovídajícího typu) od ukazatele

ukazatel za poslední načtenou hodnotou

pokus o čtení na konci - chyba

Write (F, seznam výrazů)

zápis hodnot výrazů do souboru od ukazatele (případné existující položky se přepisují)

ukazatel za poslední zapsanou položku

Close (var F)

uzavře otevřený diskový soubor

F - libovolný soubor otevřený jakkoli

dokončí zápisové operace, jméno proměnné může být spojeno s dalším souborem

raději uzavírat ikdyž to není potřeba (např. při ukončeníé programu se soubory uzavírají automaticky)

Eof (F): boolean

test na konec souboru

Další procedury a funkce

Sekvenční zpracování x přímý přístup

sekvenční zpracování - vždy je nutné projít všechny předchozí složky a zbytečně načítat, nelze se vracet

přímý přístup - ukazatel lze přemístit na libovolnou položku (položky jsou očíslovány, čísluje se od nuly)

================================================================================


Seek (var F; P: longint)

přemístí ukazatel na položku P

F - nesmí být typu text; musí být otevřen

FilePos (var F): longint

vrací aktuální polohu ukazatele

F - nesmí být typu text, musí být otevřen

FileSize (var F): longint

vrací počet složek uložených do souboru

F - nesmí být text, musí být otevřen

Truncate (var F)

zruší (vymaže) všechny položky od aktuální polohy ukazatele do konce souboru

F - libovolný soubor, musí být otevřen

aktuální poloha se stane koncem souboru

Erase (var F)

vymaže soubor z disku

F - libovolný soubor, musí mít přiřazeno jméno, nesmí být otevřen

Rename (var F; S: string)

přejmenuje externí soubor na disku

F - libovolný soubor, musí být přiřazen externímu souboru, nesmí být otevřen

S - řetězec - nové jméno souboru (assign)

IOResult: word

test úspěšnosti operace vstupu/výstupu

vrací celočíselnou hodnotu (0 - bez chyby, >0 - číslo chyby) - stav poslední provedené operace vstupu/výstupu

příslušná část programu musí být kompilována s vypnutým kontrolováním vstupu/výstupu ({$I-})

pokud se v takto zkompilovaném kódu objeví chyba při vstupu nebo výstupu, všechny následující operace

vstupu a výstupu jsou ignorovány, dokud se nezavolá procedura IOResult

Příklad

 var F: file of Byte;

 begin

  Assign(F, ParamStr(1));

  {$I-}

  Reset(F);

  {$I+}

  if IOResult = 0

   then

    Writeln('Velikost souboru v bajtech: ', FileSize(F))

   else

    Writeln('Soubor nenalezen');

 end.


================================================================================