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.spaltebWenn 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
-
Hallo
ganz einfach
Berechne zuerst die Werte fuer SubString richtig (2 Parameter)
dann funkltioniert das schonMfG
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
