Kromě jednoduchých datových typů lze v pascalu používat i složené typy. Ty mohou obsahovat nejenom jednoduché typy, ale i dříve definované složené, případně indexované.
type os_data = record jmeno:string[20]; prijmeni:string[20]; vek:integer; pohlavi:char; end;
V příkladu je vytvořen datový typ os_data, který se skládá ze dvou řetězců, délky 20 znaků, celého čísla a jednoho znaku. Použití takové proměnné je stejné jako u jiných. Odkazy na jednotlivé položky je možné provést dvěma způsoby:
var karta:os_data;begin karta.jmeno:='Jaroslav'; ...
nebo užitím příkazu with:
with karta do begin jmeno:='Jaroslav'; ... end; ...
Zajistí zrácené odkazování na položky záznamu.
Typ soubor - file - tvoří posloupnost záznamů typu složka. Složka může být libovolného typu (kromě souboru), avšak nemusí být vůbec uveden.
type souborTyp = file of integer; { typový soubor } souborNetyp = file; { soubor bez udání typu } souborText = text;
Zvláštním typem souboru je text. V textovém souboru nejsou zaváděny žádné složky, ale znaky jsou organizovány přímo do řádků.
K práci se soubory je jednotka system vybavena velkým množstvím procedur a funkcí, z nichž uvádím jen ty nejdůležitější.
IOResult:integer;
Vrací kód chyby poslední operace vstupu - výstupu. Byla-li operace úspěšná, vrací nulu.
Assign(var f:file; soubor);
Přiřadí jméno souboru proměnné f. Veškeré operace s proměnnou se ve skutečnosti provádějí se souborem.
Append(var f:text);
Otevření textového souboru pro připojení dalšího textu na konec souboru.
Reset(var f:file);
Otevření existujícího souboru. Je-li to textový soubor, bude otevřen pouze pro čtení.
Rewrite(var f:file);
Vytvoření a otevření souboru. Pokud již existoval, bude jeho obsah smazán.
Close(var f:file);
Uzavření souboru.
Eof(var f:file):boolean;
Jestliže znak, který se má právě přečíst je konec souboru, vrací hodnotu true, jinak false.
EoLn(var f:file):boolean;
Jestliže znak, který se má právě přečíst je konec řádku, vrací hodnotu true, jinak false.
FilePos(var f:file):longint;
Vrací aktuální polohu ukazatele souboru (pořadové číslo složky). Když je aktuální poloha ukazatele na začátku souboru, fukce vrací hodnotu 0. Soubor musí být před voláním funkce otevřený.
FileSize(var f:file):longint;
Funkce vrací počet složek uložených do souboru (aktuální velikost souboru). Soubor musí být před voláním funkce otevřený.
Seek(var f:file; U:longint);
Procedura přemístí polohu ukazatele v souboru na složku s pořadovým číslem u. Číslo první složky v souboru je 0. Příkaz
Seek(f,FileSize(f));
přemístí ukazatel na konec souboru.
Erase(var f:file);
Odstraní soubor z disku. Soubor nesmí být otevřen.
Rename(var f:file;newname);
Přejmenuje soubor.
Abychom mohli pracovat s informacemi, uloženými v jakémkoliv souboru, musíme jej nejdříve otevřít. Definujeme tedy vhodnou proměnnou, stejného typu jako soubor. Tu pak přiřadíme skutečnému souboru a otevřeme jej, třeba pro čtení.
var f:text;begin Assign(f,'soubor.txt'); Reset(f); ...
Pokud se takto pokusíte otevřít neexistující soubor, dojde k chybě. Tomu se dá předejít dočasným vypnutím kontroly vstupních-výstupních operací. Musíme však zajistit, aby nebyly prováděny operace s neexistujícím souborem.
{$I-} Reset(f); {$I+} if (IOResult=0) then begin {soubor existuje} end;
Pokud funkce IOResult vrací nulu, soubor je otevřen a můžeme jej číst. V opačném případě je soubor z nějakého důvodu nedostupný. Další chyba může vzniknout, čteme-li soubor až za jeho konec. Tomu se dá také zabránit.
while not Eof(f) do begin read(f,s); ... end;
Procedura read (readln) je určena pro čtení z libovolného zařízení. Pokud tedy jako první parametr uvedeme proměnnou představující otevřený soubor, bude číst soubor.
Před ukončením programu je třeba všechny otevřené soubory zase uzavřít, jinak se může jejich obsah ztratit.
close(f);
Se zápisem do textového souboru je to obdobné, jen se použije pro otevření příkaz Rewrite nebo Append. Pro zápis slouží procedura Write, případně WriteLn. Opět musí být uveden otevřený soubor jako první parametr.
Se soubory - file - se pracuje obdobně. I tady platí shodné zásady. Užíváme zde rovněž příkazu Assign k přiřazení souboru proměnné. Soubor otevřeme (Reset) případně vytvoříme (Rewrite), aby bylo možné s ním dále pracovat.
Hlavní rozdíl při práci se soubory typu file je dán organizací souboru na složky. Pro pohyb v souboru snadno využijeme příkazů FilePos, Seek a FileSize.
Čtení i zápis do souboru se provádí stejně jako u textových souborů pomocí procedur Read a Write. Po ukončení práce se souborem je opět nutné jej zavřít procedurou Close.
Cvičení: Cvičení 23 Cvičení 24 Cvičení 25