Datei einlesen



  • Erklär mich als begriffsstutzig oder vielleicht iss es schon zu spät, aber ich werd da net so ganz schlau draus.



  • Hallo

    TStringList *file = new TStringList();
    file->LoadFromFile("Test.txt");
    AnsiString row;
    for (int l = 0; l < file->Count; l++)
    {
      row = file->Strings[l}; // jede einzelne Zeile aus StringList auslesen
    }
    delete file; // nach gebrauch löschen
    

    bis bal
    akari



  • Danke für deine Hilfe!
    Ich werde mir ein besseres Buch kaufen.
    Meine Fresse hab ich Wissenslücken 😉

    thx Brösel



  • Ich hab leider kein Buch gefunden, in dem der TStringList Befehl erklärt wird.
    Könntest du mir vielleicht nen Link posten zu nem tut?
    Ich kann mit deinem Code leider nichts anfangen.

    THX Brösel



  • Hallo

    TStringList ist kein Befehl, sondern eine Klasse.
    Schau in die BCB-Hilfe, dort stehen alle Elemente der Klasse erklärt, meistens mit Beispiel.

    bis bald
    akari



  • O.K. mach ich 🙂 thx.
    Ich hoff ich nerv die nicht, aber ich hab noch ne andere Frage.
    Ich möchte über ein Memofeld Zahlen in variablen speichern.
    Das mache ich mit jenem Befehl:

    a=Memo7->Text.ToInt();
    

    Da ich im Kopf alle Variablen im Int vergeben habe

    int a,b,c,d,e;
    

    kann ich jetzt keine Zahlen mit Dezimalstellen einlesen, ist ja auch klar, denn Int arbeitet nur mit ganzen Zaheln.

    Mit welchem Datentyp kann ich am besten Dezimalzahlen verwalten und mit welchem Befehl lese ich sie am Besten ein?

    THX Brösel



  • Hallo

    float oder für noch größeren Wertebereich double.
    Dazu StrToFloat bzw StrToFloatDef

    bis bald
    akari



  • O.K.
    Den einlesecode so?

    a=Memo7->Text.StrToFloat();
    


  • Wenn a jetzt vom Typ Float ist, dann ja 🙂



  • Hallo

    schau doch bitte in die BCB-Hilfe zu den angegeben Funktionen.

    @Redhawk : StrToFloat ist kein Element von AnsiString.

    bis bald
    akari



  • Ja isser. Ich hab a als Variable definiert:

    float a,b,c,d;
    

    aber jetzt kommt nen Fehler:

    StrToFloat is not a Member of Ansistring
    

    bei diesem Befehl:

    a=Memo7->Text.StrToFloat();
    

    woran kann das liegen?



  • Hallo

    da ihr es ja offenbar nicht schafft, die Funktion in der BCB-Hilfe zu finden :

    StrToFloat konvertiert einen bestimmten AnsiString in einen Gleitkommawert.

    extern PACKAGE Extended __fastcall StrToFloat(const AnsiString S);

    Beschreibung

    Mit StrToFloat kann der AnsiString S in einen Gleitkommawert konvertiert werden. S muß ein optionales Vorzeichen (+ oder –), einen String mit Ziffern und einem optionalen Dezimaltrennzeichen und einer optionalen Mantisse. Die Mantisse setzt sich aus 'E' oder 'e', einem optionalen Vorzeichen und einer ganzen Zahl zusammen. Leerzeichen am Anfang und Ende werden ignoriert.

    Die globale Variable DecimalSeparator definiert das Zeichen, das als Dezimaltrennzeichen verwendet werden muß. Tausendertrennzeichen und Währungssymbole sind nicht zulässig. Enthält S keinen gültigen Wert, wird eine EConvertError-Exception ausgelöst.

    bis bald
    akari



  • Ich habs schon gefunden. Hab aber ne Englische Version con BC++B5
    Daher ist das mit den INfos aus der Hilfe erschwert.
    Gibts ne möglichkeit, die Hilfe ode das Komplette Prog auf deutsch zu haben?
    mit Patches oder mit ner Option? Hab leider noch nichts der gleichen gefunden.



  • Hallo

    indem du dir eine deutsche Version des Builders zulegst.

    Außerdem ist die Sprache der Hilfe in diesem Fall egal, allein aus dieser Definition kannst du schon alles notwendige lesen, wenn du ausreichend C++ Grundkenntisse hast

    Extended StrToFloat(const AnsiString S);
    

    bis bald
    akari



  • Leider habe ich nicht genug C++ Grundkentnisse.
    Machs mir bitte nicht so schwer. Kannst du mir nicht kuz ein Beispiel posten?
    Wäre echt klasse. Ich programmiere erst seit 2 Tagen und kann in der Zeit nicht alles glernt haben.

    THX Brösel



  • Hallo

    AnsiString Text = "123.45";
    float Wert  = StrToFloat(Text);
    

    dann solltest du dir unbedingt vorher C++ Grundkenntnissen aneignen, bevor du weiter mit der komplexen VCL weiterarbeitest. Also nimm dir zum Beispiel so ein Tutorial und baue erstmal einfache Konsolenprogramm (Datei/Neu.../Konsolenexperte).
    Objektorientierte GUI-Programme sind nichts für Anfänger.

    bis bald
    akari



  • Ups. Hab das nur überflogen.

    AnsiString a = "123.34";
    Float Wert;
    Wert = StrToFloat(a);
    

    war gemeint.



  • Hab jetzt selbst überlegt und Infos zusammengetragen und bin zu einem ansehlichen Ergebnis gekommen. Für alle die das selbe Problem haben hier meine Variante:
    Diese Variante arbeitet ohne Variablen ist dafür leichter bei der Anwendung.
    Ihr habt z.B. zwei Memofelder, in welche ihr Zahlen hineinschreiben wollt und jene verrechnet werden sollen. Das Ergebnis der Berechnung, ich nehme als Beispiel eine Multiplikation, soll in einem Label erscheinen. Wir verwenden nun folgenden Code:

    Label1->Caption=FloatToStr(StrToFloat(Memo1->Text)*StrToFloat(Memo2->Text));
    

    Statt Label oder Memo könnt ihr auch andere Eingabe und Ausgabefelder benutzen. Nur müsst ihr dann aufpassen ob es im Folgenden dann Text oder Caption heißt.

    CYA Brösel



  • 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


Anmelden zum Antworten