fstream Prob. mit Datei in Array lesen !
-
Hi,
ich möchte mit der fstream Klasse eine Datei öffnen, deren ZeilenZahl bestimmen, und den Inhalt in ein Array lesen.
ifstream f; string sRead; int len = 0; f.open("TestGdt.txt",ios::in); while(!f.eof()) { getline(f,sRead); len++; } arrText = new string[len]; arrClean = new string[len]; arrRelease = new string[len]; while(i < len) { getline(f, sRead); arrText[i] = sRead; i++; } f.close(); cout << arrText[1] << endl;Die Länge zu bestimmen ist kein Problem aber mein Array arrText bleibt leen !!!

Woran liegt das ich find einfach den Fehler nicht !
Danke für eure Mühe
ShadowEater
-
Du mußt den Lesezeiger ja auch wieder zurück setzen, wenn du am Ende der Datei angekommen bist:
f.seekg(0);P.S: Die Abfrage auf eof ist nicht so gut, da es auch noch andere Fehlerfälle beim Lesen geben kann.
Ich hatte dies vor kurzem in einem anderen Thread erklärt: http://www.c-plusplus.net/forum/viewtopic-var-t-is-201501-and-start-is-0.htmlUnd zweitens: du solltest lieber std::vectorstd::string> verwenden, dann kannst du nämlich sofort die Daten schon einlesen (da sich der vector selbst dynamisch vergrößert und nach dem Einlesen weißt du mittels vector::size() die Größe).
-
Naja wenn du es wirklich so machen willst, was ich jetzt einfach mal bezweifel:
std::ifstream file_stream("Test.txt"); if (!file_stream) return false; std::size_t line_count(0); std::string tmp; while (std::getline(file_stream, tmp)) ++line_count; std::string* ptr_arr(new std::string[line_count]); file_stream.seekg(0, std::ios_base::beg); line_count = 0; while (std::getline(file_stream, tmp)) ptr_arr[line_count++] = tmp; // delete [] ptr_arr;. Und sonst einfach:
std::ifstream file_stream("Test.txt"); if (!file_stream) return false; std::vector<std::string> data; std::string tmp; while (std::getline(file_stream, tmp)) data.push_back(tmp);
-
Hi Th,
ja den vektor werd ich mir angewöhnen.
Aberf.tellg(0);führt zu der Fehlermeldung dass kein Parameter akzeptiert wird und wenn ich den weglasse führts zu überhaupt nichts !

weist Dt oder sonstjemand trotzdem Rat ...?
Danke schonmal
ShadowEater
-
Ließ einfach was ich geschrieben habe ... es muss seekg sein (tellg sagt dir wo du bist
) mit 0 von begin (std::ios_base::beg) ...
-
Hi (D)Evil,
den vektor werd ich morgen ansehen, wo soll ich in diesem Code das seekg einsetzen, es führt einfach nicht zum gewünschten Erfolg:
ifstream f; string sRead; int len = 0; f.open("TestText.txt",ios::in); while(!f.eof()) { getline(f,sRead); len++; } f.close(); // cout << len << endl; arrGdt = new string[len]; arrClean = new string[len]; arrRelease = new string[len]; f.open("TestText.txt",ios::in); f.seekg(0, std::ios_base::beg); while(i < len) { getline(f, sRead); arrText[i] = sRead; i++; } f.close(); cout << arrText[1] << endl;Danke für Deine Mühe
ShadowEater
-
Sorry, hatte erst tellg() statt seekg() geschrieben.
Laß das Schließen und Neuöffnen mal weg und benutze dann nur seekg() vor der zweiten Schleife.
Evtl. mußt du auch noch "f.clear()" aufrufen, um die Statusflags zurückzusetzen (da nach der ersten Schleife eof gesetzt ist).
-
Ehm und vor allen wo legst du bitte deinen Speicher von arrText an?
-
Danke,
das clear brachte den Erfolg !!!

Danke nochmal
ShadowEater