Mehrere Floats aus String holen



  • Hallo,

    ich habe ein ifstream Objekt "is"
    Darin enthalten sind beliebige ASCII Zeichen, auch mit Zeilenunterbrechung.

    1. Frage: Ist das Einlesen zum String "ConfigString" so okay?

    stringstream tempstream;
    char c;
    while (is.good())
    {
        c = is.get();
    	if(is.good())
        tempstream << c;
    }
    ConfigString = tempstream.str();
    

    2. Frage: Aus dem String möchte ich nun einige Floats holen. Diese haben immer
    eine feste Anzahl an Zeichen (ZAHLENLAENGE) und stehen direkt hinter Keywords
    so wie zB. "[ABC]="

    #define ZAHLLAENGE 4 // Anzahl an Zeichen die hinter zB "[ABC]=" kommen
    
    iFoundbegin = -1;
    iFoundbegin = ConfigString.find("[ABC]=");
    if(iFoundbegin!=-1)
    {
    	tempstring = ConfigString.substr(iFoundbegin+6,ZAHLLAENGE);
    	conversionstream << tempstring;
    	conversionstream >> float1;
    	conversionstream.str("");
    	conversionstream.clear();
    }
    

    Dahinter kommen noch weitere Floats. Ist das effizient auf diese Weise
    oder gibt es da was besseres?

    Viele Grüße!
    Huddi



  • Wenn du Einarbeitungszeit in Kauf nehmen kannst, solltest du dir mal boost::spirit anschauen.



  • Hi!

    Danke für den Tipp. Ich würde allerdings gerne ohne weitere Bibliotheken
    auskommen, da ich das ganze eher als Hobby und zum Verständnis mache.
    Ist das Verfahren denn so okay oder eher murks?

    Grüße
    Huddi



  • du kannst eine Textdatei auch mit einem Befehl einlesen:

    ifstream file("configs.txt");
    string str;
    getline(file,str,static_cast<ifstream::char_type>(ifstream::traits_type::eof())):
    

    Eine Datei Byte für Byte einlesen ist nicht unbedingt die performanteste Lösung.


Log in to reply