Základy práce se soubory
Výběr ze souboru
 Tisk

Výběr ze souboru


Vstupní soubor se otevře a sekvenčně se prochází. Komponenty, které splňují kritérium výběru, se zapisují do výstupního souboru.

Pro výběry ze souboru se používají tyto standardní procedury a funkce:


assign, reset, rewrite, read, write, close.


Následující příklad ukazuje výběr ze souboru těch řádek, které obsahují číslice.


program vybersoub;


{$APPTYPE CONSOLE}

// Projekt: PP01 Autor:Kopeček Datum: 18.4.2005

// Funkce: Vybírá ze souboru řádky obsahující číslice

uses

SysUtils;


const

    JMENO_SOUB   = 'vybersoub.dpr'; // původní soubor

    VYBRANY_SOUB = 'vybrany.txt';   // druhá část souboru

var

    f,g:text;     // deklarace textového souboru

    s:string;


function cislice(s:string): boolean;

var

    i:integer;

    je_tam:boolean;

begin

    je_tam := false;


    for i:= 1 to length(s) do   // výběrové kriterium / obsahuje číslici

          if (s[i] >= '0') and (s[i] <= '9') then je_tam := true;

    cislice := je_tam;

end;


begin

    assign(f,JMENO_SOUB);     // přiřazení jména souboru a souboru na disku

    assign(g,VYBRANY_SOUB);

{$I-}                         // vypnutí standardního ošetření chyb

    reset(f);                  // pokus o otevřeni pro čteni

    if ioresult <> 0 then begin // soubor neexistuje

        writeln('soubor ',JMENO_SOUB,' neexistuje');

        readln;

        halt;

    end;

    rewrite(g);               // otevření pro zápis

    if ioresult <> 0 then begin // test zda nedošlo k chybě při otevření

        writeln('chyba pri otevirani souboru',VYBRANY_SOUB);

        readln;               // čekání na operátora

        halt;                 // okamžité ukončení programu

    end;

    while not eof(f) do begin

        readln(f,s);          // čti řádku

                              // ošetření neznámé chyby

        if ioresult <> 0 then begin

           writeln('Neznámá chyba pri cteni?');

           readln;

           halt;

        end;

        if cislice(s) then begin

           writeln(g,s);          // zapiš řádku

           if ioresult <> 0 then begin

              writeln('Plna disketa ?');

              readln;

              halt;

           end;

        end

        else writeln(s);


    end;

    close(f);

    if ioresult <> 0 then begin // nepravděpodobná chyba

       writeln('chyba pri zavirani souboru', JMENO_SOUB);

       readln;

       halt;                  // okamžité ukončení programu

    end;

    close(g);

    if ioresult <> 0 then begin // nepravděpodobná chyba

       writeln('chyba pri zavirani souboru',VYBRANY_SOUB);

       readln;

       halt;                  // okamžité ukončení programu

    end;

    writeln('Konec programu');

    readln;

{$I+}                         // zapnutí standardního ošetření chyb

end.