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;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
type Adresse =
record
name:
string[50];
strasse:
string[100];
plz: integer;
ort:
string[50];
end;
var datei:
file of Adresse;
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.
name;
edit2.text:=aktdatensatz.strasse;
edit3.text:=IntToStr(aktdatensatz.plz);
edit4.text:=aktdatensatz.ort;
end;
end;
implementation
{$R *.dfm}
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);
begin
const
BufferSize = 32;
procedure TForm1.Button5Click(Sender: TObject);
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);
//entspr. p:=p+1
end;
CloseFile(datei);
Buffer[p+1].
name:='
';
Buffer[p+1].strasse:='
';
Buffer[p+1].plz:=0;
Buffer[p+1].ort:='
';
ReWrite(datei);
for i:=0
to p
do write(datei, Buffer[i]);
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.
name:=Edit1.Text;
datensatz.strasse:=Edit2.Text;
datensatz.plz:=StrToIntDef(Edit3.Text, -1);
datensatz.ort:=Edit4.Text;
write(datei,datensatz);
positionieren(nr);
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
const
BufferSize = 32;
procedure TForm1.Button6Click(Sender: TObject);
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
Read(Datei, Buffer[i]);
Seek(Datei, StartRecord - 1);
for i := 0
to Max - 1
do
Write(Datei, Buffer[i]);
inc(StartRecord);
end;
Truncate(Datei);
Positionieren(StartRecord-1);
end;
end;
end.