Práca so súborom

Z Delphi & Pascal (česká wiki)
Verze z 22. 9. 2012, 23:01, kterou vytvořil Zdeno Sekerák (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání

Práca s textovým súborom

Pre prácu so súborom potrebujete definovať tzv. rukoväť súboru. Rukoväť je premená typu súbor a definujeme ju v časti var.

var f:text;        { textový súbor }

Túto rukoväť najprv spojíme so súborom ktorého meno poznáme. To aby počítač vedel o aký súbor nám ide. Spojíme ho príkazom Assign. Ďalej už budeme pracovať so súborom len pomocou premenej f a názov súboru môžeme zabudnút.

Assign (f,'C:\subor.txt');

Pre ďalšiu prácu musíme určiť či budeme súbor čítať, alebo doň zapisovať. Na každú činosť použijeme iný príkaz otvorenia súboru. Ak budeme čítať použijeme príkaz ReSet a v zátvorke uvedieme rukoväť súboru. Ak budeme zapisovať použijeme príkaz ReWrite a rukoväť.

ReSet(f);        { budeme čítať subor }
ReWrite(f);     { budeme zapisovať do súboru }

Ďalej zo súborom pracujeme pomocou príkazov Write alebo Read (prípadne WriteLn a ReadLn). Ak chceme zapisovať použijeme Write. Za normálnych okolností sa používa Write na výpis textu na obrazovku. Ak však ako prvý parameter uvedieme premenú rukoväť, tak sa všetko bude zapisovať do súboru. Obdobne funguje Read. Všetko čo by sme museli zadávať z klávesnice sa bude čítať zo súboru. Pri Read ako prvý parameter tiež uvedieme rukoväť.

Ukazuje rozdiel medzi zápisom na obrazovku a zápisom do súboru.

Write('Text na monitor');
Write(f,'Text do suboru');    { f je rukoväť súboru }

Read(i);      { prečítaj premenú i z klávesnice }
Read(f,i);    { prečítaj zo súboru }


POZOR: Write použijeme len na súbor ktorý sme predtým otvorili v režime ReWrite. Read zase na súbor ktorý sme predtým otvorili v režime ReSet

V prípade že budeme súbor čítať, máme problém rozoznať kedy je koniec súboru, a teda kedy už nemá zmysel súbor ďalej čítať. K tomu slúži funkcia Eof (End-of-file), ktorú použijeme v podmienke neakého cyklu. Tým cyklom je najčastejšie while, ale môže to byť aj repeat. Funkcia Eof je True ak sme dosiahli koniec súboru, ináč je vždy False.

ReSet(f);
while ( not( eof(f) )) do begin
   ReadLn(f,s);
   WriteLn(s);
end;

Poslednou časťou je ukončiť prácu so súborom, zavrieť súbor. To vykonáme príkazom Close. Parametrom je rukoväť.

Close(f);


Takže zhrnieme.

Práca so súborom sa delí na 4 časti.

  • ASSIGN - Spojenie názvu súboru s rukoväťou
  • RESET - Režim čítanie
  • REWRITE - Režim zápis
  • WRITE - Zápis do súboru
  • READ - Čítanie zo súboru
  • EOF - Zisťujeme koniec súboru pri Read
  • CLOSE - Uzavretie spojenia


A teraz 2 príklady

Príklad 1: Otvoríme súbor a zapíšeme doň text "ahoj svet".

program zapis_do_suboru;
var f:text;
begin
   Assign(f,'c:\subor.txt');
   ReWrite(f);
   Write(f,'ahoj svet');
   Close(f);
end.

Priklad 2: Otvoríme súbor a prečítame z neho všetok text. Prečítaný text zároveň vypíšeme na obrazovku.

program citanie_zo_suboru;
var f:text;
       s:string;
begin
   Assign(f,'c:\subor.txt');
   ReSet(f);

   while ( not( eof(f) )) do begin
       ReadLn(f,s);
       WriteLn(s);
   end;

   Close(f);
end.


Poznámka:

  • Ak pracujeme s viacerými súbormi naraz, zadefinujeme pre každý vlastnú rukoväť a s tou potom pracujeme.
  • Ak použijete režim ReWrite na existujúci súbor, tak sa tento súbor zmaže a vytvorí nový-prázdny.
  • Ak chceme zisťovať iba koniec riadku v súbore použijeme príkaz EOLN.
  • Pre prácu so súborom existuje ešte režim APPEND. Ako z názvu vyplýva slúži na pridávanie textu na koniec existujúceho súboru. Ináč je identický s režimom ReWrite.
  • Pre prácu s dátovými súbormi sa používa premená "file of nieco" a tiež ďalšie príkazy, ale o tom v ďalšej kapitole.


Kam ďalej: Obsah | Prilohy