Típusos állomány - példaprogram
program aruk;
uses crt;
type TAru = record {A fájl alaptípusa.}
kod: string;
nev: string[15];
ar: real;
t: boolean; {Ez a mező jelzi, hogy e rekord törölt-e (logikai törlés).}
end;
var bolt: file of TAru;
aru: TAru;
mkod: string;
mvalasz: char;
{Megkeres egy adott kódú rekordot az állományban.}
function Van(kodja: string): boolean;
var talalt: boolean;
begin
seek(bolt,0);
talalt := false;
while not Eof(bolt) and not talalt do
begin
read(bolt, aru);
if (aru.kod = mkod) and not aru.t then
talalt := true;
end;
van := talalt;
end;
{Egy rekord felvitele az állományba.}
procedure Bevitel;
begin
ClrScr;
WriteLn('Kerem a kodot!'); ReadLn(mkod);
if not Van(mkod) then
begin
Seek(bolt, filesize(bolt)); {Pozicionálás a fájl végére.}
WriteLn('Kerem az aru nevet!');
ReadLn(aru.nev);
WriteLn('Kerem az aru arat!');
ReadLn(aru.ar);
aru.t := false;
aru.kod := mkod;
Write(bolt, aru);
end
else
begin
WriteLn('Mar van ilyen kod!');
ReadKey
end
end;
{Egy rekord módosítása a fájlban.}
procedure Modosit;
begin
ClrScr;
WriteLn('Kerem az aru kodjat!');
ReadLn(mkod);
if Van(mkod) then
begin
Seek(bolt, FilePos(bolt) - 1);
WriteLn('Kerem az aru nevet!');
ReadLn(aru.nev);
WriteLn('Kerem az aru arat!');
ReadLn(aru.ar);
aru.t := false;
aru.kod := mkod;
Write(bolt, aru);
end
else
begin
Writeln('Nincs ilyen aru!');
ReadKey
end;
end;
{Egy rekord logikai törlése: a t mezőt True értékűre állítja,
az ilyen rekordokat a program nem létezőnek tekinti.
Fizikai törlés kilépéskor.}
procedure Torles;
begin
ClrScr;
WriteLn('Kerem az aru kodjat!');
ReadLn(mkod);
if Van(mkod) then
begin
Seek(bolt, FilePos(bolt) - 1);
aru.t := true;
Write(bolt, aru);
end
else
begin
WriteLn('Nincs ilyen aru!');
ReadKey
end
end;
{A fájl tartalmának kiírása a képernyőre.}
procedure Lista;
begin
ClrScr;
Seek(bolt, 0);
while not Eof(bolt) do
begin
Read(bolt, aru);
if aru.t = false then
begin
Write(aru.kod);
GotoXy(30, wherey); write(aru.nev);
GotoXy(60, wherey); writeln(aru.ar:10:0);
end;
end;
ReadKey
end;
{Fizikai törlés: azon rekordok átmásolása egy új állományba, melyek nincsenek logikailag törölve.
A régi állomány törlése, az új fájl átnevezése a régi nevére.}
procedure Surites;
var ujfile: file of TAru;
begin
Assign(ujfile, 'ujfile');
Rewrite(ujfile);
Seek(bolt, 0);
while not Eof(bolt) do
begin
Read(bolt, aru);
if aru.t = false then write(ujfile, aru);
end;
Close(bolt);
Erase(bolt);
Close(ujfile);
Rename(ujfile, 'bolt');
end;
{Főprogram, menü.}
begin
clrscr;
Assign(bolt, 'bolt');
{$I-}
Reset(bolt);
{$I+}
if IOResult <> 0 then Rewrite(bolt);
repeat
ClrScr;
WriteLn('1. Adatbevitel');
WriteLn('2. Modositas');
WriteLn('3. Torles');
WriteLn('4. Listazas');
WriteLn('5. Vege');
WriteLn('Valassz!');
repeat mvalasz := readkey until mvalasz in['1'..'5'];
case mvalasz of
'1': bevitel;
'2': modosit;
'3': torles;
'4': lista;
'5': surites;
end;
until mvalasz = '5';
end.