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, mit

    ShowMessage(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


Anmelden zum Antworten