Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
Lazarus
|
Re: TList in Datei schreiben/lesen
23. Jan 2010, 02:27
Zitat von runningsoft:
Wie speichere ich die gesamte Liste in einer Datei bzw. lese die Datei wieder aus?
Für .. Hinweise .. Codeschnipsel wäre ich dankbar.
Hallo runningsoft, anbei "Schnipsel"
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
windows,
classes,
sysutils;
type
TTextBauStein = packed record
ID : integer; // ID des Textbausteins
fText : TStringList; // Text aus RichEdit
end;
PTextBauStein = ^TTextBauStein;
var
TextBausteinListe : TList;
ms: TMemoryStream;
p: PTextBauStein;
cbData: integer;
sData: string;
begin
ms := TMemoryStream.Create;
TextBausteinListe := TList.create;
//-- mit Dumydaten Füllen
GetMem(p, SizeOf(TTextBauStein));
p^.ID := 1;
p^.fText := TStringList.Create;
p^.fText.Add('FOO');
//-- In TList Speichern
TextBausteinListe.Add(p);
//-- Aus TList ein Item auslesen und Speichern
ms.Write(PTextBauStein(TextBausteinListe.Items[0])^, SizeOf(TTextBauStein));
{While noch Daten Da sind do BEGIN}
//-- Länge der TStringList Daten (StringList.Text) ermitteln
cbData := Length(PTextBauStein(TextBausteinListe.Items[0])^.fText.Text);
//-- Länge in Stream speichern
ms.Write(cbData, sizeof(integer));
//-- TStringList Daten speichern
ms.Write(PTextBauStein(TextBausteinListe.Items[0])^.fText.Text[1],
Length(PTextBauStein(TextBausteinListe.Items[0])^.fText.Text));
{While noch Daten Da sind END}
ms.SaveToFile('c:\out.dat');
ms.Free;
p^.fText.Free;
TextBausteinListe.Free;
freemem(p);
cbData := 0;
//-- nun alles vice versa neu einlesen
ms := TMemoryStream.Create;
TextBausteinListe := TList.create;
GetMem(p, SizeOf(TTextBauStein));
ms.LoadFromFile('c:\out.dat');
ms.Read(p^ ,SizeOf(TTextBauStein));
ms.Read(cbData, Sizeof(integer));
p^.fText := TStringList.Create;
setlength(sData, cbData);
ms.Read(sData[1], cbData);
p^.fText.Add(sData);
TextBausteinListe.Add(p);
writeln(IntToStr(PTextBauStein(TextBausteinListe.Items[0])^.ID));
writeln(PTextBauStein(TextBausteinListe.Items[0])^.fText.Text);
readln;
end.
lg. Astat
Lanthan Astat 06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
|
|
Zitat
|