Datei Frage bei C++



  • Abend,ich hab eine kleine Frage.Bin gerade so am testen von Dateien einlese und ausgeben.Dabei benutze ich fstream.
    Jetzt will ich aus bestimmten Dateien Werte oder Texte in Variablen abspeichern.

    Leider weiß ich nicht wie man das Zeilen weise machen kann.

    Ich hab das so gemacht:

    #include <fstream>
    #include <iostream>
    using namespace std;
    
    int main()
    {
       fstream file;
       file.open("test.dat");
       char aus;
       file.get(aus);
       cout << "In der Datei steht :" << aus << endl;
       file.close();
       getchar();
    
    }
    

    Damit wird zwar nur der erste Buchstabe ausgegeben aber......
    Kann mir einer helfen 😕
    Ich hab auch schon englishe Tuts durchgelesen aber so richtig hab ich es nicht verstanden.

    Danke Voraus



  • Fehlt bei "file.open("test.dat");" nicht noch das ios::out bzw. ios::in?

    Wenn du die ganze Zeile haben möchtest, solltest du dir mal getline anschauen.
    http://www.cplusplus.com/reference/iostream/istream/getline/

    Wenn du bis zum nächsten Leerzeichen einlesen möchtest müsste das mit dem >>-Operator gehen:

    f >> aus;
    


  • zB so zeilenweise:

    ifstream file("test.dat");
    char zeile[1024];
    if(file.is_open())
    {
    for(int a=1;!file.eof();a++)
    {
    cout<<"Zeile "<<a<<": ";
    file.getline(zeile, 1024);
    cout<<zeile<<endl;
    }
    }
    

    lg,
    andi01.



  • Mit getline 😉

    ifstream in( "Test.txt", ios::in );
    string line;
    
    while( getline( in, line ) )
    {
    // mach was du willst
    };
    
    ofstream out( "Test.txt", ios::out );
    string line;
    
    out << line << endl;
    

    Hoffe konnte dir helfen.

    Lg freeG



  • andi01 schrieb:

    zB so zeilenweise:

    ifstream file("test.dat");
    char zeile[1024];
    if(file.is_open())
    {
    for(int a=1;!file.eof();a++)
    {
    cout<<"Zeile "<<a<<": ";
    file.getline(zeile, 1024);
    cout<<zeile<<endl;
    }
    }
    

    lg,
    andi01.

    Ja aber man sollte in C++ std::string nehmen und nicht char Arrays.
    Siehe mein Post oben.

    Lg freeG



  • Danke erstmal für die viele Post:D
    Werd das morgen ausprobieren.
    Guten Abend noch 👍



  • (Post gelöscht)

    Danke habs jetzt 👍



  • Stani schrieb:

    Da man bei Getline nur die maximalen Zeichen in der Zeile bestimmen kann.....

    Ohne motzig klingen zu wollen ... schon mal in der c++ Referenz geblättert? Nimm den code von fr33g und schau dich bei http://www.cplusplus.com/reference/string/string/ um. Da findest du jede Menge String operations mit denen du den String zerpflückst wie es dir gefällt...



  • .. es ist immer wieder zu beobachten, dass ein Anfänger fragt:

    Stani schrieb:

    Jetzt will ich aus bestimmten Dateien Werte oder Texte in Variablen abspeichern.

    Leider weiß ich nicht wie man das Zeilen weise machen kann.

    das ist ok, er ist Anfänger, er weiß nicht, dass man Dateien nicht zwangsläufig zeilenweise lesen muss, im Allgemeinen auch nicht tut.

    Prompt vergehen dann nur 10Minuten und er wird nicht nur darin bestärkt, das so und nicht anders zu tun. Konsequenter weise mit dem Hinweis auf getline
    <Sarkasmus Ein>getline scheint auch die einzige Funktion zu sein, die im Kontext des Einlesens bekannt ist. Schlussendlich dann noch der Hinweis, wie man die Strings denn zerlegen kann - wobei er doch Zeilen wollte, also warum zerlegen - oder etwa nicht?<Sarkasmus Aus>

    Lieber Stani,

    wenn Du Werte und Texte aus einer Datei lesen möchtest, so bedenke, dass fstream von std::istream abgeleitet ist. Diese Klasse bietet einiges um Werte und Texte zu lesen. Insbesondere bietet istream für jeden eingebauten Typ wie int, double usw. einen Einlese-Operator.

    mal angenommen Deine Datei enthält

    Wort 4711
     3.125
    

    , so liest Du dies einfach mit

    ifstream file("test.dat");
        string wort;
        int i1;
        double d2;
        file >> wort >> i1 >> d2;
    

    und mit

    if( file )
    

    sagt es Dir, ob alles ohne Fehler eingelesen wurde, und die drei Werte gültig sind.

    Dabei spielt es keine Rolle, ob diese Daten in der Datei durch Leerzeichen, Tabulator, Zeilenende oder Kombinationen dieser Whitespace von einander getrennt sind.
    Versuch's mal auf diese Weise, und frage hier einfach konkret nach, falls es Probleme gibt.

    Gruß
    Werner


Anmelden zum Antworten