fstream - getline Problem
-
LordJaxom schrieb:
Du versuchst in eine konstante Variable etwas neues einzulesen. Fällt Dir beim Lesen dieses Satzes auf, was sich da beißt?

Nicht nur das...
an dem Namen der Funktion (streamwork::write_file) würde ich tippen das er schreiben will, getline dient aber dem einlesen...
cu André
-
asc schrieb:
LordJaxom schrieb:
Du versuchst in eine konstante Variable etwas neues einzulesen. Fällt Dir beim Lesen dieses Satzes auf, was sich da beißt?

Nicht nur das...
an dem Namen der Funktion (streamwork::write_file) würde ich tippen das er schreiben will, getline dient aber dem einlesen...
cu André
ios::out | ios::app implizieren das auch...
-
Also wenn ich dass richtig verstanden habe, kann man mit geline nur aus einer Datei AUSLESEN...und nicht in eine Datei etwas REINSCHREIBEN?
Somit:
getline(Objekt wo eine Zeile rausgelesen wird, Hier wird die rausgelesene Zeile dann gespeichert)Richtig?
Weil ich hab gedacht mit getline kann man auch etwas Zeilenweise in eine Datei reinschreiben.
MfG
Stromberg
-
Stromberg schrieb:
Also wenn ich dass richtig verstanden habe, kann man mit geline nur aus einer Datei AUSLESEN...und nicht in eine Datei etwas REINSCHREIBEN?
Was impliziert den der Name "getline" anderes? ;p
Stromberg schrieb:
Weil ich hab gedacht mit getline kann man auch etwas Zeilenweise in eine Datei reinschreiben.
Nein, hier kannst du aber einfach Streamoperationen nehmen...
m_file << line << std::endl;cu André
-
Wie mach ich das denn mit getline wenn ich nur zb. die zweite Zeile eines txt-Dokuments auslesen will?
alsochar engvok[200]; char gervok[200]; ifstream InFile; InFile.open(pszDATEI); if (!InFile) { cout << "Fehler beim Oeffnen der Datei!\n"; exit(1); } InFile >> engvok >> gervok; InFile.close();Der getline-Befehl muss ja anscheinend dem InFile >>... folgen, da dieser ja die erste Zeile ausliest. Wie muss denn dann der getline-Befehl für die zweite zeile lauten?
-
Ruf doch einfach zweimal getline auf. Dann hast du auch zwei Zeilen eingelesen. Die erste Zeile kannst du dann selber auseinander nehmen.
-
Hmm , irgendwie bekomm ich das net hin. Wie sage kann ich mir denn mit getline nur Zeile 3, zum Beispiel, auslesen lassen?
Hab bisher gut erklärte Lösung gefunden.
-
Wenn du bereits eine gut erklärte Lösung gefunden hast ist es ja ok.

Du kannst nicht nur die dritte Zeile einlesen. Du musst immer bis zur dritten Zeile einlesen (also 3mal getline).
-
Upps

Dann versuch ich das mal. Ich hoffe, ich hab keine Problem dabei.
Danke für die schnelle Antwort.
-
Hmm, ich habs zwar jetzt hinbekommen, dass mir verschieden Zeilen ausgelesen werden. Nur ist das bei einem txt-Dokument mit einer hohen Zeilenanzahl, sehr mühselig, für jede Zeile eine neue Variable zu definieren und auszulesen:
#include <iostream> #include <fstream> using namespace std; char engvok[256]; char gervok[256]; const char* const pszDATEI = "vok_db.txt"; int main() { string a,b,c,... ifstream InFile; InFile.open(pszDATEI); if (!InFile) { cout << "Fehler beim Oeffnen der Datei!\n"; exit(1); } getline(InFile, a); getline(InFile, b); getline(InFile, c); ... InFile.close(); cout<<a<<"\n"<<b<<"\n"<<c<<"\n"...; system("Pause"); }Gibt es da keine einfachere und elegantere Lösung als diese?
-
Wie wäres es mit einer Schlaufe + Array/std::vector?
-
Und wie würde das denn dann aussehen? Weil ich hab ehrlich gesagt keine Ahnung, wie ich das mit dem Array machen soll...
Mit der Schleife, das ist das kleinere Problem, denke ich.
-
Ein Array von strings?
std::string vokabels[1000]; // 1000 Vokabeln std::vector<std::string> vokabels2; // Dynamisches ArrayDu kannst dann ja ganz einfach auf die strings zugreifen.
for (int i = 0; i < 1000; i++) getline (InFile,vokabels[i]);So was in der Art.
-
Super! Danke

Auch gut, dass du das kommentiert hast. Jetzt gehts glaub ich auch wieder voran mit dem Programm.
-
Mit dem vector klappt das aber irgendwie nicht ganz, Der gibt mir den Fehler aus, dass vector nicht in dem Namensraum von std liegt...
Muss ich da noch etwas oben hinschreiben? Weil eigentlich verwende ich jausing namespace stdEdit: Habs jetzt, weiß was falsch war.
-
Na toll, hab schon wieder ein Problem, bei dem ich keine Lösung weiß...
Diesmal kommt folgende Fehlermeldung:
no match for 'operator<<' in 'std::cout << vokabels2'
Jedoch weiß ich nicht, was an folgendem Script falsch sein soll:std::string vokabels[1000]; std::vector<std::string> vokabels2; for (int i = 0; i < 1000; i++) { getline (InFile,vokabels[i]); } InFile.close(); system("cls"); cout <<vokabels2<<"\n";Sieht vielleicht irgendjemand den Fehler bei meinem Script?
-
Ich sehe da mehr als einen Fehler.
1. Du liest in vokabels ein willst aber vokabels2 ausgeben, welches gar nicht gefüllt ist. Was genau willst du eigentlich?
2.cout <<vokabels2<<"\n";Es existiert kein Ausgabeoperator für vector<string>. Das kannst du aber schön in einer Schleife machen (gibt noch mehr Möglichkeiten).
alsostd::vector<std::string> vokabels2; std::string tstr; for (int i = 0; i < 1000; i++) { getline (InFile,tstr); // in temporäre variable einlesen vokabels2.push_back(tstr); // in den vector kopieren } InFile.close(); // nicht zwingend nötig system("cls"); size_t size = vokabels2.size(); //Größe des vectors feststellen for( size_t i=0; i<size; ++i) cout << vokabels2[i] <<"\n"; // einzelne Elemente ausgeben
-
Danke für die Lösung. Man lernt ja bekanntlich immer dazu, und ich merke, dass das bei mir noch sehr viel ist, was ich zu lernen habe
.
-
Also so langsam frage ich mich, ob ich nicht einen einfachen Taschenrechner als Projekt(Schule) abgeben soll...
Irgendwie ist bei mir der Wurm drin. Mein neuestes Problem ist, dass die Zeilen zwar ausgelesen werden, aber direkt danach wieder verschwinden. D.h. ich seh für einen ganz kurzen Moment meine Liste, bevor sie wieder verschwindet...
Kann es daran legen, dass alles nur temporär gespeichert wird, und direkt danach wieder überschrieben bzw. gelöscht wird? Wenn ja, wie kann ich denn dann die Daten festhalten?
Hier mal das \1:#include <iostream> #include <fstream> #include <vector> using namespace std; char engvok[200]; char gervok[200]; const char* const pszDATEI = "vok_db.txt"; int main() { system("cls"); ifstream InFile; InFile.open(pszDATEI); if (!InFile) { cout << "Fehler beim Oeffnen der Datei!\n"; exit(1); } std::vector<std::string> vokabels2; // Dynamisches Array std::string tstr; for (int i = 0; i < 1000; i++) { getline (InFile,tstr); // in temporäre variable einlesen vokabels2.push_back(tstr); // in den vector kopieren } InFile.close(); system("cls"); size_t size = vokabels2.size(); // Größe des Vektors for(size_t i=0; i<size; ++i) cout <<vokabels2[i]<<"\n"; system("Pause"); }
-
Ich sehe da kein Fehler, ausser, dass du <string> inkludieren und das ganez NICHT Script nennen solltest.

Sag dem Programm, Quellcode, Code oder so, aber bitte nicht SCRIPT..