Rechnung in TXT-Datei



  • Hi Leute,

    ich habe ein kleines Getränkeautomaten-Programm gemacht. Man muss eine Anrede aus einer ComboBox auswählen, seinen Nachnamen und den Vornamen eingeben, auswählen, was man bestellen möchte und ob man in Bar oder mit Kreditkarte zahlen will.

    Nach einem Klick auf einen Button erscheint ein Dialogfenster und wenn man auf den OK-Button klickt, soll eine Datei erstellt werden. Ich habe fstream.h eingefügt und habe es mit fout probiert. Die Datei wird auch erstellt, wenn ich einen Text in Anführungszeichen übergebe, aber ich kann z.B. nicht den Nachnamen einfügen lassen.
    Hier mal mein Erstellungs\1:

    // erstellen der Rechnung
    ofstream fout("Rechnung.txt");
    fout << txtNachname->Text;
    

    Der Compiler bringt mir aber folgenden Fehler:
    [C++ Fehler] Unit1.cpp(67): E2094 'operator<<' ist im Typ 'ofstream' für Argumente des Typs 'AnsiString' nicht implementiert

    Woran könnte das liegen? Kann mir da vielleicht jemand helfen? Wäre nett...

    MfG René



  • Schau mal in die FAQ, zweites Thema von oben 😉



  • Danke erstmal für deine schnelle Antwort... 🙂

    Ich habe mir das gerade angesehen, aber das funktioniert immernoch nicht.
    Mein Scriptteil sieht nun so aus:

    // erstellen der Rechnung
    char *ch = new char[txtNachname->Text.Length()+1];
    strcpy(ch, txtNachname->Text.c_str());
    ofstream fout("Rechnung.txt");
    fout << ch;
    

    Nun gibt der Compiler keinen Fehler mehr aus, aber in der TXT-Datei steht nun nichts. Wie kann ich das ändern?

    MfG René



  • Hallo

    nimm lieber deine erste Methode und beachte das hier aus der BCB-Hilfe zu AnsiString

    Wenn Sie #include <iostream> oder #define VCL_IOSTREAM angeben, bevor Sie die include-Anweisung für die Datei dstring.h (die normalerweise indirekt durch die Datei vcl.h einbezogen wird) festlegen, können Sie die Streaming-Operatoren (<< und >>) mit AnsiStrings als Argument verwenden:

    Oder du schaust di den Hinweis von Reyx an

    bis bald
    akari



  • hmm..., entwerder steh ich auf dem Schlauch und sehe den Fehler nicht, oder das geht so nicht. Das Programm wird geladen, ich kann es ausfüllen und abschicken, aber wenn ich dann in die Datei schaue, steht nichts drin.

    Könnt ihr mir das noch etwas genauer erklären? Wäre nett...

    MfG René



  • Warum strcpy? Warum nicht einfach AnsiString::c_str()? Oder noch einfacher: siehe Reyx' Link!

    Edit: Achja, ein bischen Code könnte bestimmt nicht schaden.



  • Das hier ist mein bisheriges Programm:

    // deklarieren der benötigten Variablen
            int pin = StrToInt(txtPin->Text);
            AnsiString getraenk;
            AnsiString bezahlung;
    
            // Getränkewahl auswerten
            if (radWasser->Checked == true)
                    getraenk = radWasser->Caption;
            if (radCola->Checked == true)
                    getraenk = radCola->Caption;
            if (radOrange->Checked == true)
                    getraenk = radOrange->Caption;
            if (radZitrone->Checked == true)
                    getraenk = radZitrone->Caption;
            if (radKaffee->Checked == true)
                    getraenk = radKaffee->Caption;
            if (radTee->Checked == true)
                    getraenk = radTee->Caption;
    
            // Bezahlungsartauswählen
            if (radBar->Checked == true)
                    bezahlung = radBar->Caption;
            if (radGehaltabzug->Checked == true)
                    bezahlung = radGehaltabzug->Caption;
    
            // Auswerten der Eingabe
            if (pin == 1234)
            {
                    if(MessageDlg("Danke, " + selAnrede->Text + " " + txtVorname->Text + " " + txtNachname->Text + "! Jetzt gibt es " + getraenk + ".\nRechnung drucken?", mtInformation, TMsgDlgButtons() << mbOK, 0))
                    {
                            selAnrede->Text = "Bitte auswählen";
                            txtVorname->Text = "";
                            txtNachname->Text = "";
                            txtPin->Text = "";
                            radWasser->Checked = false;
                            radCola->Checked = false;
                            radOrange->Checked = false;
                            radZitrone->Checked = false;
                            radKaffee->Checked = false;
                            radTee->Checked = false;
                            radBar->Checked = false;
                            radGehaltabzug->Checked = false;
    
                            // erstellen der Rechnung
                            char *ch = new char[txtNachname->Text.Length()+1];
                            strcpy(ch, txtNachname->Text.c_str());
                            ofstream fout("Rechnung.txt");
                            fout << ch;
                    }
            }
    

    Ich werde das mit dem AnsiString mal probieren. In dem Link, den mir Reyx geschickt hat, steht doch aber etwas mit strcpy()? Was ist daran falsch?

    MfG René



  • // erstellen der Rechnung
                            char *ch = new char[txtNachname->Text.Length()+1];
                            strcpy(ch, txtNachname->Text.c_str());
                            ofstream fout("Rechnung.txt");
                            fout << ch;
    

    Hat es einen bestimmten Grund, warum Du die VCL nicht nutzt?

    TStringList* slRechnung = new TStringList();
    slRechnung->Add(txt.Nachname->Text);
    // weiteres hinzufügen
    slRechnung->SaveToFile("Rechnung.txt");
    delete slRechnung;
    


  • Danke..., es funktioniert nun...
    Ich verwende doch eigentlich VCL, ich habe die zumindest eingebunden.

    MfG René


Anmelden zum Antworten