easy file parser



  • das sieht schon mal gut aus, nur in welcher include liegen die funnktionen
    "remove_if" und "isspace"

    PS: ich durchforste mal eben die doku



  • gamer8o4 schrieb:

    das sieht schon mal gut aus, nur in welcher include liegen die funnktionen
    "remove_if" und "isspace"

    #include <algorithm>
    #include <cctype>
    


  • DANKE frage 2 ist hiermit erledigt, eins bin ich gerade dran, glaube aber nicht, dass ich das so verstanden hab, brächte am besten noch ne kleine erklärung 😉



  • Musst du erstmal noch mal genauer erklären? Wieso in einen string speichern? Wieso kein int ? Willst du damit nicht rechen? Du willst also in einem vector jede komplette Zeile und in einem anderen nur die Ziffern, oder wie oder was?



  • ja so ungefähr, als int brauche ich es erst später, die variablen in der textdatei könnten ja theoretisch auch wörter sein, und da es mir ersteinmal ums prinzip geht, brauche ich es ersteinmal als string



  • habs jetzt FAST:

    #include <string>
    #include <algorithm> 
    #include <cctype>
    int main() 
     { 
             //std::string str = "  hallo \t welt \t"; 
             //str.erase( std::remove_if(str.begin(),str.end(),std::isspace),str.end() ); // bzw. str.erase( std::remove_if(str.begin(),str.end(),static_cast<int (*)(int)>(std::isspace)),str.end() ); --> Dass der MSVC mal Ruhe gibt. 
             //std::cout << str;
    		 std::string s = "abc=def"; 
    		 std::string s1 = s.substr(1, s.find('=')-1); 
    		 std::string s2 = s.substr(s.find('=') + 1, s.length());
    		 std::cout << s << "\n"<< s1 << "\n"<< s2 << "\n";
    		 getchar();
             return 0; 
     }
    

    das einzige problem ist, das der erste buchstabe von s1 fehlt



  • Du musst ja auch bei 0 anfangen und nicht bei 1...



  • oh, danke 💡 flüchtigkeitsfehler 😉



  • int main()
    {
    	ifstream file("test.txt");
    
    	if( !file.is_open() )
    	{
    		cerr << "could not open file";
    		return -1;
    	}
    
    	vector<string> complete_lines;
    	vector<string> numbers;
    	for(string str; getline(file,str);)
    	{
    		complete_lines.push_back(str);
    		unsigned pos = str.find_first_of("-0123456789");
    		string number = str.substr(pos);
    		numbers.push_back(number);
    	}
    
    	return 0;
    }
    


  • Und bitte lege den Vektor als Objekt in Deine Klasse, statt ihn dynamisch anzulegen. Also so:

    class FooBar
    {
      std::vector<std::string> data;
    };
    

    Dann brauchst Du ihn nicht im Konstruktor anzulegen, sondern er ist einfach nur da. Auch musst Du Dir Gedanken über Zuweisungsoperator und Kopierkonstruktor machen, wenn Du den dynamisch anlegst. Und den Destruktor darfst Du auch nicht vergessen. All das bleibt Dir erspart, wenn Du ihn einfach so als Instanz anlegst.


Anmelden zum Antworten