Hallo,
ich habe eine kleine Klasse, welche eine Datei öffnet und mit der
Funktion GetNext, die nächste Zeile lesen soll.
Das klappt auch so weit, aber die Funktion liest immer einmal zu viel,
daher:
Eingabedatei(infile.dat):
zeile1 zeile2 zeile3
Programmausgabe:
-GetNext true Count:1 zeile1 -GetNext true Count:2 zeile2 -GetNext true Count:3 zeile3 -GetNext true Count:4 -GetNext false
Und hier die Klasse:
#ifndef READFILEASLINE_H #define READFILEASLINE_H #include <iostream> #include <fstream> #include <string> using namespace std; class ReadFileAsLine { public: ReadFileAsLine(string fileName); virtual ~ReadFileAsLine(); bool GetNext(); bool FileEOF; string Buffer; protected: private: ifstream inputFile; string buffer; }; #endif // READFILEASLINE_H ----------------------------------------------- #include "readfileasline.h" ReadFileAsLine::ReadFileAsLine(string fileName) { //ctor FileEOF = false; try { inputFile.open(fileName.c_str(), ifstream::in); } catch (exception e) { cout << "error open file: " << fileName << endl; } } ReadFileAsLine::~ReadFileAsLine() { //dtor } bool ReadFileAsLine::GetNext() { if (!inputFile.eof()) { getline(inputFile, buffer); Buffer = buffer; cout << "-GetNext true" << endl; return true; } else { FileEOF = true; cout << "-GetNext false" << endl; return false; } } ------------------------------------------------------- #include <iostream> #include <fstream> #include "./readfileasline.h" using namespace std; int main (int argc, char *argv[]) { ReadFileAsLine *rf = new ReadFileAsLine("./infile.dat"); int c = 0; while (rf->GetNext()) { c++; cout << "Count:" << c << " " << rf->Buffer << endl; } return 0; }
Was mache ich falsch?
Danke und Gruüße FS.