string 2 float mit stream
-
Ich habe eine Datei, die ich einlesen möchte und habe mir gedacht, das per stream zu realisieren. Nun stehe ich vor folgendem Problem:
Die Datei besteht pro Zeile aus 8 float-Werten à la 0.65748E-03, die mit Leerzeichen getrennt sind. Ich lese eine gesamte Zeile als String ein. Wie bekomme ich die einzelnen floats aus dem String "rausgestreamt"?ifstream file; float f0, f1, f2, f3, f4, f5, f6, f7; ... file.open(m_sLoadedFile); ... std::string S; S.reserve(1024); ... getline(file,S); ... S >> f0 >> f1; //...und so weiter. Geht nicht, da keine Konvertierung möglich!
Jemand einen Ansatz, wie ich das konvertiert bekomme?
zwette
-
Jemand ne Ahnung, was das mit der MFC zu tun hat?
Ich nicht, deswegen verschoben!
-
Hm, du müsstest trenn zeichen in die Datei einbauen, oder die
Datei Binär speicher und auslesen.Devil
-
Hi
Du kannst mit
char *strtok(char *string,const char *trennzeichen)
die Zeile zerstückeln!(Leerzeichen gelten auch als Trennzeichen!)
Die umwandlung von einem String zu float kenn ich nur mit dem BCB (StrToFloat (aber mit AnsiString)) in C gibt es da noch atof aber das gibt nur double zurück !Vielleicht hilft dir das schon mal weiter
CU
[ Dieser Beitrag wurde am 13.06.2003 um 18:14 Uhr von evil2002 editiert. ]
-
Hallo,
schau Dir doch mal std::strstream an, eventuell hilft Dir das weiter.
-
Benutz lieber stringstream als strstream!
-
in deinem beispiel muss es heissten
istringstream ss(S);
ss>>f0>>f1;
-
Thx für eure Lösungsvorschläge, habe PeterTheMaster's Lösung genommen und noch n bisschen istream-Funktionen mit reingebastelt.
zwette
-
Sorry, klappt leider doch noch nicht, ich komm nicht ganz mit der Konvertierung klar:
using namespace std; ifstream file; float d0, d1, d2, d3, d4, d5, d6, d7, d8; istringstream* pLine; string S; S.reserve(1024); pLine = new istringstream(S); // read line loop bool bRLL = true; bool bconflinefound = false; bool bMA = true; while(bRLL) { //line fetch getline(file,S); if(!file.fail()) { // checking for empty line if(!S.empty()) { // non zero string // checking for comment '!' if(S[0] != '!') {// not a comment // checking for configuration line if ((bconflinefound) && !file.eof()) { // it's not the config line pLine = &S; // Hier kommt Error C2440: '=' : 'std::string *' kann nicht in 'std::istringstream *' konvertiert werden *pLine >> d0 >> d1 >> d2 >> d3 >> d4 >> d5 >> d6 >> d7 >> d8; delete pLine; } } } }
Wie bekomme ich das in den Griff?
zwette