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.