Základy práce se soubory
Rozdělení souborů
 Tisk

Rozdělení souborů


Vstupní soubor je sekvenčně čten. Určitá část se kopíruje do pomocného souboru, zbytek do druhého cílového souboru. Původní soubor se zruší a pomocný soubor se přejmenuje podle vstupního souboru.


Kritéria rozdělení mohou být různá:


Pro rozdělení souborů se používají tyto standardní procedury a funkce:


assign, reset, rewrite, read, write, close, erase, rename


Následující příklad ukazuje rozdělení dvou souborů na disketě.

program rozdsoub;


{$APPTYPE CONSOLE}

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

// Funkce: Rozděluje soubor do dvou souborů

uses

SysUtils;


const

    JMENO_SOUB = 'a:vytvor.txt'; // původní soubor na disketě, potom první část

    DRUHY_SOUB = 'a:druhy.txt';   // druhá část souboru

    POM_SOUB   = 'a:pom.$$$';     // druhá část souboru

var

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

    s:string;

    klipklap:boolean;


begin

    klipklap := true;

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

    assign(g,DRUHY_SOUB);

    assign(h,POM_SOUB);

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

    reset(f);                  // pokus o otevrení pro čtení

    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',DRUHY_SOUB);

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

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

    end;

    rewrite(h);               // 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',POM_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 z diskety ?');

           readln;

           halt;

        end;


        klipklap := not klipklap;

        if klipklap then

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

        else

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

                              // ošetření chyby - například přeplnění diskety

        if ioresult <> 0 then begin

           writeln('Plna disketa ?');

           readln;

           halt;

        end;


    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',DRUHY_SOUB);

       readln;

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

    end;

    close(h);

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

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

       readln;

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

    end;

    erase(f);                 // odstranění

    if ioresult <> 0 then begin

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

       readln;

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

    end;

    renamefile(POM_SOUB,JMENO_SOUB); // přejmenování souboru

                                      // v Turbo Pascalu jen rename

    if ioresult <> 0 then begin

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

       readln;

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

    end else

    writeln('Konec programu');

    readln;

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

end.