Rückwärts suchen als Befehl....??
-
Hallo, zusammen
suche in einem AnsiString eine bestimmte Stelle, erhalte dann den Index (i2)
zurück und möchte nun ab dieser Stelle rückwärts ein vorhergehendes Zeichen suchen:
Konkret finde ich in Int i2 die Position von "|"+z1+"|" und davor suche ich nun
mit z3.LastDelimiter("°") das Zeichen für den Datenanfang, die mich interessieren.
Mir kommt meine Methode irgendwie mit dem Zerteilen in Einzelstring ziemlich
blöde vor.
Gibt es keinen Befehl, der in einem String ab Pos x rückwärts
suchen kann? (in anderen Sprachen kenne ich das als Instr() (hier AnsiPos) und
eben für Rückwärts als RInstr().... ???z2=zSchrank.SubString(i2,zSchrank.Length()-i2); // und String nur ab diesem Schrank kürzen i2=z2.AnsiPos("°°°"); // und suchen Schrankende z2=z2.SubString(1,i2); // und String nur ab diesem Schrank kürzen //ShowMessage("Schrank: "+z2+"\r\rSuche: "+z1); // Schrankdaten komplett z1=frm13_grdPatch->Cells[2][i1]; // Panelname auslesen i2=z2.AnsiPos("|"+z1+"|"); // Panelbezeichnung suchen o2=i2>0; // Panel vorhanden z3=z2.SubString(1,i2); // und String ab da kürzen i2=z3.LastDelimiter("°"); // ab wo stehen für dieses Panel die Daten? z3=z2.SubString(i2,z2.Length()-i2); // reine Paneldaten abschneiden z4 =DatenPipe(1,4,z3,"!!"); i2=z4.AnsiPos("_"); // z.B. Ports_24 ausschneiden z4 =z4.SubString(i2+1,z4.Length()); // Anzahl als String ermitteln iPort=StrToIntDef(z4,0); // und als Int ermitteln //ShowMessage("Schrank: "+z2+"\r\rPanel: "+z3+"\r\rPorts: "+z4); // Panel- und Portdaten z1=frm13_grdPatch->Cells[3][i1]; // Portanzahl auslesen i2=StrToIntDef(z1,0); // und als Int ermitteln o3=i2<=iPort && i2>0; // prüfenDanke und Gruss, Stefan
-
Ist das rückwärtssuchen nötig??
Vielleicht hilft schon aufteilen:
http://www.marquardtnet.info/cecke/quickies.1/1_quicky_01.html
oder suchen und ersetzen
http://www.marquardtnet.info/cecke/quickies.1/1_quicky_02.html
Und dann ggf. in eine Teilstring arbeiten
-
ungefähr soetwas?
int Rinstr(AnsiString asText,char cZeichen, int iPos) { int i; for(i = iPos; i>0; i--) { if(asText[i] == cZeichen) break; } return i; }