21. Record-Dateien
In Record-Dateien werden Datensätze mit einer festen Länge sequentiell gespeichert. Die einheitliche Länge der Datensätze erlaubt es jeden Datensatz direkt anzusteuern.
Zunächst eine kleine Übersicht über die Befehle zum Umgang mit Record-Dateien:
| AssignFile(Dateivariable,Dateiname) | Verbindet eine Datei mit der im Programm deklarierten Dateivariablen |
|---|---|
| Reset(Dateivariable) | Öffnet eine bestehende Datei |
| Rewrite(Dateivariable) | erzeugt eine neue Datei |
| Seek(Dateivariable,Satznummer) | Setzt den Dateizeiger auf einen bestimmten Datensatz |
| Liest einen Datensatz aus einer Datei | |
| Schreibt einen Datensatz in eine Datei | |
| Truncate(Dateivariable) | Schneidet alle folgenden Datensätze ab |
| CloseFile(Dateivariable) | Schließt eine Datei |
| FileSize(Dateivariable) | Liefert die Anzahl der Datensätze in einer Datei |
| FilePos(Dateivariable) | Liefert die Nummer des aktuellen Datensatzes |
| Eof(Dateivariable) | Ist True wenn das Dateiende erreicht ist |
| FileExist(Dateiname) | Ist True wenn die Datei vorhanden ist |
a) Datei öffnen und schließen
Um die Bedienung möglichst einfach zu gestalten, werden wir die Datei adressen.dat gleich beim Programmstart, das heißt beim Ereignis Form1.OnCreate, öffnen und falls sie nicht vorhanden ist, neu anlegen. Entsprechend werden wir die Datei beim Beenden des Programms, das heißt beim Ereignis Form1.OnDestroy wieder schließen.
procedure TForm1.FormCreate(Sender: TObject);
var dateiname: string;
begin
dateiname := GetCurrentDir + '\adressen.dat';
AssignFile(datei,dateiname);
if FileExists(dateiname) then
Reset(datei)
else
ReWrite(datei);
end;
procedure TForm1.FormDestroy(Sender: TObject); begin CloseFile(datei); end;
b) Navigation
Die Navigation innerhalb der Datei mit Hilfe der Tasten btnFirst, btnLast, btnForward und btnBack geschieht folgendermaßen:
procedure TForm1.btnFirstClick(Sender: TObject);
begin
if FileSize(datei)>0 then begin
seek(datei,0);
read(datei,adresse);
anzeigen;
end;
end;
procedure TForm1.btnLastClick(Sender: TObject);
begin
if FileSize(datei)>0 then begin
seek(datei,FileSize(datei)-1);
read(datei,adresse);
anzeigen;
end;
end;
procedure TForm1.btnNextClick(Sender: TObject);
begin
if not eof(datei) then begin
read(datei,adresse);
anzeigen;
end;
end;
procedure TForm1.btnBackClick(Sender: TObject);
begin
if FilePos(datei)>1 then begin
seek(datei,FilePos(datei)-2);
read(datei,adresse);
anzeigen;
end;
end;
c) Datensätze anfügen und löschen
Um einen Datensatz anzufügen muss man einfach den Dateizeiger vor dem Schreiben auf das Deiteiende setzen.
Das Löschen eines Datensatzes ist etwas komplizierter. Man muss dazu alle nachfolgenden Datensätze um einen Position nach vorne schieben, d.h. den vorherigen Datensatz damit überschreiben. Anschließend wird das Ende der Datei mit Truncate abgeschnitten und der Datenzeiger wieder auf die alte Position zurückgesetzt.
procedure TForm1.btnNeuClick(Sender: TObject); begin einlesen; seek(datei,FileSize(datei)); write(datei,adresse); end;
procedure TForm1.btnDelClick(Sender: TObject);
var pos: integer;
begin
pos := FilePos(datei);
while not eof(datei) do begin
read(datei,adresse);
seek(datei,FilePos(datei)-2);
write(datei,adresse);
read(datei,adresse);
end;
seek(datei,FilePos(datei)-1);
Truncate(datei);
seek(datei,pos);
anzeigen;
end;
>
Aufgaben
- Ergänzen Sie die Funktionen "Datensatz bearbeiten" und "Datensatz suchen".
- Schreiben Sie eine Prozedur, die zwei Datensätze vertauscht.
- Schreiben Sie damit ein Programm, das die Datensätze nach der Postleitzahl sortiert.
Einführung in das Programmieren mit DELPHI
