fstream - Problem
-
Momentan ist mein test - stream nur ein Pointer auf meinen
f - stream. Wie kann ich zwei streams unabhängig voneinander
durch eine Datei laufen lassen?#include <iostream> #include <fstream> using namespace std; int main() { fstream f; fstream *p_test; p_test = &f; f.open("test.txt", ios::in); if(!f.is_open()) cout << "Error" << endl; string s_test; string s_wort; while(!f.eof()){ f >> s_wort; *p_test >> s_test; cout << s_wort << endl; cout << s_test << endl; } cin.sync(); cin.get(); return 0; }test.txt Inhalt:
aaaa bbbb cccc ddddAusgabe:
aaaa bbbb cccc dddderwünschte Ausgabe:
aaaa aaaa bbbb bbbb cccc cccc dddd dddd
-
einfach indem Du zweimal lesend darauf zugreifst, jeweils mit einem ifstream - sähe so aus:
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { ifstream f1("test.txt"); ifstream f2("test.txt"); // ein zweites Mal zum Lesen öffnen if( !f1.is_open() || !f2.is_open() ) cout << "Error" << endl; string s_test; string s_wort; while( (f1 >> s_wort) && (f2 >> s_test) ){ cout << s_wort << endl; cout << s_test << endl; } cin.get(); return 0; }Gruß
Werner
-
vielen Dank für deine schnelle Hilfe

Gibt es denn auch eine Lösung bei der ich die
Datei nicht zweimal öffnen muss?
-
Du könntest dir die jeweiligen Dateioffsets merken und immer hin- und herspringen. Da finde ich die Lösung mit zwei streams aber deutlich eleganter.
-
Na ja - kommt drauf an, was Du genau vor hast. Du kannst die Datei auch einmal öffnen und dann an zwei Stellen mit tellg() und seekg() den Lesezeiger verwalten - ist aber sicher umständlicher.
Gruß
Werner
-
Alternativ kannst du auch den kompletten Dateiinhalt in einen geeigneten Container stecken und darauf herumlaufen. Spart wiederkehrende, langsame Leseaufrufe auf der Datei. Kostet dafür etwas Speicher, aber wenn die Dateigröße nicht grade in die hunderte MB geht oder du im Normalfall nicht auf die ganze Datei zugreifst, ist das die komfortablere Methode.
-
ok danke noch mal an alle

btw: @Werner
dein Quellcode gefällt mir,
muss ich mir mal eine Scheibe von abschneiden