ifstream auslesen erste Zeile fehlt
-
Guten Abend,
habe eine Problem mit meinem ifstream,
beim auslesen fehlt die erste Zeilestd::ifstream datei(infi); std::string text[100]; int i; if( !datei ) { throw "Fehler beim Öffnen!"; } datei.seekg(0, std::ios::beg); while(!datei.eof()) { std::cout << "in der schleife "; std::getline(datei,s); for (i=0;i<10;i++) { datei >> text[i] ;// Eine Zeile in die Variable text einlesen std::cout << text[i] << "\t\n" ; } } datei.close();beim auslesen bleibt die erste Zeile verschwunden aus der Datei ,
aber sie steht in der der Datei , kann mir jemand sagen wieso ?
oder sagen was ich ändern muss damit ich auch die erste Zeile bekomme ?gruß
central
-
Was machst Du denn da? Lies bitte mal den passenden FAQ-Eintrag!
Da das außerdem ein Standard-C++-Problem ist, verschiebe ich Dich mal.
-
Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix 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.
-
Hallo,
Was machst Du denn da? Lies bitte mal den passenden FAQ-Eintrag!
ok also dann erkläre ich das mal
std::cout << "in der schleife "; // ist um zu schauen ob ich in der schleife bin :)for (i=0;i<10;i++) { datei >> text[i] ;// Eine Variable in mein Array text einlesen nach tabulator getrennt das heist nach jeder Leerzeile eine Variable // std::cout << text[i] << "\t\n" ; // zum testen die Variable ausgeben später hier nach Bedingung prüfen }soweit funktioniert das auch nur halt das ich die ersate Zeile nicht bekomme.
Also würde ich mich freuen wenn mir jemand sagen könnte warum das so ist ?gruß
central
-
central schrieb:
Also würde ich mich freuen wenn mir jemand sagen könnte warum das so ist ?
Da ist das getline zuviel

Lass mal auch das seekg weg. Das ist unnötig.
Und denk daran das die über die Array grenzen geschrieben werden kann....
-
Dankeschön,
Ich dachte ich brauche das getline um Zeilenweise zu lesen,
aber das war wohl ein Irrtum.Das seekg hatte ich eingefügt nachdem ich ja nicht die erste Zeile bekam.
Aber nun klappt das ja alles wie verrückt

gruß
central
-
Benutz das getline in der innter Schleife statt den >> .
-
Danke Freak_Coder,
aber so wie es jetzt ist, klappt das ,
wenn ich es mit getline versuche, bekomme ich als fehler das
text[i] nicht als funktion verwendet werden kann .gruß
central
-
Was willst du wo als Funktion verwenden?
Richtig sieht der Aufruf so aus:
std::getline(datei,text[i]);PS: getline() liest eine komplette Zeile, op>> liest nur bis zum nächsten Whitespace. Weitere Informationen findest du im Magazin
PPS: Übrigens solltest du statt des Arrays einen vector<> oder deque<> verwenden - die können mitwachsen.
-
Wie wäre es denn mit:
std::vector<std::string> text; { std::ifstream datei(infi); if( !datei ) throw std::runtime_error("Fehler beim Öffnen!"); // Datei lesen std::string s; while(std::getline(datei,s)) text.push_back(s); // Datei ausgeben for (std::vector<std::string>::const_iterator it = text.begin(); it != text.end(); ++it) std::cout << *it; } // close wird vom Destruktor erledigt
-
Guten Abend ,
komme leider nur Nacht's zum arbeiten
Also ich habe das jetzt soint ReadLddTxt( const char *infi) { std::ifstream datei(infi); std::string text[100]; // mehr als doppelt soviel wie ich brauche int i; char * slash1; if( !datei ) { throw "Fehler beim Öffnen!"; } while(!datei.eof()) { for (i=0;i<10;i++) // es stehen max 5 Variablen in eine Reihe aber man weiß ja nie { datei >> text[i] ;// Eine Variable in text[i] einlesen if((slash1=strchr(text[i].c_str(),'/'))) //überprüfen auf / { std::cout << text[i] << "\t\n" ; Copy(((char *)text[i].c_str())); // Copy erwartet char } } } datei.close(); return 0; }so klappt das wunderbar
werde aber mal den code von tntnet probieren sieht schön sauber aus
Besten Dank dafür
gruß
central