Problemen beim dateieinlesen



  • Hallo, ich muss eine TXT Datei einlesen. Doch leider enthält meine Datei wohl nur einen leeren String bzw das denkt mein Programm. Ich weiß leider echt nicht, was falsch ist. Ich hoffe ihr könnt helfen.
    Programmierung sieht wie folgt aus:

    Ifstream ifs(„Test.txt“, iOS::in);
    If(ifs.fail()) {cerr << „error“<<endl; Return 0;}
    While (!ifs.eof()){
    String s;
    Ifs >> s;
    Cout << s << endl;
    }

    Es geht hier nicht ums ausgeben. Ist erstmal nur zur Kontrolle. Muss nachher mit den Daten andere Sachen machen.
    Die txt Datei sieht so aus:
    #header

    @labels
    ...



  • Isainmexico schrieb:

    Programmierung sieht wie folgt aus:

    Ifstream ifs(„Test.txt“, iOS::in);
    If(ifs.fail()) {cerr << „error“<<endl; Return 0;}
    While (!ifs.eof()){
        String s;
        Ifs >> s;
        Cout << s << endl;
    }
    

    Hier ist das c++ Unterforum. Der Code ist kein c++ ...



  • Was denn?
    Ich programmiere doch grade in c++



  • keine Ahnung, was das ist, aber

    Ifstream
    If
    While
    

    gibt es nicht in c++.
    Und eine Sprache, in der eine Variable mal

    ifs
    

    und mal

    Ifs
    

    heißt, kenne ich auch nicht (oder sind das unterschiedliche Variablen?) 😕



  • Ok. Tut mir leid. Ich musste den Bwitrag leider mit meinem Handy verfassen, da mein Rechner aktuell noch nicht an das Internet angebunden ist. Weshalb manche Sachen vllt durch Autokorrektur verbessert wurden.



  • Es wäre trotzdem echt toll, wenn mir jemand helfen könnte. 😞



  • Okay, dann mal ungetestet:

    ifstream ifs(„Test.txt“);
    string s;
    while (ifs >> s)
      cout << s << endl;
    


  • Ok. Aber hast du da nicht eigentlich meinen Code nur etwas verkürzt?
    Also bei mir wird einmal s belegt mit nichts und dann ist endoffile.



  • Isainmexico schrieb:

    Ok. Aber hast du da nicht eigentlich meinen Code nur etwas verkürzt?

    Ja, der while(!eof) Fehler ist jetzt raus.

    Isainmexico schrieb:

    Also bei mir wird einmal s belegt mit nichts und dann ist endoffile.

    Genau das passiert, wenn man while(!eof) mit einer leeren Datei benutzt.



  • Aber die Datei ist ja eigentlich gar nicht leer.

    In der ersten Zeile steht
    #header

    Aber das steht zu keinem Zeitpunkt in meinem String.



  • Isainmexico schrieb:

    Aber die Datei ist ja eigentlich gar nicht leer.

    In der ersten Zeile steht
    #header

    Aber das steht zu keinem Zeitpunkt in meinem String.

    Das stimmt so nicht. Was genau daran nicht stimmt, kann man nicht sagen, du zeigst ja noch nicht einmal Originalcode. Benutze einen Debugger.



  • Ist die Datei denn im selben Verzeichnis wie das auszuführende Programm?



  • Ja die Datei ist im selben Verzeichnis.
    Ich habe das ganze schon mit dem debugger angesehen. Der String ist immer leer. Nachdem die Schleife einmal durchlaufen wurde, wird wegen eof abgebrochen.
    Die ifs Variable wird im debugger in viele Einzelteile aufgespalten wo ich jetzt nicht genau weiß was ich überprüfen muss.

    Den Code habe ich so 1:1 abgeschrieben. Kann gerne nochmal den Code mit richtiger Groß und Kleinschreibung Posten, wenn das hier zu Problemen führt.



  • Isainmexico schrieb:

    Den Code habe ich so 1:1 abgeschrieben.

    Vielleicht

    Isainmexico schrieb:

    Kann gerne nochmal den Code mit richtiger Groß und Kleinschreibung Posten, wenn das hier zu Problemen führt.

    Wenn er nicht kopiert ist, ist das witzlos.


  • Mod

    Benutz nicht deinen Code, sondern den von Belli. Guck damit im Debugger, ob die Schleife überhaupt betreten wird. Deine Interpretation

    Isainmexico schrieb:

    wird wegen eof abgebrochen.

    ist fast mit Sicherheit falsch. Das sieht vielleicht bei dir so aus, weil bei dir die Leselogik schlicht falsch ist, aber bei Bellis korrekter Logik würdest du sehen, ob überhaupt etwas aus der Datei gelesen wurde. Die wahrscheinlichste Ursache ist nämlich immer noch, dass die Datei gar nicht geöffnet werden konnte. Du kannst dir auch einmal direkt nach dem Öffnen, vor der Leseschleife, ifs.is_open() und/oder ifs.good() ausgeben lassen. Beide müssen wahr sein.



  • Ich habe mit direkt nach dem öffnen if (fail) ausgeben lassen. Das war immer falsch.



  • Aber ich werde es gleich mal mit dem anderen Code versuchen und melde mich dann nochmal. Schonmal vielen Dank. Ich werde auch versuchen das Verzeichnis noch direkt mit einzufügen.



  • So ich habe den Code jetzt wie hier beschrieben geändert.
    Der Debugger zeigt, dass die while schleife diesmal nicht einmal betreten wird.

    #include <fstream>
    #include <iostream>
    using namespace std;
    
    int main(int argc, char** argv) {
        cout << "-----------Programm wird gestartet-----------------" << endl;
        ifstream ifs("test.txt");
        if (!ifs.is_open()) {cerr << "error: Fehler beim Öffnen von test.txt" << endl; return 0;};
        string s;
        while (ifs >> s){
            cout << s << endl;
        }
        ifs.close();
        return 0;
    }
    

  • Mod

    Aber es wird nicht die Meldung bezüglich fehlerhaften Öffnens ausgegeben? Dann ist die Datei leer.



  • Vielleicht solltest du mal alle test.txt Dateien auf deinem Computer suchen.


Anmelden zum Antworten