Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Kontrolliertes Speichern bei dpCollection? (https://www.delphipraxis.net/44076-kontrolliertes-speichern-bei-dpcollection.html)

alcaeus 13. Apr 2005 08:15


Kontrolliertes Speichern bei dpCollection?
 
Hallo allerseits,

ich versuche grad ein Optionssystem mit Hilfe der dpCollection zu erstellen. Nun stehe ich vor dem Problem, dass ich um eine Option zu suchen, erstmal die Ganze Collection durchlaufen muesste. Wenn ich allerdings Konstanten fuer die Optionen erstelle, und die Optionswerte genau in der Reihenfolge hinzufuege, kann ich davon ausgehen dass die Werte in genau der Reihenfolge abgespeichert werden?
Also folgendes Beispiel: ich fuege Wert1, Wert3, Wert2 der Collection hinzu und speicher das Ding. Wenn ich die Collection wieder aus der Datei lade, haben die Werte immer noch dieselbe Reihenfolge? In dem Fall koennte ich die Optionswerte naemlich mit Indexen ansprechen, was natuerlich geschickter (und schneller) waere.
Ich hoffe jemand kann die Frage beantworten...

Thanx and Greetz
alcaeus

jim_raynor 13. Apr 2005 08:36

Re: Kontrolliertes Speichern bei dpCollection?
 
Ganz ehrlich. Würde darauf verzichten feste Indizies zu vergeben. Musst nur mal einen Wert mittendrin einfügen und vergessen die Indizies zu aktualisieren. Schon triffst du auf Probleme, die du eventuell nur schwer nachvollziehen kannst.

Soll dieses Optionssystem Einstellungen für das Programm speichern? Wenn ja würde ich die Optionen am Programm start in Globale Variable oder ähnlichem lesen. Dann hast du mit der Performance keine Probleme.

alcaeus 13. Apr 2005 09:08

Re: Kontrolliertes Speichern bei dpCollection?
 
Zitat:

Zitat von jim_raynor
Soll dieses Optionssystem Einstellungen für das Programm speichern? Wenn ja würde ich die Optionen am Programm start in Globale Variable oder ähnlichem lesen. Dann hast du mit der Performance keine Probleme.

Bingo. Hier geht es aber nicht darum, wo ich sie speichere (naemlich in einer globalen Variable, die beim Programmstart eingelesen wird), sondern wie ich sie speichere. Die Speicherung geschieht mit Hilfe der dpCollection, und wenn ich mir sicher sein kann, dass die Optionen in einer bestimmten Reihenfolge gespeichert werden, passt es ja. In der Mitte kommt sicher nichts mehr dazu, neue Optionen werden einfach am Ende drangehaengt. Falls die Speicherung aber zufaellig erfolgt, werde ich mir wohl was anderes einfallen lassen...

Greetz
alcaeus

Jens Schumann 13. Apr 2005 09:27

Re: Kontrolliertes Speichern bei dpCollection?
 
Hallo alcaeus,
grundsätzlich kannst Du davon ausgehen das die Werte der Reihe nach gespeichert werden.
Wenn Du die Collection im Textformat speicherst kannst Du das sehen.

Aber ich verstehe Dein Problem nicht. Wenn jeder Wert ein Element der Collection ist dann
ist jeder Wert ein TCollectionItem Nachfahre. Warum bündelst Du nicht die einzelnen Werte
als properties eines einzigen TCollectionItem Nachfahren?

alcaeus 13. Apr 2005 09:31

Re: Kontrolliertes Speichern bei dpCollection?
 
Zitat:

Zitat von Jens Schumann
grundsätzlich kannst Du davon ausgehen das die Werte der Reihe nach gespeichert werden.
Wenn Du die Collection im Textformat speicherst kannst Du das sehen.

Jup, habs gesehn. Ich hab mich grad durch eine aeltere Connection durchgearbeitet. Super :)

Zitat:

Zitat von Jens Schumann
Aber ich verstehe Dein Problem nicht. Wenn jeder Wert ein Element der Collection ist dann
ist jeder Wert ein TCollectionItem Nachfahre. Warum bündelst Du nicht die einzelnen Werte
als properties eines einzigen TCollectionItem Nachfahren?

Und ich verstehe dich nicht :oops:

Also die CollectionItems sind so
Delphi-Quellcode:
TOptionsItem = class(TCollectionItem)
deklariert und haben folgende Properties:
Delphi-Quellcode:
property OptionName: String read FOptionName write FOptionName;
property OptionValue: String read FOptionValue write FOptionValue;
property OptionType: TOptionTypes read FOptionType write FOptionType;
TOptionTypes ist deklariert als
Delphi-Quellcode:
TOptionTypes = (otString, otBoolean, otInteger, otFloat);
Alle Optionen werden als String gespeichert, und dann bei der Verwendung in den richtigen Type gecastet, allerdings bin ich mir im Moment nicht sicher, ob dies die optimale Methode ist. Vielleicht kann mir jemand ja einen Denkanstoss geben...

Greetz
alcaeus

Jens Schumann 13. Apr 2005 09:44

Re: Kontrolliertes Speichern bei dpCollection?
 
Hallo alcaeus,
was ein bißchen Code doch ausmacht. Jetzt habe ich Dich verstanden.
Ich würde das mit dem Index vergessen und tatsächlich die Collection
durchlaufen bis ich die richtige Option gefunden habe. Wenn Du nicht
gerade 1000sende Optionen gespeichert hast dürfte man den Geschwindigkeitsnachteil
nicht merken. Das casten dauert bestimmt länger.

Dafür würde ich TJsCollection oder TmxJsCollection wie folgt erweitern.

Delphi-Quellcode:
...
  function GetOptionItem(aOptionname : String) : TOptionItem;
...
  property Option[aOptionname : String] TOptionsItem read GetOptionItem;
...

function TJsCollection.GetOptionItem(aOptionname : String) : TOptionsItem;
var
  iCnt       : Integer;
  _Optionname : String;
begin
  Result:=Nil;
  _Optionname:=AnsiUpperCae(aOptionname);
  For iCnt:=0 to Count-1 do
    begin
       // evt muss hier noch nach TOptionsItem gecastet werden
    If AnsiUpperCase(Items[iCnt].Optionname)=_Optionname then
      begin
      Result:=Items[iCnt];
      Exit;
      end;
    end;
end;
Damit kannst Du die Option über den Optioname ansprechen

alcaeus 13. Apr 2005 09:47

Re: Kontrolliertes Speichern bei dpCollection?
 
Ok, danke, das werde ich mal versuchen :)

Greetz
alcaeus

alcaeus 13. Apr 2005 15:26

Re: Kontrolliertes Speichern bei dpCollection?
 
So, ich habs jetzt auch ohne den Tipp geschafft. Ich biete zwei Methoden an: einmal zum Zugreifen ueber den Namen, einmal ueber den Index. Die Funktion die ueber den Namen zugreift holt sich den Index der Option, und verwendet dann die zweite Methode. Funktioniert praechtig, und auch nicht so langsam.
Danke fuer die Hilfe :)

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:15 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