Einführung in das Programmieren mit DELPHI  

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
Read(Dateivariable,Record-Variable)Liest einen Datensatz aus einer Datei
Write(Dateivariable,Record-Variable)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

  1. Ergänzen Sie die Funktionen "Datensatz bearbeiten" und "Datensatz suchen".
  2. Schreiben Sie eine Prozedur, die zwei Datensätze vertauscht.
  3. Schreiben Sie damit ein Programm, das die Datensätze nach der Postleitzahl sortiert.
© 2009 : Bernd Schultheiss