předchozí návrat do menu

Lekce 10

Datový typ record

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
with karta do
  begin
    jmeno:='Jaroslav';
    ...
  end;
...

Zajistí zrácené odkazování na položky záznamu.

Datový typ soubor

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

Práce se soubory

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
IOResult:integer;

Vrací kód chyby poslední operace vstupu - výstupu. Byla-li operace úspěšná, vrací nulu.

Assign
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
Append(var f:text);

Otevření textového souboru pro připojení dalšího textu na konec souboru.

Reset
Reset(var f:file);

Otevření existujícího souboru. Je-li to textový soubor, bude otevřen pouze pro čtení.

Rewrite
Rewrite(var f:file);

Vytvoření a otevření souboru. Pokud již existoval, bude jeho obsah smazán.

Close
Close(var f:file);

Uzavření souboru.

Eof
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
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
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
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
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
Erase(var f:file);

Odstraní soubor z disku. Soubor nesmí být otevřen.

Rename
Rename(var f:file;newname);

Přejmenuje soubor.

Textové soubory

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.

Soubory typu file

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


předchozí návrat do menu
Programování v jazyce Pascal