Datei einlesen - (un)bekannte Anzahl von Werten in einer Zeile
-
Hallo, ich möchte eine Datei einlesen, die folgendermaßen aufgebaut ist:
{Anzahl Werte} {Wert[0]} {Wert[1]} {Wert[2]} ... {Wert[n]}
Also konkret:
4 3247 3248 3249 3250 7 3253 3239 3197 3179 3178 3252 3251 7 3254 3252 3178 3174 3200 3237 3242 3 3251 3252 3254 6 3254 3242 3243 3255 3253 3251 6 3256 3249 3248 3216 3217 3246 4 3257 3250 3249 3256 6 3258 3259 3241 3202 3199 3207 11 3187 3186 3219 3220 3247 3250 3257 3260 3259 3258 3213
Wobei der erste Wert immer die Anzahl der Werte in der entsprechenden Zeile angibt.
Hat da jemand eine Idee, wie ich das schnell und einfach machen kann?
in perl würde es so gehen:
$line = @datei[5]; @werte = split(" ", $line)
...
Also, wer mir sagen kann, wie ich jede Zeile als String einlese (cin, nicht fscanf) und diese Zeile dann nach Leerzeichen in ein Array brösel hat mir geholfen
Gruss, Jochen
-
#include <string> #include <fstream> #include <vector> using namespace std; int main() { ifstream fin("deinedatei.txt"); vector<string> inhalt; for(string line; getline(fin, line); ) { inhalt.push_back(line); } return 0; }
So kann man eine Datei schnell und einfach einlesen. vector verhält sich im Zugriff wie ein Array (also inhalt[pos]).
Jetzt noch ein paar Tipps wie du das ganze splitten kannst:
string::find()
string::substr()
je nach dem auch
string::erase()
-
#include <vector> #include <fstream> int main() { std::vector<std::vector<int> > matrix; std::ifstream is("..."); size_t vectorSize; for(size_t vectorNum = 0; is; ++vectorNum) { //read vector size is >> vectorSize; if(!is) break; //reserve memory for vector in matrix matrix.resize(vectorNum + 1); //reserver memory for inner vector matrix[vectorNum].resize(vectorSize); //read inner vector for(size_t i = 0; i < vectorSize; ++i && is) { is >> matrix[vectorNum][i]; } } }
-
ssm schrieb:
#include <vector> #include <fstream> . . .
Hey, danke, ist genau das was ich gesucht hab!
-
wäre es nicht einfacher die Zahlen einzeln
einzulesen?
Sind doch mit Tabs getrennt
-
Genau das hat ssm auch in seinem Code gemacht.
Meiner war nur ein Vorschlag wie man es machen könnte.