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


Anmelden zum Antworten