Problem bei Prüfung AnsiString oder Integer



  • Moin moin,

    ich habe ein Problem. Ich habe eine AnsiString-Variable (z.B. Inhalt "1030" oder "leer"). Nun möchte ich herausfinden ob die Variable eine Zahl enthält oder einen Text.
    Hatte mir erts gedacht, dass es ganz einfach wäre, wenn ich mit StrToInt arbeite und mir die Funktion einen NULL-Zeiger zurück gibt, wenn es keine Zahl ist.
    Da lag ich im Irrtum, da hier dann eine Exception ausgelöst wird.

    Nun ist meine Frage, wie ich prüfen kann, ob meine Variable eine Zahl oder einen Text beinhaltet? Bitte um einen kleinen Quelltexthinweis.
    Dachte erst, ich könnte es wie folgt lösen:

    ...
    // AnsiString-Variable  asPrüfString
    
    // Prüfung ob ertes Zeichen des Strings eine Zahl ist
    if (isdigit(asPrüfString.operator [](0)) !=0)
    {
    ...
    

    Leider war das nicht der richtige ansatz, da mein Compiler (Borland 2007 c++ RAD Studio) dabei streikt.
    Kann ich auch verstehen.

    Bitte um Hilfe.
    Danke



  • Hallo

    radian schrieb:

    mir die Funktion einen NULL-Zeiger zurück gibt

    Wie kommst du darauf? Der Rückgabetyp der Funktion ist int. Wo soll da ein Zeiger herkommen?

    Da lag ich im Irrtum, da hier dann eine Exception ausgelöst wird.

    Wie es ja auch in der Doku zur Funktion erklärt wird.

    Es gibt zwei einfache Lösungen :

    AnsiString Text = ...;
    int Zahl;
    try
    {
      Zahl = StrToInt(Text);
    }
    catch(...)
    {
      Zahl = 0;
    }
    

    Anmerkung : Die Exception wird zwar korrekt abgefangen, im Debug-Modus von der IDE trotzdem angezeigt. Aber nicht im Betrieb ohne IDE.

    Oder :

    AnsiString Text = ...;
    int Zahl = StrToIntDef(Text, 0);
    

    bis bald
    akari



  • Ich danke dir arkari. Das ist sehr nett.
    Ich werde mich gleich mal daran machen.
    Meine Hilfe ist defekt. Muss das Develoer Studio neu installieren oder die Hilfe irgendwie wieder in Gang setzen.



  • Hallo,

    Das hier

    if (isdigit(asPrüfString.operator [](0)) !=0)
    

    ist falsch, da die Indizierung von AnsiString bei 1 und nicht bei 0 anfängt. So würde es gehen

    if (isdigit(asPrüfString[1]) !=0)
    

    Der operator-syntax ist auch unnötig kompliziert.



  • Auch dir danke ich für die Erklärung Braunstein 😉

    Es ist immer gut, wenn man etwas mehr erfährt.


Anmelden zum Antworten