Datei einlesen und ausgeben
-
Ich würde das eher so schreiben:
#include <fstream> #include <vector> using namespace std; int main() { vector<double> Zahlen; double tmp; ifstream file("Beispiel.txt"); while (!file.eof()) { file >> tmp >> ';'; Zahlen.push_back(tmp); } }
-
ok... also heißt das jetzt so viel:
1. Vector = Dyn. Array?
file >> tmp >> ';';
löscht mir das ; von der dementsprechende Zahl und speichert diese in tmp?
Zahlen.push_back(tmp);
schreibt tmp in das dynamische Array wobei der index immer um 1 erhöht wird?
vielen Dank!
-
B1ND3R schrieb:
ok... also heißt das jetzt so viel:
1. Vector = Dyn. Array?
file >> tmp >> ';';
löscht mir das ; von der dementsprechende Zahl und speichert diese in tmp?
Zahlen.push_back(tmp);
schreibt tmp in das dynamische Array wobei der index immer um 1 erhöht wird?
vielen Dank!
1. Korrekt, man kann auch beim Konstruktor die Größe angeben: vector<double> Zahlen(100);
2. Liest eine Zahl in tmp und dann ein Semikolon. Das Semikolon wird in keine Variable geschrieben.
3. Vergrößert das Array um 1 und schreibt dann tmp ans Ende.
-
Super dank dir! GLeich mal ausprobieren
-
also habe jetzt mal den Kram implementiert. Bei der einlese-Funktion kommt folgender Fehler:
http://www.imagebanana.com/img/6uctkmwn/thumb/Unbenannt.JPGsowie beim close: "statement kann die Adresse der überladenen Funktion nicht ausführen".
Habe folgendes insg. included:
- iostream
- fstream
- vector
- stdio
- stringund dazu halt namespace std.
Nur wenn ich diesen namespace std. wieder lösche bekomme ich einen fehler bei "ifstream quelle" und zwar: "ifstream wurde in diesem Gültigkeitsbereich nicht definiert" und "expected ';' before quelle" und dann bekomme ich noch einen fehler bei "quelle.open(datei) und zwar: "quelle wurde in diesem Gültigkeitsbereich nicht definiert"
nochmals danke für die hilfe
-
cin >> tmp >> ':';
Das
>> ':'
ist Quatsch. Was soll das machen? Ich kann dir nicht einmal sagen, was richtig wäre, weil ich nicht begreife, warum du das dort überhaupt hingeschrieben hast.
-
Oh, Sorry, ich dachte, das ginge so wie bei scanf:
fscanf(datei, "%f;", Zahl);
Dann würde ich es so schreiben: (diesmal auch getestet)
#include <fstream> #include <vector> #include <iostream> #include <cstdio> using namespace std; int main() { vector<double> Zahlen; double tmp; char ch; ifstream file("Beispiel.txt"); while (!file.eof()) { file >> tmp >> ch; if(ch != ';') cout << "Fehlerhaftes Dateiformat"; Zahlen.push_back(tmp); } }
-
ja das hilft danke
eine Frage habe ich noch. Und zwar, habe ich ja eine Schleife, wo ich 21 Datein in ein großes Array speichern will - Problem ist nur er ließt immer die gleiche Datei ein, obwohl ich den Dateinname dementsprechend ändere.
Muss ich eine Datei auch wieder schließen wenn ich diese geöffnet habe - logischerweise ja, nur wenn ich das mache, siehe Bild: http://www.imagebanana.com/view/6uctkmwn/Unbenannt.JPG
dann bekomme ich ein: "statement kann die Adresse der überlaufenden Funktion nicht auflösen".
kann mir einer noch helfen bei dem "letzten" Prob
-
Du hast bei close die () vergessen.
Was heißt dementsprechend ändern? Rufst du immer die open()-Methode der Datei auf mit dem neuen Dateinamen?
-
Ja ich rufe in der schleife die open funktion immer wieder auf, nur mit anderen Dateinamen.
So fehler gefunden. Lag daran, dass ich vergessen habe, dass "push_back" bis ins "unendliche" zählt, ich aber immer wieder nur auf den anfang zugegriffen habe.
Also vielen Dank, allen die mir geholfen haben