StrToInt undStrToIntDef



  • Hallo,

    lese eine Textdatei ein.(Zahlenwerte)
    1234
    1223
    2343
    2223
    usw.

    Warum löst StrToInt eine EConvertError-Exception aus??

    Memo1->Lines->Add(buff);
    StringGrid1->Cells [1][1] =  StrToInt(Memo1->Lines->Strings[1],1) +
                                 StrToInt(Memo1->Lines->Strings[8],1);
    
    Memo1->Lines->Add(buff);
    StringGrid1->Cells [1][1] =  StrToIntDef(Memo1->Lines->Strings[1],2) +
                                 StrToIntDef(Memo1->Lines->Strings[8],2);
    

    Und warum löst StrToInt keine Exception aus?? 🙂



  • Die letzte Frage muss lauten:
    Warum löst StrToIntDef keine EConvertError-Exception aus??



  • Hi,

    StringGrid1->Cells [1][1] = StrToInt(Memo1->Lines->Strings[1],1) +
    StrToInt(Memo1->Lines->Strings[8],1);

    kann so nicht gehen, da StrToInt() nur einen Parameter nimmt.
    Rechnet denn Dein Programm mit StrToIntDef() auch mit den Strings oder mit den Def-Werten?
    Schau dir mal Online die Stringinhalte an, ist da vielleicht ien \n oder sowas versteckt?

    snoopy_kmo

    [ Dieser Beitrag wurde am 08.02.2003 um 18:15 Uhr von snoopy_kmo editiert. ]



  • Original erstellt von snoopy_kmo:
    **Hi,

    StringGrid1->Cells [1][1] = StrToInt(Memo1->Lines->Strings[1],1) +
    StrToInt(Memo1->Lines->Strings[8],1);

    kann so nicht gehen, da StrToInt() nur einen Parameter nimmt.
    Rechnet denn Dein Programm mit StrToIntDef() auch mit den Strings oder mit den Def-Werten?
    Schau dir mal Online die Stringinhalte an, ist da vielleicht ien \n oder sowas versteckt?

    snoopy_kmo

    [ Dieser Beitrag wurde am 08.02.2003 um 18:15 Uhr von [qb]snoopy_kmo** editiert. ][/QB]

    Ok, es ist ein Schreibfehler drin.
    Logischer Weise hat StrToInt keinen default Wert.
    Den gibt es nur bei StrToIntDef.
    Aber:
    Mein Programm rechnet mit StrToIntDef auch richtig, es nimmt also nicht die im Parameter angegebenen default Werte, sondern die String-Werte. Das dachte ich ja zuerst auch, aber ich habe mehrmals die default Werte geändert und das Ergebniss blieb gleich.
    Zur weiteren Kontrolle von StrToIntDef habe ich auch noch eine Division eingefügt. Und auch da war das Ergebniss richtig. Leglich die Nachkommastellen waren abgeschnitten. Klar ist halt int.

    StringGrid1->Cells [1][3] = ((StrToIntDef(Memo1->Lines->Strings[2],12)) +
                                (StrToIntDef(Memo1->Lines->Strings[3],14)))/2;
    

    Liegt da ein Bug in der Funktion StrToInt???



  • probiere einmal die Zahlenstrings nicht einzulesen sondern direkt im Programm zu setzen, tritt dann der gleiche Fehler auf?

    snoopy_kmo



  • ok, dann sieht es gut aus.

    AnsiString s= "3000";
    Memo1->Lines->Add(buff);
    StringGrid1->Cells [1][1] = StrToInt(s) +
                                StrToInt(4000);
    

    ergibt 7000.



  • dann wird wohl was eingelesen, was nicht dazugehört "\n" oder so?


Anmelden zum Antworten