Probleme mit SubString



  • Hallo Leute
    Ich habe ein Problem das ich einfach nicht in den Griff bekomme:
    Ich suche in einem AnsiString nach dem Teil-String "<".
    Das klappt bei folgender Syntax wunderbar:

    int co=0;
    AnsiString puf = "<td class=u64>43,33</td>";     
    Label1->Caption=puf;
    while (puf.SubString(co+15,1) != "<") co++;   //Ab der Position 15 nach "<" parsen
    Label2->Caption=puf.SubString(15,co);
    

    Die beiden Label geben korrekte Werte aus:
    Label1:"<td class=u64>43,33</td>"
    Label2:"43,33".

    Wenn ich aber puf einen String aus einer StringList zuweise, hängt er endlos in der While-Schleife:

    int co=1;
    AnsiString puf=Memo1->Lines->Strings[0];
    Label1->Caption=puf;
    while (puf.SubString(co+15,1) != "<") co++;
    Label2->Caption=puf.SubString(15,co);
    

    Ich bin mir sicher, das in dem String aus dem Memo1 auch "<td class=u64>43,33</td>" steht (Label1 zeigts an).

    Woran kann das nur liegen?
    Habe schon den halben Tag mit dem Problem verbracht... 😞

    Danke für jede Hilfe !

    wNw



  • Hallo

    Benutzt den Debugger und verfolge den Programmablauf in der Schleife. Mit Sicherheit ist eben doch nicht die Bedingung der Schleife ertfüllt (da reicht ja schon ein zusätzliches Leerzeichen...). Und du solltest die Schleife auf jedenfall auch so umschreiben das spätestens mit dem ende des Strings Schluß ist, dann hast du wenigstens keine Endlosschleife.
    Außerdem frage ich mich warum du überhaupt auf eine feste Schrittweite setzt? Such doch einfach das nächste "<".

    bis bald
    akari



  • Hallo
    Danke für die Tips!

    Such doch einfach das nächste "<"

    Leichter gesagt als getan...
    puf.Pos("<") gibt mir immer nur das erste vorkommen des Zeichens. 😕
    Wie kann ich denn über das erste "<" hinaus weiter suchen ?

    wNw



  • Den Teil bis zur ersten Fundstelle aus dem String löschen und im Rest neu suchen.



  • Ich weiß aber nicht, ob es das schon in deiner BCB Version gibt. Ist vom BCB 2007

    int PosEx(string SubStrconst, string Sconst, int Offset)
    


  • Danke an alle !
    Habs jetzt so hinbekommen, wie es Jansen mir vorschlug.
    @OldMan00:
    Habe Übrigends den BCB 5 Enterprise Suite.
    Dort gibt es die von Dir erwähnten "Befehle" noch nicht.
    Danke nochmal an alle Helfer!

    Bis Bald...
    wNw



  • Hallo nochmal,

    Wenn du statt AnsiString std::string nimmst, kannst du dort eine der vielen find-Alternativen verwenden. Da kannst du unter anderen auch einen Anfangsindex für die Suche setzen.



  • Hallo Braunstein
    Auch sehr interessant !
    Das schaue ich mir auf jeden Fall auch noch an...

    Danke

    wNw


Anmelden zum Antworten