Datei einlesen



  • Hallo

    Hab jetzt selbst überlegt und Infos zusammengetragen und bin zu einem ansehlichen Ergebnis gekommen

    Sorry aber der Thread hier zeigt eher, das dir alles zusammengetragen wurde...

    Desweiteren hat dein Code das Problem das bei nichtkonformen Ausgangsstrings in den Eingabeconttrols eine unschöne Exception kommt.
    Um das zu umgehen kannst du ab BCB6 StrToFloatDef benutzen

    Label1->Caption=FloatToStr(StrToFloatDef(Memo1->Text, 0)*StrToFloatDef(Memo2->Text, 0));
    

    oder wenn du BCB5 und drunter hast, oder die Fehlerbehandlung bei fehlerhaften Ausgangsstrings selber übernehmen willst :

    try
    {
      Label1->Caption=FloatToStr(StrToFloat(Memo1->Text)*StrToFloat(Memo2->Text));
    }
    catch(...)
    {
      // ... etwas tun wenn mindestens eine Umwandlung fehlgeschlagen ist
    }
    

    bis bald
    akari



  • Hast recht 😃 Sorry

    Hab was besseres gefunden:

    double a = Memo7->Text.ToDouble();
    

    Die Variablen müssen im Programmkopf mit double definiert sein.

    Kennst du ne möglichkeit hier zu runden, z.B. zwei Nachkommastellen?

    THX a lot Brösel



  • Brösel schrieb:

    Hast recht 😃 Sorry

    Hab was besseres gefunden:

    double a = Memo7->Text.ToDouble();
    

    Die Variablen müssen im Programmkopf mit double definiert sein.

    Kennst du ne möglichkeit hier zu runden, z.B. zwei Nachkommastellen?

    THX a lot Brösel

    Dann gib mal was anderes als Zahlen in dein Memo???(Wieso eigentlich) ein.



  • Sorry ich weiß nicht was du damitsagen willst.
    Ich möchte Dezimalzhalen über ein Memofeld einlesen.
    Das kann ich mit:

    double a = Memo7->Text.ToDouble();
    

    Was hat da dann ein Text zu suchen.
    Und, wie soll mir das weiterhelfen?



  • Ich möchte Dezimalzhalen über ein Memofeld einlesen.

    Ja, aber was ist, wenn du bzw. der User deines Programms mal nicht die Tasten trifft.
    Das ist das worauf dich Akari schon hingewiesen hat.
    Dann wird eine unschöne Exception ausgelöst.
    p.s.
    Zum Formatieren kannst du FloatToStrF nehmen.



  • "Zum Formatieren kannst du FloatToStrF nehmen."
    Meinst du, dass ich mit dem Befehl runden kann?



  • Label1->Caption = FloatToStrF(StrToFloatDef(Memo1->Text, 0),ffNumber,8,2);
    




  • Das sieht geil aus, das teste ich mal 😃

    THX a lot



  • Habs geschafft. 😃

    Vielen Dank an alle beteiligten.

    Mein Beispiel:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    #include <math.hpp>
    
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    double b;
    double RoundDouble(double dValue, int iPrecision)
    {
    double dlPower10 = Power(10.0, iPrecision);
    return dValue >= 0 ? floorl(dValue * dlPower10 + 0.5) / dlPower10 :
    ceill(dValue * dlPower10 - 0.5) / dlPower10;
    }
    //---------------------------------------------------------------------------
    
    double b = Memo10->Text.ToDouble();
    Label19->Caption=RoundDouble(b, 2);
    

    Hier wird eine Zahl in Double in b eingelesen und dann auf 2 Nachkommastellen gerundet.



  • Wie schon erwähnt:

    Wo ist die Validation, wenn jemand etwas anderes eingibt??



  • Gibts ne möglichkeit, das in meinem Beispiel einzubaun?

    Hab mir überlegt es mit dem

    atof
    

    Befehl zu machen.
    Könnte das klappen?

    Habt ihr ne Idee??

    THX Brösel



  • Wir bereits hier im Thread angesprochen, entweder mittels try...catch, oder StrToFloatDef.


Anmelden zum Antworten