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.