Daten in einer .txt o. ä. speichern und aufrufen!



  • du musst noch die Datei <fstream> inkludieren



  • Danke.

    Die Textdatei legt er zwar nun an aber er beschreibt sie nicht. 😞



  • #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main ()
    {
    
        std::ofstream Stream("datei.txt");
    
        Stream << "Eintrag in Textdatei: " << 3 << std::endl;
    
    }
    


  • Danke hat soweit alles funktioniert.
    Hier mein aktueller Code:

    #include <iostream>
    #include <string>
    #include <fstream>
    
    using namespace std;
    
    int main ()
    {
    
       string testi;
    
       cout << "Eintrag: \t";
       std::getline(cin, testi);
    
       cout << "Es wurde folgendes in die Datei eingetragen: \n \n";
       cout << testi;
    
       std::ofstream Stream("datei.txt");
    
        Stream << "Eintrag in Textdatei: " << testi << std::endl;
    
       cin.get();
    }
    

    Wenn ich die Anwendung neu öffne und wieder was reinschreibe, überschreibt er die Textdatei mit dem neuen Inhalt.

    Ist es auch möglich, dass er die neuen Einträge einfach unter die Alten speichern???



  • std::ofstream Stream("datei.txt", std::ios::app);
    

    http://www.cplusplus.com/reference/iostream/ofstream/ofstream.html



  • Danke hat schon wieder geklappt 🙂

    Aber nun gibt es leider noch beim anschließenden Auslesen Probleme:

    #include <iostream>
    #include <string>
    #include <fstream>
    
    using namespace std;
    
    int main ()
    {
    
       string testi;
    
       cout << "Eintrag: \t";
       std::getline(cin, testi);
    
       cout << "Es wurde folgendes in die Datei eingetragen: \n \n";
       cout << testi;
    
       std::ofstream Stream("datei.txt", std::ios::app);
       Stream << "Eintrag in Textdatei: " << testi << std::endl;
    
       cout << "Bisherige Eintr\204ge: \n";
    
    std::ifstream Stream("datei.txt");
    
    int Var;
    Stream >> Var;             // liest einen einzelnen Eintrag (durch Whitespace getrennt)
    
    std::string Str;
    std::getline(Stream, Str); // liest eine gesamte Zeile und speichert sie im String Str.
    
       cin.get();
    }
    


  • Das nächste mal bitte noch mit der Beschreibung, was nicht geht.

    Du darfst natürlich nicht 2 mal den gleichen Bezeichner benutzen.
    Und den stream musst du zuerst schliessen, bevor du mit der Datei weiterarbeiten solltest.

    #include <iostream>
    #include <string>
    #include <fstream>
    
    using namespace std;
    
    int main ()
    {
       string testi;
    
       cout << "Eintrag: \t";
       std::getline(cin, testi);
    
       cout << "Es wurde folgendes in die Datei eingetragen: \n \n";
       cout << testi;
    
       std::ofstream Stream("datei.txt", std::ios::app);
       Stream << "Eintrag in Textdatei: " << testi << std::endl;
    
       cout << "Bisherige Eintr\204ge: \n";
    
       Stream.close();
    
       std::ifstream in("datei.txt"); //sowieso anderer Name
    
       int Var;
       in >> Var; 
    
       std::string Str;
       std::getline(Stream, Str);
    
       cin.get();
    }
    

    So sollte das gehen, aber du solltest dich noch einmal ein wenig mit den Grundlagen befassen. (doppelte Deklaration und so).
    Ausserdem weiss ich nicht genau, wie du dir den Aufbau der Datei vorstellst und somit müsstest du schon sagen,was das ganze machen soll. Im Moment wird ein Integer am Anfang eingelesen und dann eine Zeile. Ich vermute, dass das nicht ganz das ist, was du willst. (merke, dass ein stream, wenn du ihn erstellst immer am Anfang anfängt.)



  • So habe es einigermaßen hinbekommen bzw. den Code nochmal neu und sauberer geschrieben:

    #include <iostream>
    #include <string>
    #include <fstream>
    
    using namespace std;
    
    int main()
    {
    
        string testi;
        cout << "Eintrag: \t";
        getline(cin, testi);
    
        fstream f;
        f.open("test.dat", ios::out);
        f << testi;
        f.close();
    
        string s;
        f.open("test.dat", ios::in);
        getline(f, s);        // Lese eine Zeile
        cout << s << endl;    // Zeige sie auf dem Bildschirm
    
        cin.get();
    
    }
    

    Das klappt soweit ABER sobald ich den Dateimodus von "ios::out" auf "ios::app" ändere, damit ich mehrere Eingaben speichern und auslesen kann und nicht nur eine, geht es nicht !!!! 😞

    Warum?



  • Keiner eine Idee?



  • Sag einmal, was nicht geht.
    Ich vermute mal, dass dir einfach das out fehlt..

    f.open("test.dat", ios::out | ios::app );//Ausgabe UND append
    


  • drakon schrieb:

    Sag einmal, was nicht geht.
    Ich vermute mal, dass dir einfach das out fehlt..

    f.open("test.dat", ios::out | ios::app );//Ausgabe UND append
    

    Danke, dass geht soweit aber nun speichert er alle Einträge genau nebeneinander und nicht mehr untereinander



  • Zut schrieb:

    Danke, dass geht soweit aber nun speichert er alle Einträge genau nebeneinander und nicht mehr untereinander

    dann scvhreib dir umbrüche auch in die datei.

    f << testi << '\n';
    


  • volkard schrieb:

    Zut schrieb:

    Danke, dass geht soweit aber nun speichert er alle Einträge genau nebeneinander und nicht mehr untereinander

    dann scvhreib dir umbrüche auch in die datei.

    f << testi << '\n';
    

    Danke!
    Aber nun liest er ja nur die Zeile
    Wie kann ich dem sagen, dass er alle Einträge (auch mehrere Zeilen) wiedergeben soll



  • Zut schrieb:

    Aber nun liest er ja nur die Zeile
    Wie kann ich dem sagen, dass er alle Einträge (auch mehrere Zeilen) wiedergeben soll

    das ging glaub ich so:

    string s; 
    f.open("test.dat", ios::in); 
    while(getline(f, s))        // Lies eine Zeile 
    {
       cout << s << endl;    // Zeige sie auf dem Bildschirm 
    }
    

Anmelden zum Antworten