Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TStringList in Datei/File speichern und laden (https://www.delphipraxis.net/200513-tstringlist-datei-file-speichern-und-laden.html)

hoika 27. Apr 2019 16:53

AW: TStringList in Datei/File speichern und laden
 
Hallo,
erstmal eine funktionierenden Version machen.
Hör bitte auf mit diesem ständigen "kompakt"... :)

p80286 27. Apr 2019 17:14

AW: TStringList in Datei/File speichern und laden
 
Die Frage ist: was ist "kompakt"?
Irgendwie werde ich das Gefühl nicht los, daß hier ein Format wie .INI oder .XML angebrachter wäre.
Oder vielleicht die Ablage in einer DB?

eine klitzekleine Änderung in der Textdatei und schon hat man unerklärliches Datenhack.

Gruß
K-H

Pytroxis 27. Apr 2019 17:28

AW: TStringList in Datei/File speichern und laden
 
Zitat:

Zitat von hoika (Beitrag 1431138)
Hallo,
erstmal eine funktionierenden Version machen.
Hör bitte auf mit diesem ständigen "kompakt"... :)

Kompakt ist in meinem Fall aber wichtig, muss wie gesagt den gesamten Code + Interface, etc. auf ca. 12 Seiten erklären. Jeder Schnipsel Code denn ich mehr benötige benötigt auch mehr Erklärung und da der Raum bzw. die Seitenanzahl limitiert ist muss ich halt möglichst kompakt und kurz schreiben.


Zitat:

Zitat von p80286 (Beitrag 1431139)
Die Frage ist: was ist "kompakt"?
Irgendwie werde ich das Gefühl nicht los, daß hier ein Format wie .INI oder .XML angebrachter wäre.
Oder vielleicht die Ablage in einer DB?

eine klitzekleine Änderung in der Textdatei und schon hat man unerklärliches Datenhack.

Gruß
K-H

Prinzipiell keine schlechte Idee, allerdings ist dieses "Projekt" ein Teil meiner Facharbeit.
Letztlich wird niemand in den Textdateien rumpfuschen. Hatte ebenfalls an eine Ini-Gedacht, allerdings wollte ich mal erfragen ob es auch alternativen dazu gibt.

Dalai 27. Apr 2019 19:24

AW: TStringList in Datei/File speichern und laden
 
Mal eine ganz praktische Überlegung: Erstmal solltest du dir Gedanken darüber machen, ob du alles in einer Datei ablegen willst oder jede Stringliste in eine eigene Datei. Das ist übrigens völlig unabhängig davon, ob dynamisches Array oder nicht.

Anders ausgedrückt: Wie du ja selbst schon bemerkt hast, gibt es die Methode TStringList.SaveToFile, die einen Dateinamen als Parameter bekommt. Du hast aber ein
Delphi-Quellcode:
Array of TStringList
. Willst du also für jede deiner Stringlisten eine separate Datei anlegen? Diese Überlegung ist ja auch fürs Laden mit LoadFromFile relevant.

Wenn du alles in eine Datei packen kannst/willst, musst du eine Gesamt-Stringlist erzeugen, diese in einer Schleife befüllen (aus den Listen im Array) und dann das Ergebnis abspeichern. Wenn jede Liste eine eigene Datei bekommen soll, musst du dir Gedanken darüber machen, wie du die Dateinamen zusammenbaust, so dass sie später auch wieder eingelesen werden können (sofern nötig).

Grüße
Dalai

Pytroxis 27. Apr 2019 20:06

AW: TStringList in Datei/File speichern und laden
 
Zitat:

Zitat von Dalai (Beitrag 1431148)
Mal eine ganz praktische Überlegung: Erstmal solltest du dir Gedanken darüber machen, ob du alles in einer Datei ablegen willst oder jede Stringliste in eine eigene Datei. Das ist übrigens völlig unabhängig davon, ob dynamisches Array oder nicht.

Am besten alles in einer Datei, denke, dass so auch das Laden einfacher ist.

Zitat:

Zitat von Dalai (Beitrag 1431148)
Anders ausgedrückt: Wie du ja selbst schon bemerkt hast, gibt es die Methode TStringList.SaveToFile, die einen Dateinamen als Parameter bekommt. Du hast aber ein
Delphi-Quellcode:
Array of TStringList
. Willst du also für jede deiner Stringlisten eine separate Datei anlegen? Diese Überlegung ist ja auch fürs Laden mit LoadFromFile relevant.
Wenn du alles in eine Datei packen kannst/willst, musst du eine Gesamt-Stringlist erzeugen, diese in einer Schleife befüllen (aus den Listen im Array) und dann das Ergebnis abspeichern. Wenn jede Liste eine eigene Datei bekommen soll, musst du dir Gedanken darüber machen, wie du die Dateinamen zusammenbaust, so dass sie später auch wieder eingelesen werden können (sofern nötig).

Bin gerade leider unterwegs und demnach nicht am Rechner. Ist es überhaupt möglich ein
Delphi-Quellcode:
array of TStringList
einer
Delphi-Quellcode:
TStringList
zuzuweisen, sodass man
Delphi-Quellcode:
TStringList.SaveToFile
nutzen kann? Sprich:
Delphi-Quellcode:
var test : TStringList;
test2 : Array of TStringLIst;
...
for i:= 0 to Length(test2) do
 test[i] := test2[i];
Oder meinst du es anders?

Dalai 27. Apr 2019 20:52

AW: TStringList in Datei/File speichern und laden
 
Du musst die Gesamt-Stringlist erzeugen, dann das Array durchlaufen und die Einzellisten mit AddStrings in die Gesamt-Stringlist packen. Etwa so:
Delphi-Quellcode:
var
    ar: array of TStringList;

procedure blub;
var sl: TStringList;
    i: integer;
begin
    sl:= TStringList.Create;
    try
        for i:= Low(ar) to High(ar) do begin
           sl.AddStrings(ar[i]);
        end;
        sl.SaveToFile(...);
    finally
        sl.Free;
    end;
end;
Beachte aber, dass ein nachträgliches Auseinandernehmen nicht möglich ist, d.h. ein Einlesen geht nur komplett als einzelne Stringliste, es sei denn, du weiß, wie weit du lesen müsstest, aber das ist auch nicht wirklich zuverlässig.

Grüße
Dalai

Pytroxis 27. Apr 2019 21:31

AW: TStringList in Datei/File speichern und laden
 
Zitat:

Zitat von Dalai (Beitrag 1431158)
Du musst die Gesamt-Stringlist erzeugen, dann das Array durchlaufen und die Einzellisten mit AddStrings in die Gesamt-Stringlist packen. Etwa so:
Delphi-Quellcode:
var
    ar: array of TStringList;

procedure blub;
var sl: TStringList;
    i: integer;
begin
    sl:= TStringList.Create;
    try
        for i:= Low(ar) to High(ar) do begin
           sl.AddStrings(ar[i]);
        end;
        sl.SaveToFile(...);
    finally
        sl.Free;
    end;
end;
Beachte aber, dass ein nachträgliches Auseinandernehmen nicht möglich ist, d.h. ein Einlesen geht nur komplett als einzelne Stringliste, es sei denn, du weiß, wie weit du lesen müsstest, aber das ist auch nicht wirklich zuverlässig.

Grüße
Dalai

Danke für den Tipp bzw. die Hilfe!
Aber das laden in einzelne Teile ist leider wichtig, werde es dann mal mit Ini-Files probieren, darüber müsste es eigentlich gehen.
Vielen Dank an alle die mir geholfen haben! :)

striderx 27. Apr 2019 21:47

AW: TStringList in Datei/File speichern und laden
 
Warum fügst du nicht beim Zusammenbauen der Gesamt-Stringlist vor jeder Teilliste jeweils einen Markierungsstring ein, anhand dessen du später nach dem laden die Gesamt-Liste wieder auseinander nehmen kannst?

Luckie 27. Apr 2019 22:40

AW: TStringList in Datei/File speichern und laden
 
Du unterliegst einem Trugschluss. Kompakter Code ist unverständlicher und bedarf mehr Erklärung. Guter, verständliche, selbsterklärender Code benötigt weniger Erklärung. Benenne Variablen und Routinen "sprechend" und der Code erklärt sich fast von selbst.

samso 28. Apr 2019 07:43

AW: TStringList in Datei/File speichern und laden
 
Mein Vorschlag:

Delphi-Quellcode:
var
    ar: array of TStringList;

procedure save(const Filename: String);
var
  sl: TStringList;
  i: integer;
begin
    sl:= TStringList.Create;
    try
      for i:= Low(ar) to High(ar) do begin
         sl.Add(ar[i].Commatext);
      end;
      sl.SaveToFile(Filename);
    finally
        sl.Free;
    end;
end;
procedure load(const Filename: String);
var
  sl: TStringList;
  i: integer;
begin
  assert(Length(ar)=0);
    sl:= TStringList.Create;
    try
      s1.LoadFromFile(Filename);
      SetLength(ar, s1.Count);
      for i:= 0 to s1.Count-1 do begin
        ar[i] := TStringList.Create;
        ar[i].Commatext := s1[i]);
      end;
    finally
      sl.Free;
    end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz