char aufteilein und listen
-
Hallo,
ich versuche derzeit aus einer liste mit 600 schülern:
vorname;nachname;3;4;1;
einzelne Zeilen auszulesen.
Das ist mir ebreits gelungen:char ch[255]; while (fin.getline(ch,255)) { cout << ch << "\n"; }
nun weiss ich aber nicht, wie ich diesen char aufteile (immer beim semikolon) und wie ich dann 600 dieser reihen auf einmal im programm verfügbar habe.
hoffe ihr könnt mir helfen,
sun
-
am einfachsten ist es, wenn du mit der klasse string arbeitest :), denn die klasse string bietet eine doch angenehme vielzahl von möglichkeiten, diese operationen, die du benötigst, zu nutzen
1. lies in einen string ein
2. die klasse string bietet die methode find() zum finden eines zeichens
3. mit der methode substr() kannst du dann die einzelnen felder auslesen
4. und um die datensätze dann noch zu speichern, baust du einen vector, oder ähnliches...so würde ich rangehen
mfg
-
Bei allem Respekt vor der String-Klasse, aber mit find würd ich da nicht arbeiten:
char line [255]; // den bezeichner ch verwendet man normalerweise nur für *ein* zeichen while (fin.getline(line,255)) { char vorname [16]; char nachname [16]; int wert1, wert2, wert3; sprintf(line,"%s;%s;%d;%d;%d",vorname,nachname,&wert1,&wert2,&wert3); }
MfG SideWinder
-
ich hab das grad ma probiert, und das geht, vorraussetzung ist, dass die datei test.txt genau nach deinen vorgaben aufgebaut ist, also mit semikolon getrennt
#include <string> #include <fstream> #include <iostream> #include <vector> using namespace std; struct Datensatz { string vorname,nachname; int eins,zwei,drei; Datensatz(string v,string n,int a,int b,int c):vorname(v),nachname(v),eins(a),zwei(b),drei(c){} }; ostream&operator<<(ostream&os,Datensatz a) { os << a.vorname << ' ' << a.nachname << ' ' << a.eins << ' ' << a.zwei << ' ' << a.drei; return os; } typedef vector<Datensatz > Liste; int main() { string line; string vn,nn; //vorname, nachname int a,b,c; //die drei zahlen int tmp=0; ifstream ein("test.txt"); Liste liste; //einlesen der datei while(ein>>line) { vn=line.substr(0,tmp=line.find(';')); //vorname line=line.substr(++tmp,line.size()); nn=line.substr(0,tmp=line.find(';')); //nachname line=line.substr(++tmp,line.size()); a=atoi(line.substr(0,tmp=line.find(';')).c_str()); //erste zahl line=line.substr(++tmp,line.size()); b=atoi(line.substr(0,tmp=line.find(';')).c_str()); //zweite zahl line=line.substr(++tmp,line.size()); c=atoi(line.c_str()); //dritte zahl liste.push_back(Datensatz(vn,nn,a,b,c)); //in vector speichern } //ausgabe der datei for(Liste::iterator it=liste.begin();it<liste.end();++it) { cout << *it << endl; } return 0; }
...jaja, es gibt noch andere möglichkeiten, ist aber eine lösung
...hehe, und doch mit stringsmfg