Home » Tutorials » Datenspeicherung » Typisierte Dateien

Typisierte Dateien

Neuer Datensatz

Zum Anhängen eines neuen Datensatzes wird ähnlich wie beim Löschen vorgegangen: Die Datei wird in ein Array geladen, ein leerer Datensatz wird angefügt und das Ganze anschließend wieder in die Datei gespeichert. Der Dateizeiger wird auf den letzten Datensatz gestellt.

const
  BufferSize = 32;

procedure TForm1.Button5Click(Sender: TObject); //neuer Datensatz
var
  Buffer: array[0..BufferSize - 1] of Adresse;
  i, p: integer;
begin
  Seek(datei,0);
  p:=0;
  while not eof(datei) do begin //solange lesen, bis die Datei zu Ende ist
    Read(datei, Buffer[p]);
    inc(p); //entspr. p:=p+1
  end;
  CloseFile(datei); //Datei schließen...
  Buffer[p+1].name:=''; //Am Ende leeren Datensatz anhängen
  Buffer[p+1].strasse:='';
  Buffer[p+1].plz:=0;
  Buffer[p+1].ort:='';
  ReWrite(datei);  //... und neu anlegen
  for i:=0 to p do write(datei, Buffer[i]);
  //Datensätze (bis auf letzten) in Datei schreiben
  positionieren(FileSize(datei)-1);
  //Dateizeiger auf letzten Datensatz positionieren
end;

Das Speichern der Eingaben dürfte nun auch kein großes Problem mehr darstellen. Da der Datenzeiger bereits positioniert ist (durch die Anzeige), genügt folgender Code:

procedure TForm1.Button7Click(Sender: TObject); //Datensatz speichern
var datensatz: Adresse;
    nr: integer;
begin
  // Datenzeiger VOR den aktuellen Datensatz setzen
  Seek(Datei,FilePos(Datei)-1);
  nr:=FilePos(datei);
  datensatz.name:=Edit1.Text;
  datensatz.strasse:=Edit2.Text;

  //hier müsste eine Prüfung stattfinden, ob eine Zahl eingegeben wurde!
  //Falls keine gültige Zahl, wird -1 gespeichert
  datensatz.plz:=StrToIntDef(Edit3.Text, -1);

  datensatz.ort:=Edit4.Text;
  write(datei,datensatz);
  positionieren(nr);
end;

Da nach dem Write-Befehl der Datenzeiger verschoben wird, wird die Position in der Variablen „nr“ abgelegt, um am Ende die richtige Position wiederherzustellen.