Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Record mit StringList (https://www.delphipraxis.net/166696-record-mit-stringlist.html)

Helmi 25. Feb 2012 13:18

Record mit StringList
 
Hallo,

ich hab grad eine Krise :-)

Folgende Vorraussetzungen:
Ich lese eine Ini-Datei aus und speichere die einzelnen Daten (Strings, Integers, etc.) in einem Record.

Soweit so gut - nur muss ich jetzt eine Section als Liste auslesen.
Diese Liste würde ich auch gerne in dem Record speichern.

Also bräuchte ich so was ähnliches wie eine StringList in einem Record.

Meine Überlegung war auch schon, aus dem Record eine Klasse zu machen und dort die Variablen, als auch die StringList als public-Variablen zu definieren (vielleicht auch als property)

Oder gibt es vielleicht eine andere Möglichkeit? - Vielleicht auch eine um bei dem Record bleiben zu können?

sx2008 25. Feb 2012 14:06

AW: Record mit StringList
 
Zitat:

Zitat von Helmi (Beitrag 1152807)
Meine Überlegung war auch schon, aus dem Record eine Klasse zu machen

Das ist ein gute Idee.
Bei der Gelegenheit kannst du auch gleich das Laden und Speichern in die Klasse verlegen:
Delphi-Quellcode:
TAppSetting = class(TObject)
private
  FDieSection : TStrings;

public
  constructor Create;
  destructor Destroy;override;
  procedure LoadFromIni(ini:TCustomIniFile);
  procedure SaveToIni(ini:TCustomIniFile);

  property DieSection:TStrings;
end;

Furtbichler 25. Feb 2012 16:17

AW: Record mit StringList
 
Man sollte das laden/speichern in einer separaten Klasse erledigen, denn der Datenklasse ist es ziemlich egal, ob sie aus einer INI-Datei kommt.

Popov 25. Feb 2012 16:24

AW: Record mit StringList
 
Zitat:

Zitat von Helmi (Beitrag 1152807)
Soweit so gut - nur muss ich jetzt eine Section als Liste auslesen.
Diese Liste würde ich auch gerne in dem Record speichern.

Kein Problem, nur fehlen hier paar Einzeheiten in Bezug auf Weiterverarbeitung. Aber mal eine Idee. Ich hoffe ich habe dich verstanden

Zitat:

Also bräuchte ich so was ähnliches wie eine StringList in einem Record.
Einfach CommaText als normaler String speichern. Dieser kann jederzeit in eine StringList als CommaText geladen, verarbeitet und wieder als Commatext gespeichert werden.

himitsu 25. Feb 2012 16:38

AW: Record mit StringList
 
Nja, wenn das Lesen/Speichern unbedingt mit drinnen sein soll ... Records kennen auch Methoden. (seit D2006/TDE)

Beim Record wäre ein dynamisches Array besser, also wenn der Record/Delphi weiterhin seinen Speicher selber automatisch verwalten soll.

Sobald ein Objekt (z.B. TList oder TStringList) ins spiel kommt, dann würde ich vom Record abraten und auf ein Datenobjekt umsteigen.

Helmi 25. Feb 2012 16:46

AW: Record mit StringList
 
Zitat:

Zitat von Popov (Beitrag 1152829)
Einfach CommaText als normaler String speichern. Dieser kann jederzeit in eine StringList als CommaText geladen, verarbeitet und wieder als Commatext gespeichert werden.

Hallo,

für diese Lösung hab ich mich nun auch entschieden.

sx2008 25. Feb 2012 17:02

AW: Record mit StringList
 
Zitat:

Zitat von Furtbichler (Beitrag 1152828)
Man sollte das laden/speichern in einer separaten Klasse erledigen...

Kann man machen, muss man aber nicht.
Falls geplant ist, die Daten später aus einer Datenbank, XML- oder JSON-Datei zu laden, sind eigene Persistenzklassen natürlich vorteilhaft.
Andererseits gibt es dann zwei Klassen wo vorher nur ein Record erwünscht war.
Man muss auch bedenken, dass Delphi keine Garbage-Collection hat, so dass man deutlich mehr Code für die Datenklasse und die Persistenzklasse braucht.
Es hat alles seine Vor- und Nachteile.

Ich würde so beginnen, wie ich es oben vorgeschlagen habe.
Sollte es dann notwendig werden die Daten aus einer anderen Quelle (XML,..) zu laden, sollte man je eine weitere Klasse für jede Art der Datenhaltung erstellen.

himitsu 25. Feb 2012 17:07

AW: Record mit StringList
 
Daten als Record, Listen darin als dynamisches Array und das Laden/Speichern in je einen Record-Helper (da Records leider keine Vererbung kennen).

CommaText: Falls Kommas in den Texten vorkommen, oder man gernen einen anderen Separator hätte, dann Delimiter und DelimitedText.
PS: StrictDelimiter nicht vergessen.

Popov 25. Feb 2012 18:16

AW: Record mit StringList
 
Zitat:

Zitat von himitsu (Beitrag 1152834)
CommaText: Falls Kommas in den Texten vorkommen, oder man gernen einen anderen Separator hätte, dann Delimiter und DelimitedText.

Intern ist beides das gleiche, d. h. Commatext ist Delimitertext mit Komma. Und was die Kommas angeht, ich hab mal für ein Projekt ausführliche Untersuchungen der Commatext Funktion vorgenommen und kann sagen, dass solange man da nicht selbst in den String eingreift und reinpfuscht, da keine Fehler vorkommen, d. h. konvertieren String in Stringlist usw.

Hansa 25. Feb 2012 18:32

AW: Record mit StringList
 
Zitat:

Zitat von Helmi (Beitrag 1152807)
...Oder gibt es vielleicht eine andere Möglichkeit? - Vielleicht auch eine um bei dem Record bleiben zu können?

Sofern der Record zu der Stringliste passt : AddObject. Also die Objects-Eigenschfaft von der Stinglist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 Uhr.
Seite 1 von 2  1 2      

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