Problem mit AnsiString.substring
-
Hallo zusammen, ich habe folgenden Code
void TGrimmForm::SegmentateString(AnsiString data) { substrings.clear(); int readpointer = 1; int startpos = -1; int stoppos = -1; while (readpointer < data.Length()) { startpos = -1; stoppos = -1; for (int i = readpointer; i <= data.Length(); i++) { if (((data[i] > 64) && (data[i] < 91)) || ((data[i] > 97) && (data[i] < 123))) { startpos = i; readpointer = i; break; } } for (int i = readpointer; i <= data.Length(); i++) { if (data[i] == '\n') { stoppos = i; readpointer = i; break; } } if ((startpos != -1)&& (stoppos != -1)) { AnsiString substring; substring = data.SubString(startpos, stoppos); substrings.push_back(substring); } readpointer++; } }ich rufe nun die Funktion folgendermassen auf:
SegmentateString("c00 10 5 5 0 0 0 0 0 \n c01 0 0 0 0 0 0 0 0 \n c02 0 0 0 ");bei ersten durchlaufen der while Schleife wird auch
substring = "c00 10 5 5 0 0 0 0 0 \n"wie erwartet gefunden, beim zweiten Durchlauf wird startpos = 78 und stoppos = 153 gefunden, es wird aber in substring = data.SubString(startpos, stoppos); der komplette Reststring
"c01 0 0 0 0 0 0 0 0 \n c02 0 0 0 "eingetragen.
Woran kann das liegen?
Gruss Lodo2609
-
Alternativer Lösungsansatz (für BCB6 und neuer):
String data = "c00 10 0 0 0 \n c01 0 0 0 0 0 \n c02 0 0 0 "; TStringList *list = new TStringList(); list->StrictDelimiter = true; list->Delimiter = '\n'; list->DelimitedText = data; Memo1->Lines = list; delete list;
-
noch einfacher:
String data = "c00 10 0 0 0 \n c01 0 0 0 0 0 \n c02 0 0 0 "; TStringList *list = new TStringList(); list->Text = data; Memo1->Lines = list; Label1->Caption = IntToStr(list->Count); delete list;@Jansen
StrictDelimiter kennt mein BCB6Pro nicht