Probs mit SubString und Pos



  • hi,

    ich möchte etwas aus einem sehr langen string raus parsen. und zwar so:

    Address = Temp.SubString(Temp.Pos("SeissionID=") + 15,Temp.Pos(">"));
    

    Temp sieht ungefär so aus:

    SeissionID=33vb2524353453566239vnbnb780nb342n432>

    alles zwischen SeissionID= und > möchte ich nun parsen, also der variable "Address" übergeben. die länge und der inhalt der sessionID ist immer mal anders. also z.B.

    SeissionID=309804353453566239vnbnb780nb342n432>
    SeissionID=89089239vnbnb780nb342n432>
    SeissionID=3398888888898098098098089089hkhjkhjkhjkb780nb342n432>

    jetzt, was mache ich genau fallsch bei meinem code oben?
    also mit "Temp.Pos("SeissionID=") + 15" will ich ja erreichen das nach dem = angefangen werden soll zu parsen. und mit "Temp.Pos(">")" will ich erreichen das beim ersten ">" das kommt, aufgehört wird.



  • a) Wie kommst du auf 15, 'SeissionID=' ist doch nur 11 Zeichen lang!?
    b) Temp.Pos(">") liefert (da '>' am Ende) die Länge des gesamten Strings, davon musst du ja wohl noch etwas abziehen.

    Address = Temp.SubString(12, Temp.Length() - 12);
    


  • hallo Jansen. sorry, ich muss wohl noch dazu sagen das vor und nach:

    SeissionID=89089239vnbnb780nb342n432>

    nen haufen html code ist 😉 deswegen geht das ja mit:

    Temp.Length() - 12

    nicht 🙄



  • Dann nimm halt Pos, abziehen musst du trotzdem.



  • 😕 versteh ich jetzt nicht. was wäre dann der inhalt von Pos ?



  • Ach nu stell dich doch nicht so an! 😉

    Address = Temp.SubString(12, Temp.Pos(">") - 12);
    


  • ich glaub wir reden aneinander vorbei 🙂
    das mit dem index ist ja sicher ok soweit. aber wie soll das mit dem count (Temp.Pos(">") - 12) gehen? wiegesagt, vor und nach

    SeissionID=89089239vnbnb780nb342n432>

    ist ne menge html code. jetzt rate mal wieviel von ">" da so vorkommen 😉
    also kann ja deine lösung nicht gehen 😞



  • habs selber gelöst.

    int Pos = -1;
        int Count = 11;
        String c;
    
        while(c != ">")
        {
            c = Temp.SubString(Temp.Pos("SeissionID=") + Count,1);
            Count++;
            Pos++;
        }
    

    oder hat jemand eine bessere lösung?



  • // SeissionID=309804353453566239vnbnb780nb342n432>

    AnsiString parse = "";
    parse = text.SubString( 11, text.Length() -12 );
    


  • schreibe ich so undeutlich?

    vor und nach
    SeissionID=309804353453566239vnbnb780nb342n432>
    ist ne menge HTML CODE. das heisst also das
    SeissionID=309804353453566239vnbnb780nb342n432>
    irgendwo in dem scheiss HTML code ist. somit kannst du Length() vergessen, was Jansen ja bereits vorgeschlagen hat 😉



  • Stell dich doch nicht so an!!

    Mittels Pos ermittelst du die Position von 'SessionID=' und löschst alles davor aus dem String. Anschliessend wendest du mein letztes Beispiel auf den Rest-String an.



  • geht kürzer aber so sollte es verständlich sein...

    String text= "irgendeinscheisshtmlcodeSeissionID=33vb2524353453566239vnbnb780nb342n432>irgendeinscheissnochkeineahnungwas";
    int pos = text.Pos("SeissionID=");
    String text2 = text.Delete(1,pos+11);
    pos = text2.Pos(">");
    String text3 = text2.Delete(pos,text2.Length());
    ShowMessage(text3);

    [ Dieser Beitrag wurde am 15.06.2003 um 16:58 Uhr von madGhost editiert. ]


Anmelden zum Antworten