P8 Práca so súborom

Pojem súbor označuje časť diskového priestoru, ktorá obsahuje určité údaje. Každý súbor je označený názvom a prístupovou cestou. 
Textové súbory chápeme ako súbory znakov, ktoré sp vnútorne organizované do riadkov, Koniec riadku je vyznačený dohodnutými riadiacimi znakmi.

Deklarácia textového súboru:

premenná: text;  {napr.: subor:text;}

Operácie pre prácu so súbormi: 

  • procedure assign(premenná, názov_súboru); 
    • prepojenie skutočného súboru s premennou pre sprístupnenie súboru
    • musí byť použitá pred otvorením súboru
  • procedure reset(premenná);
    • otvorenie súboru na čítanie
  • procedure rewrite(premenná);
    • otvorenie súboru pre zápis
    • ak súbor existuje, pôvodný obsah sa vymaže
  • procedure close(premenná);
    • zatvorenie súboru
  • eof(premenná);
    • ak sme sa dostali na koniec súboru, vráti hodnotu true, inak false
  • eol(premenná);
    • ak sme sa dostali na koniec riadka, vráti hodnotu true, inak false
Praktická ukážka - v textovom súbore "zoznam.txt"máme uložený nasledovný text:
Jana Pocitacova 12 5 1982
Lucia Hrava 25 1 1981
Michal Disketovy 9 8 1983
Ladislav Monitor 18 12 1980
Andrea Myskova 25 1 1976
Pavol Tlaciarensky 23 9 1985
Martina Pamatova 15 2 1974
Peter Subor 5 5 1981
Tu je program, ktorý v danom súbore zistí oslávencov v zadanom dni:
program oslava;
uses crt;
const arok=2016;
var t:text;
    meno,priezv:string;
    d,m,den,mesiac,poc:byte;
    rok:word;
    c:char;
begin
  clrscr;
  textcolor(15);
  d:=0;
  poc:=0;
  assign(t,'zoznam.txt'); 
  reset(t);
  writeln('Chces vyhladat oslavencov v konkretnom dni? a/n');
  c:=readkey;
  if c in ['a','A'] then
    begin
      write('Zadaj den: ');
      readln(d);
    end;
  write('Zadaj mesiac, ktory ta zaujima: ');
  readln(m);
  while not eof(t) do
    begin
      meno:='';
      priezv:='';
      while not eoln(t) do
        begin
          repeat
            read(t,c);
            if c<>' ' then meno:=meno+c;
          until c=' ';
          repeat
            read(t,c);
            if c<>' ' then priezv:=priezv+c;
          until c=' ';
          read(t,den,mesiac,rok);
          if ((d=den)or (d=0)) and (m=mesiac) then
            begin
              if d=0 then write(den:4,'.');
              write(meno:10,priezv:20,(arok-rok):4,'. narodeniny');
              writeln;
              inc(poc);
            end;
        end;
      readln(t);
    end;
  if poc=0 then write('Nikto z tvojich znamych nema narodeniny.');
  close(t);
  readkey;
end.