TStringlist und find
-
danke für die erklärung jansen!
1 zeile aus der liste:
ABCcode = new CABCode("W", "YZ"); codelist->AddObject(ABCcode->Key, codelist);Ich will, dass er die ganze liste durchläuft und dann das W mit YZ ersetzt.
Ich habe für jeden Buchstaben einen anderen Wert genommen.
Bin wohl auf dem vollkommen falschen Weg ...
Kann mir bitte jemand Anregungen zu einer Problemlösung geben?lg matthi
-
Deine Problembeschreibungen sind aber auch nicht grad ein Ausbund an Eindeutigkeit.

Soll die Code-Zeile echter Programmcode aus deinem Programm sein oder ist das reiner Beispieltext, könnte da also auch "blabla" stehen?
-
nein, ist wirklich aus meinem programmcode. ich habe eben eine stringliste gemacht in der sich alle buchstaben befinden und ein verschlüsselter text, der den buchstaben darstellen soll (der verschlüsselungstext (YZ) ist das einzige, was geändert wurde):
Also aus A soll XZZ werden
aus B soll WER werden
aus W eben YZ ...Nun möchte ich, dass der Text verschlüsselt wird.
lg Matthi
-
hagbard_ schrieb:
Also aus A soll XZZ werden
aus B soll WER werden
aus W eben YZ ...Wenn es nur um A, B und W geht - also nicht das komplette Alphabet - würde
meines Erachtens AnsiReplaceStr() vollkommen genügen. Damit kannst Du die
Buchstaben durch einen String ersetzen. Allerdings solltest Du dann das 'W'
vor dem 'B' ersetzen.
Für ein ganzes Alphabet ist Dein erster Ansatz mit der Schleife doch schon ganz
gut. Einfach Zeichen für Zeichen durchgehen und die in der Stringliste ge-
speicherten Zuordnungen einsetzen. Dazu kannst Du Dir mal die Eigenschaften
Values und Names anschauen. Wie Jansen schon gesagt hat, solltest Du das
Sort rausnehmen.Gruß,
Alexander
-
Guten Abend,
erstmals Danke für die Hilfe, aber es funktioniert noch nicht richtig.
Es ist leider das ganze Alphabeth:
Dann hab ich mir gedacht, mitShowMessage(codelist->Values[22]);müsste der 23. String ausgegeben werden .. ist aber leider nicht so ... es kommt eine leere Messagebox.
Bitte um weitere Hilfe.
lg Matthi
-
hagbard_ schrieb:
ShowMessage(codelist->Values[22]);Bitte um weitere Hilfe.
Schau Dir doch mal an, was in der Hilfe zu Values steht, mit besonderem Augenmerk auf [].

Ich weiß nicht genau, was Du programmiert hast, aber sollte ungefähr so aussehen:TStringList* codelist = new TStringList(); codelist->Add("A=XZZ"); //Also aus A soll XZZ werden codelist->Add("B=WER"); //aus B soll WER werden codelist->Add("W=YZ"); //aus W eben YZ .. // usw.Gruß,
Alexander
-
hallo alexander,
mein code sieht so aus:
ABCcode = new CABCode("A", "XZZ");codelist->AddObject(ABCcode->Key, codelist); ABCcode = new CABCode("B", "WER"); codelist->AddObject(ABCcode->Key, codelist); ABCcode = new CABCode("W", "YZ"); codelist->AddObject(ABCcode->Key, codelist); usw.A usw sind eben die Keys, XZZ usw hab ich Encoded genannt.
mir ist schon davor aufgefallen, dass sowohl "values" als auch "names" AnsiStrings als Parameter verlangen.
Könntest du mir bitte in diesem Fall ein Beispiel dazu zeigen, ich komm einfach nicht drauf, hab auch AnsiStrings übergeben (A hab ich zB übergeben), aber bekomme immer noch die leere Messagebox als Ausgabe.lg und besten Dank
Matthi
-
müßte das nicht heißen:
ABCcode = new CABCode("A", "XZZ");codelist->AddObject(ABCcode->Key, ABCcode);Und Beim Zugriff auf die Objekte mußt Du natürlich auch über den Objektzeiger auf die Klassenmitglieder zugreifen. Eventuell musst Du ABCcode beim Schreiben nach void* doer TObject* casten. Beim Lesen dann natürlich wieder zurück nach CABCcode*...
Alternativ schau Dir nochmals hagbard_'s letztes Posting an. Ohne die Objekte geht's einfacher.
-
hagbard_ schrieb:
mein code sieht so aus:
ABCcode = new CABCode("A", "XZZ");codelist->AddObject(ABCcode->Key, codelist); ABCcode = new CABCode("B", "WER"); codelist->AddObject(ABCcode->Key, codelist); ABCcode = new CABCode("W", "YZ"); codelist->AddObject(ABCcode->Key, codelist); usw....das sieht nicht gut aus...
hagbard_ schrieb:
mir ist schon davor aufgefallen, dass sowohl "values" als auch "names" AnsiStrings als Parameter verlangen.
...und mit dem Lesen scheinst Du auch so Dein Probleme zu haben.

Also in meiner BCB-Hilfe (BCB6 Ent) steht:
__property AnsiString Names[int Index] = {read=GetName}; __property AnsiString Values[AnsiString Name] = {read=GetValue, write=SetValue};Außerdem steht auch ein Hinweis auf die Ähnlichkeit mit Ini-Dateien. Ich hatte Dir ja auch schon
einen Hinweis in der Richtung gegeben.
Bei der Verwendung von Names/Values brauchst Du CABCode gar nicht mehr. Ich weiß zwar leider nicht,
was diese Klasse überhaupt macht, aber offenbar speicherst Du darin lediglich die Schlüssel/Wert-
Paare. Natürlich brauchst Du die Funktion AddObject() dann auch überhaupt nicht (zumal Du scheinbar
nicht verstanden hast, wofür die eigentlich gut ist).
In meinem vorherigen Posting habe ich Dir schon gezeigt, wie die Aufrufe lauten müssen. Dann
brauchst Du auch kein Find() oder IndexOf() mehr und sparst Dir (wie von Joe_M. vorgeschlagen) auch
die Casterei.Gruß,
Alexander
-
Joe_M. schrieb:
Alternativ schau Dir nochmals hagbard_'s letztes Posting an. Ohne die Objekte geht's einfacher.
Sorry das hätte natürlich heißen müssen:
Alternativ schau Dir nochmals Alexanders letztes Posting an. Ohne die Objekte geht's einfacher.Alexander Kempf schrieb:
[
In meinem vorherigen Posting habe ich Dir schon gezeigt, wie die Aufrufe lauten müssen. Dann
brauchst Du auch kein Find() oder IndexOf() mehr und sparst Dir (wie von Joe_M. vorgeschlagen) auch
die Casterei.Dem kann ich dann eigentlich nichts mehr hinzufügen...
-
Das sieht jetzt sehr gut aus und es funkt gott sei dank

Vielen Dank euch beiden für die Hilfe.
lg Matthi