Guten Morgen,
prinzipiell ist mir bekannt wie ich eine TStringList speichern und laden könnte, allerdings sieht meine Situation wie folgt aus:
Bei der Variable handelt es sich um ein dynamischen Array, demnach ist das abspeichern erschwert und das laden erst recht.
In meinem Fall nutze ich den
SaveDialog
, sowie den
OpenDialog
.
Wie kann ich den Array am geschicktesten abspeichern und laden?
Beim speichern würde ich eine Schleife nehmen, allerdings habe ich beim laden keinen Plan, da ja die Länge des Arrays, beim laden, unbekannt ist
Ist es notwendig, das die erzeugte Datei wirklich Text ist, oder kann es auch ein Binärformat sein? Wenn das geht kannst Du die TReader- und TWriter-Klassen verwenden:
Delphi-Quellcode:
type
TStringArrayFiler = class(TObject)
public
class procedure LoadArray(var aArray: TArray<string>; const aFilename: string);
class procedure SaveArray(const aArray: array of string; const aFilename:
string);
end;
class procedure TStringArrayFiler.LoadArray(var aArray: TArray<string>; const
aFilename: string);
var
LStream: TFilestream;
LReader: TReader;
I: Integer;
begin
LStream := TFilestream.Create(aFilename, fmOpenRead or fmShareDenyWrite);
try
LReader := TReader.Create(LStream, 4096);
try
SetLength(aArray, LReader.ReadInteger);
for I := Low(aArray) to High(aArray) do
aArray[I] := LReader.ReadString;
finally
LReader.Free;
end;
finally
LStream.Free;
end;
end;
class procedure TStringArrayFiler.SaveArray(const aArray: array of string;
const aFilename: string);
var
LStream: TFilestream;
LWriter: TWriter;
I: Integer;
begin
LStream := TFilestream.Create(aFilename, fmCreate);
try
LWriter := TWriter.Create(LStream, 4096);
try
LWriter.WriteInteger(Length(aArray));
for I := Low(aArray) to High(aArray) do
LWriter.WriteString(aArray[I]);
finally
LWriter.Free;
end;
finally
LStream.Free;
end;
end;
Vielen Dank schon einmal!
Aber gibt es vielleicht eine kompaktere Version bzw. eine kompaktere Möglichkeit?
Noch mal nachgefragt:
Delphi-Quellcode:
var
myarr : array[0..n] of tstringlist;
ist das so korrekt?
Vermutlich nicht so ganz:
Bei der Variable handelt es sich um ein dynamischen Array,
Jep du liegst natürlich richtig, bei einem dynamischen Array ist das leider nicht möglich