zeilen zerlegen und in extra arrays speichern klappt nicht :-(
-
Hallo leutz,
In den einzelnen Zeilen stehen immer Werte nach dem Muster: Name,Wert1,Wert2
Nun möchte ich dass jeweils alle Namen in ein Array gespeichert werden. Alle Wert1 in ein extra array und alle Wert2 in ein extra array.
Separator=Komma.
Mein bisheriges Programm:#include <iostream> #include <fstream> using namespace std; int main() { int n=0; int index=0; int i=0; char name[50]; string str; const char sep = ','; cout << "Welcher Name hat die zu oeffnende Datei?" << endl; cin >> name; ifstream dat(name); fstream datei(name, ios::in); if(!dat) { cerr << "Die Datei '" << name << "' existiert nicht." << endl; system("Pause"); return EXIT_FAILURE; } while ( !datei.eof() ) { getline(datei, str); n++; //nach jedem Durchlauf wird der Zähler n erhöht. Er gibt die Anzahl der Zeilen an. } char wertx[n]; float werty[n]; float wertz[n]; float wert_y, wert_z; char wert_x; for(index = 0; dat >> wert_x >> sep >> wert_y >> sep >> wert_z; ++index) { wertx[index] = wert_x; werty[index] = wert_y; wertz[index] = wert_z; } system("PAUSE"); return 0; }Tut aber nicht....
bin am verzweifeln...
-
frage_gern schrieb:
...Tut aber nicht....
Kein Wunder - hat ja auch keine Tute.
Gruß,
Simon2.
-
while ( !datei.eof() ) { getline(datei, str); n++; //nach jedem Durchlauf wird der Zähler n erhöht. Er gibt die Anzahl der Zeilen an. }was soll das bringen alle zeilen in eine variable zu stecken?
-
damit zähle ich doch nur die zeilen!!
um dann mein array dementsprechend groß zu machen
ich krieg die zeilen einfach nicht in drei teile getrennthelp
-
Also wenn die Zeilen in Deiner Datei zB.so aussehen:
otto, 12.786, 456.77
gustav , 34.22, 22.99kannst Du es so schreiben:
#include <iostream> #include <string> #include <fstream> using namespace std; int main() { int n = 0; char name[50]; cout << "Welcher Name hat die zu oeffnende Datei?" << endl; cin >> name; ifstream datei(name); if(!datei) { cerr << "Die Datei '" << name << "' existiert nicht." << endl; system("Pause"); return EXIT_FAILURE; } while (!datei.eof() ) { char buf[256]; datei.getline(buf, 256); n++; //nach jeder Zeile wird der Zähler n erhöht. Er gibt die Anzahl der Zeilen an. } datei.close(); ifstream dat(name); string* wertx = new string[n]; float* werty = new float[n]; float* wertz = new float[n]; for(int i = 0; i < n; i++) { char tmp; dat >> wertx[i]; if (wertx[i].c_str()[wertx[i].size()-1] == ',') wertx[i].resize(wertx[i].size()-1); else dat >> tmp; dat >> werty[i] >> tmp >> wertz[i]; } system("PAUSE"); delete [] wertx; delete [] werty; delete [] wertz; return 0; }mfg

-
Meine Daten liegen allerdings so vor: (ohne leerzeichen nach den kommas)
hans,21.148,19.88
franz,50.777185,6.45
klaus,15.6,7.8
seth,156.489,15.9
ali,196.5,178.99
josef,14587.198,984.66
haha,1958.247,6.177
karl,19785.494,147.65dann funktioniert das nicht

-
frage_gern schrieb:
Meine Daten liegen allerdings so vor: (ohne leerzeichen nach den kommas)
hans,21.148,19.88
franz,50.777185,6.45
klaus,15.6,7.8
seth,156.489,15.9
ali,196.5,178.99
josef,14587.198,984.66
haha,1958.247,6.177
karl,19785.494,147.65dann funktioniert das nicht

Dann inkludiere oben
#include <sstream>
und schreibe die for-Schleife zB. so;
for(int i = 0; i < n; i++) { char buf[256]; dat.getline(buf, 256); for (int j = 0; buf[j]; j++) if (buf[j] == ',') buf[j] = ' '; istringstream istr(buf); istr >> wertx[i] >> werty[i] >> wertz[i]; }Hoffe es klappt jetzt!

-
man muss nix können, es gibt schon nen dummen der deine arbeit macht
-
balduin,
du bist der beste!
VIELEN DANK
so läufts perfekt!!!

THANKS!