Zahlen aus AnsiString
-
Hallo!
Habe folgendes Problem:
ST = Memo4->SelText; Memo3->Lines->Add(ST); Memo3->Lines->Add(" "); Laenge = ST.Length(); for(k=0;k<Laenge;k++) { :arrow_right: if( IsNumeric(ST[k])) { Zaehler++; Ausgabe[Zaehler]=ST[k]; } } AT = StrToInt(Ausgabe);
Gibt beim kompilieren keinen Fehler, erst zur Laufzeit entsteht eine Accessviolation.
Würde mich über hilfreiche Hinweise freuen!
Jannika
-
Was sind Laenge (int?), ST (AnsiString?) und AT (int?)?
Arbeitest du mit Pointern?
-
Upps habe ich vergessen zu kopieren:
AnsiString ST, Ausgabe; int k,Zaehler=0,Laenge, AT; ST = Memo4->SelText; Memo3->Lines->Add(ST); Memo3->Lines->Add(" "); Laenge = ST.Length(); for(k=1;k<=Laenge;k++) { if( IsNumeric(ST[k])) { Zaehler++; :arrow_right: Ausgabe[Zaehler]=ST[k]; } } AT = StrToInt(Ausgabe);
Also, durch Änderung des Startwertes von k von 0 auf 1 geht mein Programm jetzt ein Stückchen weiter.
ST = "WS9 "; // Zwei Leerzeichen hinten dran!
Die Abfrage IsNumeric klappt, wenn er allerdings in die Anweisung nach der if-Abfrage reinspringt, wird Zähler zwar auf 1 gesetzt, aber bei der nächsten Zeile kommt wieder eine Accessviolation!
-
Ich nehme mal an ST ist ein AnsiString. Da beginnt die Zählung bei 1 und nicht bei 0.
also stattfor(k=0;k<Laenge;k++)
lieber
for(k=1;k<=Laenge;k++)
-
Das Erste Problem ist also gelöst.
Du kannst doch Ausgabe so nichts zuweisen. Intern hat der String doch die Länge 0.
also lieberAusgabe+=ST[k];
statt
Ausgabe[Zaehler]=ST[k];
-
Vielen Dank für eure Hilfe, aber ich habe inzwischen selbst eine Lösung gefunden :
ST = ST.TrimRight(); ST = ST.Delete(1,2); /* Laenge = ST.Length(); for(k=1;k<=Laenge;k++) { if( IsNumeric(ST[k])) { Zaehler++; Ausgabe[Zaehler]=ST[k]; } }*/ AT = StrToInt(ST)-1;
Mit Trim habe ich einfach die Leerzeichen weggeschnitten und da IMMER WS am Anfang steht kann ich getrost Delete(1,2) ausführen!
Bis bald zum nächsten Problem....
Eure Jannika