Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi werte in array ablegen und aufrufen (https://www.delphipraxis.net/125855-werte-array-ablegen-und-aufrufen.html)

Privateer3000 13. Dez 2008 09:11


werte in array ablegen und aufrufen
 
Hallöchen,
um nicht 20 Spalten in einer Tabellen anlegen zu müssen habe ich
in eine Zelle 20 Parameter (alles Integer) als Text in eine Spalte mit Kommas getrennt gelegt.
Der Text in etwa so aus: 0,1,2,0,2,1...
Nun möchte ich den Inhalt wieder auseinander nehmen und die Parameter verwenden.
Wie sähe der richtige Weg dazu aus? Muss man alles in eine Stringliste legen oder
gibt es andere Möglichkeiten?

Grüße
Privateer3000

DeddyH 13. Dez 2008 09:24

Re: werte in array ablegen und aufrufen
 
Was meinst Du mit Tabelle? Datenbank? Dann ist das genau das falsche Vorgehen, da die DB so nicht normalisiert ist.

TonyR 13. Dez 2008 11:08

Re: werte in array ablegen und aufrufen
 
Sind die vorhandenen "Parameter" alles einstellige Zahlen? Wie möchtest du die Ergebnisse vorliegen haben?
Es gibt units und Funktionen, die dieses Problem behandeln, such mal nach explode

Aber eigentlich könntest du für dein Problem relativ schnell eine eigene Funktion basteln, aber dafür müsste man schon die obigen Fragen beantworten =)


Edit: Er meint glaube ich eine CSV!?

Privateer3000 13. Dez 2008 14:53

Re: werte in array ablegen und aufrufen
 
Ja, in einer datenbank habe ich alle möglichen programmeinstellungen gespeichert.
Jetzt wollte ich mit Parametern bestimmte Zustände schalten. Dies geschieht mit
mit 0,1 oder 3. 20 Zustände sollen geschrieben werden. Um, wie gesagt, nicht 20 Spalten
benutzen zu müssen wollte ich alle in einen String packen und dann,wie richtig erkannt, wieder
auseinander zu nehmen. So dass ich dann ähnlich einer Stringlist mit n1[i]..n20[i]
eine integere Variable damit belegen kann.
Ich hab keine richtige Idee das umzusetzen.

DeddyH 13. Dez 2008 15:19

Re: werte in array ablegen und aufrufen
 
Wenn ich das richtig verstehe, handelt es sich doch um eine m:n-Beziehung. Diese wird im Normalfall über eine Zuordnungstabelle realisiert, dafür brauchst Du keine 20 Spalten in der Haupttabelle.

guidok 14. Dez 2008 09:32

Re: werte in array ablegen und aufrufen
 
Also wenn ich das alles richtig verstanden habe, dann ist die TStringList ganz gut für dich geeignet. Du weist deinen kommaseparierten String einfach der Eigenschaft StringList.DelimitedText zu und kannst dann ganz einfach über den Listenindex auf die einzelnen Inhalte zugreifen.

Alternativ gäbe es noch die Möglichkeit Schlüssel-Wertepaare ala INI-Datei zu verwenden. Das heisst du legts in deiner StringList die Parameter in folgender Form ab (geht z.B. über die Eigenschaft Value):

Delphi-Quellcode:
StringList.Value('Para1') := IntToStr(34);
Para1=34
Para2=22
...

Auslesen kannst du auch hier wieder DelimitedText:

Para1=34,Para2=22...

Mit den Eigenschaften Value und Name kannst du in der StringList direkt über Schlüsselname auf den Wert zu greifen. Das hat den Vorteil, dass du nicht immer alle Parameter speichern musst, sondern nur die, die du im jeweiligen Fall auch benötigts UND du könntest durch neue Schlüsselnamen ganz einfach erweitern.

Edit:

Wobei DeddyH natürlich recht damit hat, dass man dies in einer DB nicht unbedingt so machen sollte... Ich könnte mir das allerdings trotzdem durchaus vorstellen, um z.B. Einstellungen für einen Benutzer in einem Parameterstring zu sichern, o.ä.

Privateer3000 14. Dez 2008 09:45

Re: werte in array ablegen und aufrufen
 
Danke Leute

ja es geht um Benutzereinstellungen zu sichern.
Kann ich nicht ein fach den string den ich aus der DB auslese
in eine stringlist umwandeln?
Normalerweise werden ja elemente einzeln einer stringlist hinzugefügt.
Nun steht der string ja schon "fertig" da.
Delphi-Quellcode:
var settings:String;
...
settings:=fieldbyname('einstell').asString;
kann man das nun einfach umwandeln?

guidok 14. Dez 2008 10:03

Re: werte in array ablegen und aufrufen
 
Zitat:

Zitat von Privateer3000
kann man das nun einfach umwandeln?

Steht doch da, genau ein Beitrag weiter oben: DelimitedText

Schau dazu auch in der Hilfe zur TStringList nach.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.

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