Problem mit SubString und der Eigenschaft Pos()



  • Hallo

    Ich möchte gerne aus einem String bestimmte Teile herausfiltern und das mache ich mit SubString respektive Pos()

    Ein String kann folgendermassen aussehen:
    tabelle_x|tabelle_y.spaltea-tabelle_x.spalteb

    Wenn ich nun zum Beispiel nur tabelle_y herausfilter will, dann habe ich das folgendermassen probiert:

    TStringList* dateiliste = new TStringList;
    dateiliste->LoadFromFile("zuordnungen.txt");
    
    while(i < dateiliste->Count)
    {
      str_ganz[i] = dateiliste->Strings[i];
      str_tabelle_y = str_ganz[i].SubString(str_ganz[i].Pos("|") + 1, str_ganz [i].Pos("."));
    
     i++
    }
    

    Nun sollte es mir doch vom "|" bis zum "." den String herauslesen.
    Es beginnt zwar schön bei "|" zu lesen, aber leider liest es mir über den "Punkt hinaus". Und zwar nicht bis zum nächsten Punkt, sonder einfach etwa 12 - 15 Zeichen weiter.

    So sieht ein String aus:

    tbl_person|tbl_adressen.strassen_nummer-tbl_person.wohnort

    dann sieht der ausgelesene String so aus:

    tbl_adressen.strassen_numm

    anstatt:

    tbl_adressen

    also anstatt beim "." anzuhalten liest er hier 14 zeichen zu weit (inkl. Punkt)

    Weiss jemand an was das liegen mag?

    Vielen Dank für Eure Bemühungen!
    Grüsse



  • superstylin',
    ich versuche mal einen Schuß ins Blaue: der zweite Parameter von SubString ist eine Längen-Angabe. Du übergibst jedoch eine Position.



  • ja schon, aber eben, mit Pos() gebe ich einfach ein zeichen an, das muss doch gehen!

    Oder kennst du eine ander Möglichkeit, was mir helfen könnte??
    Dankeschön


  • Mod

    Hallo

    ganz einfach

    Berechne zuerst die Werte fuer SubString richtig (2 Parameter)
    dann funkltioniert das schon

    MfG
    Klaus



  • ich geb dir mal folgenden tip:

    Pos ermittelt die position des angegeben Textes ausgehend vom anfang des Strings.



  • Da immer alle nach Code schreien ;),
    hier eine Beispiellösung welche auch nicht "abstürzt", sollte mal was Unerwartetes im String stehen:

    int pos;
    	AnsiString str_ganz, str_tabelle_y;
    
    	str_ganz="tabelle_x|tabelle_y.spaltea-tabelle_x.spalteb";
    
    	pos=str_ganz.Pos("|");
    	if(pos)
    	{	str_tabelle_y=str_ganz.SubString(pos+1, str_ganz.Length()-pos);
    		pos=str_tabelle_y.Pos(".");
    		if(pos)
    			str_tabelle_y.SetLength(pos-1);
    	}
    

    PS: Ich persönlich parse in der Regel einen String mit Pointern, allerdings ist dann in Verbindung mit AnsiString u.U. "höchste Vorsicht" geboten 😉


Anmelden zum Antworten