Home » Tutorials » Datenspeicherung » Streams

Streams

Daten aus einer Datei lesen

Die Daten, die wir in die Datei geschrieben haben, wollen wir natürlich auch wieder herauslesen.
Zuerst brauchen wir einen Stream, mit dem wir die Datei auslesen.

procedure TFrmMain.BtnLoadClick(Sender: TObject);
var
  Daten: TDatenArray;
  Stream: TStream;
  I: integer;
  Len: LongInt;
begin
  Stream := TFileStream.Create('c:TempStreamTest.Datei', fmOpenRead);
  try

Dieses mal übergeben wir fmOpenRead, damit der FileStream weiß, dass er die Datei nur zum Lesen öffnen soll. Den Überprüfungscode haben wir hier zwecks der Übersichtlichkeit wieder weggelassen.
Dann lesen wir in der gleichen Reihenfolge wie beim Speichern die Daten wieder ein.
Als erstes lesen wir die Anzahl der Datensätze ein.

Stream.Read(Len, SizeOf(Len));

Die Methode Read funktioniert genauso wie die Methode Write, nur dass jetzt die Daten eingelesen werden.
Mit den eingelesenen Daten initialisieren wir die Größe des dynamischen Arrays.

SetLength(Daten, Len);

Jeder Datensaz wird einzeln eingelesen, da sie auch einzeln abgespeichert wurden.

for I := 0 to Len - 1 do
    begin

Das Einlesen von ID ist einfach.

Stream.Read(Daten[I].ID, SizeOf(Daten[I].ID));

Mit Name müssen wir wieder den gleichen Aufwand treiben, wie beim Speichern.

 Stream.Read(Len, SizeOf(Len));
      SetLength(Daten[I].Name, Len);
      Stream.Read(PChar(Daten[I].Name)^, Len);

Zuerst lesen wir ein, wie viele Zeichen der String hat. Dementsprechend setzen wir seine Länge. Dann wird der eigentliche String eingelesen.

end;
  finally
    Stream.Free;
  end;
  ShowData(Daten);
end;

Nachdem wir das Stream-Objekt freigegeben haben, lassen wir zur Kontrolle die eingelesenen Daten ausgeben. Es bleibt Ihnen überlassen, wie Sie die Methode ShowData implementieren.