Autor Beitrag
SteheAufDerLeitung
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 104



BeitragVerfasst: Di 24.07.07 08:33 
Hallo!

Da ich in eine StringList in eine Datei schreibe und als Überschrift "Simulationsdatei" haben muss, kann ich die StringList nicht auf sorted setzen. Warum? Weil es Items gibt, die einen "niedrigeren" Anfangsbuchstaben haben..

Dennoch möchte ich überprüfen, ob ein String schon vorhanden ist. Doch .Find und .Duplicate funktionieren nur bei Sorted Lists.
Hab versucht vor jedem Eintrag
ausblenden Delphi-Quelltext
1:
2:
 for hCount = 0 to StringList.Count-1 do
  if gesString <> StringList.ValueFromIndex[hCount] then Datei.Add('...');


Dazu braucht Delphi aber einfach zu lang..

Oder habt ihr nen anderen Vorschlag?
freedy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 403
Erhaltene Danke: 1

Winows 7
Delphi XE
BeitragVerfasst: Di 24.07.07 08:40 
Gibt es denn bei dir die Möglichkeit, dass du überprüfst, ob das erste Item wirklich "Simulationsdatei" ist, dieses anschließend löschst, deine Liste sortierst und wenn du die Datei wieder speicherst, einfach über Insert deinen ersten Eintrag wieder herstellst.
Das ist nicht wirklich die schönste Lösung aber evtl. doch noch schneller als deine Jetzige.

Grüße,
Micha
SteheAufDerLeitung Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 104



BeitragVerfasst: Di 24.07.07 08:44 
Keine schlechte Idee. Aber die StringList muss leider unsortiert bleiben, da ein spezielles Format gewünscht wird.. :-/ Schade..

Die Anzahl der Strings wird ja ueber StringList.Count ermittelt. Meine Strings bestehen aus mehreren Teilen : 'string1'+'string2'+..

Zaehlen die als ein oder mehrere Strings? Gibts denn ne Möglichkeit die "Zeilen" zu überprüfen - mit .Value, .String oder .Text? Bei mir scheints nicht wirklich zu klappen..
freedy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 403
Erhaltene Danke: 1

Winows 7
Delphi XE
BeitragVerfasst: Di 24.07.07 09:08 
Kannst du mal ein konkreteres Beispiel geben?

Dann wäre noch interessant zu wissen, wie lang die Liste ungefähr ist / Anzahl Einträge.
Vielleicht gäbe es noch die Möglichkeit, die Liste redundant anzulegen und eine von beiden zu sortieren. Du könntest dann eine Verknüpfung zur anderen herstellen... oder so... gib erstmal noch ein paar Infos... :-)
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 24.07.07 09:20 
Hallo,

wenn Du nur überprüfen willst ob "Simulationsdatei" als Item enthalten ist, kann Dir IndexOf helfen:
ausblenden Delphi-Quelltext
1:
2:
if StringList.IndexOf('Simulationsdatei') <> -1 then
  //ist vorhanden

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
SteheAufDerLeitung Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 104



BeitragVerfasst: Di 24.07.07 13:06 
So, hab auch endlich mal wieder ne Sekunde.. Danke schon mal für die rege Antworterei!

Die Strings in der Liste sehen etwa wie dieser hier aus:

[Variable];CTAnalogOutput_01_Out;1;1000;abcdefgh;viele;weitere;moeglich;


Davon kann es schätzungsweise bis zu 50 oder 100Tausend geben ^^

Daher lohnt es sich doch sicher nicht, vor jedem Eintrag die komplette Liste zu überprüfen, oder? Kann man vielleicht im Nachhinein doppelte Einträge löschen? Wie schon erwähnt: Sortiert darf (leider) nicht werden. (da werden doppelte Strings automatisch nicht zugelassen :-/ )
freedy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 403
Erhaltene Danke: 1

Winows 7
Delphi XE
BeitragVerfasst: Di 24.07.07 13:31 
Hast du dich mal mit Hash-Algorithmen auseinander gesetzt? Ich leider nicht, weiß aber wohl noch, dass du darüber eine Liste mit Indizes aufbauen kannst und einen schnelleren Zugriff auf deine Elemente bekommst. Es gibt dazu ein paar Tutorials im Netz. Aber frag mich nun bitte nicht, wo die stehen.

Ansonsten schlage ich noch vor, dass du die Idee mir der Stringlist verwirfst und dir eine eigene Klasse baust, die dir alle Funktionen implementiert, wie du sie brauchst. Das ist natürlich eine Menge Tipparbeit.

Was anderes fällt mir dazu gerade nicht ein. Schlaf mal eine Nacht drüber...

Grüße,
Micha
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 24.07.07 13:49 
Hallo,

sicher kann man nachher die doppelten Einträge entfernen, aber dazu muss man überprüfen ob sie doppelt sind. Hast also dadurch nichts gewonnen, im Gegenteil, denn überprüfst Du vorher, entfällt die Zeit für das löschen.

Bei 100Tausend Einträgen denke ich auch das man sich da was anderes überlegen sollte.

Da, bei user profile iconalzaimar, gehts weiter: www.delphi-forum.de/....php?p=294663#294663

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
freedy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 403
Erhaltene Danke: 1

Winows 7
Delphi XE
BeitragVerfasst: Mi 25.07.07 08:26 
Das andere wäre halt doch noch, eine zweite Liste mit den gleichen Einträgen anzulegen, an denen jeweils nochmal ein Index auf den Originaleintrag hängt. Diese kannst du dann nach belieben sortieren. Wie du dann allerdings mit doppelten Strings verfahren willst... Aber das Problem stellt sich ja bei allen Lösungen, oder?
SteheAufDerLeitung Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 104



BeitragVerfasst: Mi 25.07.07 08:31 
Die Algorithmen kenn ich noch überhaupt nicht - weiß gar nicht was sie tun. Aber wenn ich genaueres weiß, wie es ablaufen soll, dann geb ich wieder Bescheid - hoffe doch eine passende Lösung zu finden ;-)

Danke euch!