Zeile aus Datei lesen?
-
Guten Tag,
ich sitze jetzt schon seit geraumer Zeit
an einem Code, welcher eine Zeile aus einer TXT-Datei
auslesen soll.Aber ich bekomme es einfach nicht hin.
Ich habe eine Datei namen.txt:
Erwin Gustav Johannes Lars Igor Stefan Thomas ...Ich habe es schon hinbekommen, dass er alles bis zu einer
bestimmten Zeile ausliest.Aber ich möchte ja nur die eine bestimmte Zeile auslesen
und nicht alle.Hier mein Code:
ifstream read("namen.txt"); ofstream write("ausgabe.txt"); string a; srand(time(NULL)); int gen = (rand() % 10) + 1; for(int i = 1; i <= gen; i++) { getline (read, a); write << a << endl; } write.close(); read.close();Es soll nur diese eine Zeile (und nicht alle bis dieser) in die Datei
ausgabe.txt geschrieben werden.Könnte mir vllt. jemand helfen?
greetz
Doug
-
for(int i = 1; i <= gen; i++) // Stattdessen besser: for(int i = 1; i < gen; ++i) { getline (read, a); // ignore them } getline(read, a); // the important line write << a << endl;MfG SideWinder
-
Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Guten Tag,
vielen danke

Funktioniert erstklassig.
Könntest du den Code vllt. ein wenig
erläutern?greetz
Doug
-
Es liest zuerst mit Hilfe einer for-Schleife alle Zeilen bis zur gen-ten Zeile aus und ignoriert sie. Jetzt steht der Dateizeiger an der richtigen Position und der nächste getline()-Aufruf liest nun die gewünschte Zeile aus.
MfG SideWinder
-
hmm fast SideWinder
du gehst mit deinem "besser" eine Zeile zu wenig durch ...#include <string> #include <fstream> #include <cstdlib> #include <ctime> // Beim Programmstart folgendes aufrufen: std::srand(std::time(NULL)); // EDIT: Hatte eine Klammer vergessen! bool read_write_rand_line(const std::string& file_in, const std::string& file_out) { std::fstream file_stream(file_in.c_str(), std::ios::in); if (!file_stream) return false; std::size_t rand_line = ++(std::rand() % 10); std::string line_in; for (std::size_t scip_line = 0; scip_line <= rand_line; ++scip_line) std::getline(file_stream, line_in); // der letzte Aufruf ist für uns entscheidend ... dann steht der String drin :) file_stream.close(); file_stream.open(file_out.c_str(), std::ios::out); if (!file_stream) return false; file_stream << line_in << std::endl; file_stream.close(); return true; }... so in etwa ... musst nur gucken das die Zeilen auch da sind ...
Edit
Zu spät ... aber das ist ne vollständige Lösung
-
Glaube ich ehrlich gesagt nicht, ich lese aus Schönheitsgründen nach der for-Schleife nochmal extra mit mit getline() ein und verwende nicht den letzten Aufruf der for-Schleife als Ergebnis.
BTW: Beim Veranschaulichen kick doch die ganzen Namespaces, die verwirren den Benutzer doch nur.
MfG SideWinder
-
In den Bedingungen eurer for-Schleifen solltet ihr lieber den Stream noch auf Gültigkeit prüfen. ( eof )
Wir wollen ja nicht das was böses passiert
