AnsiString: auf einzelne Zeichen zugreifen
-
Hi!
Folgendes Problem, ich will einen AnsiString scannen, dazu muss ich auf die einzelnen Zeichen zugreifen. In der FAQ steht dazu zwar schon was, aber des funzt nicht. Ich bekomme jedesmal eine EAccessViolation-Exception. Was mach' ich falsch?
if ((Chr[i] >= AnsiString('0')) && (Chr[i] <= AnsiString('9'))) { //do something }
Danke im voraus!
-
Was steht denn in i?
-
Ich vermute mal, daß Chr vom Typ AnsiString ist? Wenn dem so ist, dann gibt
Dir der []-Operator keinen AnsiString zurück. Der Vergleich mit einem
AnsiString wird Dir vermutlich nicht das gewünschte Resultat liefern. Du
solltest außerdem noch beachten, daß der []-Operator ein int-Argument > 0 er-
wartet. Am besten schaust Du Dir noch mal die Hilfe zu AnsiString an.Gruß,
Alexander
-
Die AnsiString Klasse bietet dafür auch die SubString Methode an.
-
Ähm ja, der Code war wohl etwas "wenig".
i ist eine Zählervariable und Chr ist vom Typ AnsiString.
Ein int-Argument größer 0?? Meines Wissens fängt ein Array, beim index 0 an.
Die SubString-Methode ist wohl doch ein bisschen aufwendig für so ein winziges Problemchen! Ich will auf die Bearbeitung nicht stunden warten, sondern nur Minuten! *mpf*
Mit dem bescheuerten Debugger kann man leider auch nix anfangen: Wenn ich bei "Ausdruck überwachen" Chr[0] eingebe, labert der Sack immer was von "Seiteneffekte nicht zulässig".
Hab's gerade gelesen! Bei AnsiString[zeichenindex] fängt der zeichenindex bei '1' an! Seit wann sind die "Gesetze" der Informatik ungültig? Wie soll man denn auf so einen Schwachsinn kommen!
Okidoke! Der Krampf funzt jetzt ähnlich wie
AnsiString Chr; if (Chr[1] == '9') { //do something }
Vielen Dank an alle, vor allem an Alexander! Bis zum nächsten Mal.
-
SeboStone schrieb:
Mit dem bescheuerten Debugger kann man leider auch nix anfangen: Wenn ich bei "Ausdruck überwachen" Chr[0] eingebe, labert der Sack immer was von "Seiteneffekte nicht zulässig".
Hab's gerade gelesen! Bei AnsiString[zeichenindex] fängt der zeichenindex bei '1' an! Seit wann sind die "Gesetze" der Informatik ungültig? Wie soll man denn auf so einen Schwachsinn kommen!
Hi,
zum Debugger: Wenn man mit rechts auf einen solchen Ausdruck klickt und dann bei Eigenschaften den Haken bei 'Seiteneffekte zulassen' macht funktioniert das auch!zum Index: AnsiString ist ein Klasse der VCL! Die VCL wurde in Pascal geschrieben! Dort gibt's erstmal keine nullterminierten Strings! Deshalb werden da alle Strings so abgespeichert, dass im [0] die Länge gespeichert wir und ab [1] der eigentliche String anfängt! Außerdem kann man in Pascal die Array Grenzen selber festlegen (z.B. auch [20...1032] oder so)! Dadurch vermute ich das die BorlandEntwickler sich bei der Entwicklung der AnsiString Klasse an die Definition eines Pascal-Strings gehalten haben und lediglich die Länge nicht mehr in [0] gespeichert wir. Dadurch wird vorallam Delphi-Programmierern der Umstieg von Pascal auf Delphi erleichtert (das war der Zweck, da die VCL für Delphi geschrieben wurde)!
MfG
Alexander Sulfrian
BTW: Erst Nachdenken - dann meckern!