unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 =
class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit5: TEdit;
Label5: TLabel;
Button7: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure positionieren(datensatz: integer);
procedure Button7Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
type
Adresse =
record
Vorname:
string[50];
Nachname:
string[50];
Wohnort:
string[100];
Alter: integer;
Geburtstag:
string[50];
end;
var datei:
file of Adresse;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var path:
String;
begin
path := ExtractFilePath(ParamStr(0));
AssignFile(datei, path+'
adressen.dat');
if FileExists(path+'
adressen.dat')
then ReSet(datei)
else ReWrite(datei);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
CloseFile(datei);
end;
procedure TForm1.positionieren(datensatz: integer);
var aktdatensatz: Adresse;
begin
if (datensatz<0)
or (datensatz>=FileSize(datei))
then
exit
else
begin
seek(datei, datensatz);
read(datei, aktdatensatz);
edit1.text:=aktdatensatz.Vorname;
edit2.text:=aktdatensatz.Wohnort;
edit3.text:=IntToStr(aktdatensatz.Alter);
edit4.text:=aktdatensatz.Geburtstag;
edit5.text:=aktdatensatz.Nachname;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
positionieren(0);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
positionieren(FilePos(datei)-2);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
positionieren(FilePos(datei));
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
positionieren(FileSize(datei)-1);
end;
procedure TForm1.Button5Click(Sender: TObject);
const
BufferSize = 32;
var
Buffer:
array[0..BufferSize - 1]
of Adresse;
i, p: integer;
begin
Seek(datei,0);
p:=0;
while not eof(datei)
do
begin
Read(datei, Buffer[p]);
inc(p);
end;
CloseFile(datei);
Buffer[p+1].Vorname:='
';
Buffer[p+1].Wohnort:='
';
Buffer[p+1].Alter:=0;
Buffer[p+1].Geburtstag:='
';
Buffer[p+1].Nachname:='
';
ReWrite(datei);
for i:=0
to p
do
begin
write(datei, Buffer[i]);
end;
positionieren(FileSize(datei)-1);
end;
procedure TForm1.Button7Click(Sender: TObject);
var datensatz: Adresse;
nr: integer;
begin
Seek(Datei,FilePos(Datei)-1);
nr:=FilePos(datei);
datensatz.Vorname:=Edit1.Text;
datensatz.Wohnort:=Edit2.Text;
datensatz.Alter:=StrToIntDef(Edit3.Text, -1);
datensatz.Geburtstag:=Edit4.Text;
datensatz.Nachname:=Edit5.Text;
write(datei,datensatz);
positionieren(nr);
end;
procedure TForm1.Button6Click(Sender: TObject);
const
BufferSize = 32;
var
Buffer:
array[0..BufferSize - 1]
of Adresse;
i, p: Integer;
StartRecord, EndRecord: Integer;
Max: Integer;
begin
Seek(Datei, FilePos(Datei)-1);
StartRecord := FilePos(Datei) + 1;
EndRecord := FileSize(Datei);
while StartRecord < EndRecord
do
begin
Max := BufferSize;
if Max > EndRecord - StartRecord
then
Max := EndRecord - StartRecord;
Seek(Datei, StartRecord);
for i := 0
to Max - 1
do
begin
Read(Datei, Buffer[i]);
end;
Seek(Datei, StartRecord - 1);
for i := 0
to Max - 1
do
begin
Write(Datei, Buffer[i]);
end;
inc(StartRecord);
end;
Truncate(Datei);
Positionieren(StartRecord-1);
end;
end.