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.