Základy práce se soubory
Konverse souboru
 Tisk

Konverse souboru


Konverse souboru je zpracování, kdy se mění formát jednotlivých řádek resp. komponent. Příkladem může být např. převod textu z jednoho kódu do druhého, změna binárních údajů na alfanumerické aj.


Sekvenčně se čte jeden soubor, každá přečtená komponenta vstupního souboru se upravuje bez vztahu k jiným komponentám a vytváří se z ní komponenta výstupního souboru.


Pro konverzi souboru se používají tyto standardní procedury a funkce:


assign, reset, rewrite, read, write, close

Následující příklad ukazuje konverze souboru na disketě.


program konverse;


{$APPTYPE CONSOLE}

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

// Funkce: Konvertuje soubor - mění malá písmena na velká

uses

SysUtils;


const

    JMENO_SOUB = 'a:vytvor.txt'; // původní soubor na disketě

    KONV_SOUB = 'a:konv.txt';   // konvertovaný soubor na disketě

var

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

    c:char;

    s:string;


procedure konvertuj(var s:string); // obrací malá písmena na velká a naopak

var

    i:integer;

begin

    for i:= 1 to length(s) do begin    // postupně pro všechny znaky řádky

        if (s[i] >= 'a') and (s[i] <= 'z')

            then s[i] := chr(ord(s[i]) - ord('a')+ ord('A'))

        else

        if (s[i] >= 'A') and (s[i] <= 'Z')

            then s[i] := chr(ord(s[i]) - ord('A')+ ord('a'))

    end;

end;


begin

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

    assign(g,KONV_SOUB);

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

    reset(f);                 // pokus o otevreni

    if ioresult = 0 then begin // soubor existuje

        writeln('soubor existuje / chcete ho konvertovat? (A/N)');

        readln(c);

        if (c <> 'a') and (c<>'A') // zachovat jméno souboru

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

    end else begin

         writeln('soubor ',JMENO_SOUB,' neexistuje - nelze konvertovat');

         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í

                              // například disketa není v mechanice

        writeln('chyba pri otevirani souboru',KONV_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;


        konvertuj(s);

        writeln(g,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',KONV_SOUB);

       readln;

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

    end;

    writeln('Konec programu');

    readln;

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

end.