std::getline arbeitet nur 1 mal!



  • Hallo,

    wenn ich die Funktion getline zwei mal hinter einander nutzten möchte, wird der zweite Aufruf ignoriert. Bsp:

    string l_str;
    ifstream m_file_read;
    
    m_file_read.open("test.csv", ios::in);
    
    while (getline(m_file_read, l_str)){
           cout << "bla";
    }
    
    while (getline(m_file_read, l_str)){
           cout << "bla";
    }
    

    Ich kann mit einem Haltepunkt in der zweiten while-Schleife sehen, dass diese gar nicht aufgerufen wird. Wie man sieht, nutze ich namespace std.
    Woher kommt dieses?

    Gruß Moritz



  • der delimitor ist noch im buffer



  • asdfsdfs schrieb:

    der delimitor ist noch im buffer

    😕

    Die erste Schleife ließt doch schon alles aus der Datei. Was soll die zweite Schleife noch lesen?



  • @asdfsdfs: aha, das heißt ich muss ihn anweisen, dass der stream vergisst, dass er den delim schon gelesen hat. na das werde ich sicher in einer dokumentation finden, wie das geht. aber falls du es weißt, darfst du es mir auch gerne verraten 😉

    Danke

    @out: naja offensichtlich will ich nicht nur mit "bla" abzählen, wie viele Zeilen meine Datei hat! Das da etwas anderes drin steht, versteht sich doch!



  • @asdfsdfs: ich habe jetzt auf die schnelle nichts gefunden, dass kann ja eigentlich nicht sein! mir kommt nun nur in den Sinn es mit file.close() zu machen und den dann file.open(filename, ios::in). Ist das so?



  • m.f-g schrieb:

    @out: naja offensichtlich will ich nicht nur mit "bla" abzählen, wie viele Zeilen meine Datei hat! Das da etwas anderes drin steht, versteht sich doch!

    Was spielt es für eine Rolle. was du willst? Dateiende ist Dateiende.



  • asdfsdfs schrieb:

    der delimitor ist noch im buffer

    Nein



  • also im ersten Durchlauf muss ich einmal durch die gesamte Datei durch um den max Wert zu finden, im Zweiten lese ich alle Zeilen ein und es werden nur die Kopiert, die mind. 90% des Maxwertes groß sind(Regelungstechnik). Dafür muss ich ein mal durch und dann noch mal durch.

    Und was ist nun die Wahrheit des delim im Buffer?



  • m.f-g schrieb:

    also im ersten Durchlauf muss ich einmal durch die gesamte Datei durch um den max Wert zu finden, im Zweiten lese ich alle Zeilen ein und es werden nur die Kopiert, die mind. 90% des Maxwertes groß sind(Regelungstechnik). Dafür muss ich ein mal durch und dann noch mal durch.

    Das ist nun offensichtlich etwas anderes als zwei mal getline aufrufen. Mit seekg kann man wieder auf den Dateianfang positionieren. Da du eof erreicht hast, musst du vorher den Zustand mit clear zurücksetzen.


Anmelden zum Antworten