Strings aufaddieren



  • Anfängerproblem, möchte aus einer Texxtdatei mehrere kurze Zeilen auslesen und diese dann in einer Variablen haben. Von PHP her kenne ich .=

    void Rstatus()
    	{
    		char status[200], stream[200];
    		system("Relaisprogramm.bin -r 1 -g > /home/bernd/Heizung/Rstatus.txt");
    		std::ifstream daten("/home/bernd/Heizung/Rstatus.txt");
    		while(!daten.eof()){
    			daten.getline(stream,250);
    			status += stream;
    		}
    		std::cout << status << "\n";
    	}
    

    Die Variable brauche ich zum Speichern in eine DB.
    Gruß
    Bernd



  • #include <fstream>
    #include <iterator>
    #include <string>
    
    void Rstatus()
    {
      system("Relaisprogramm.bin -r 1 -g > /home/bernd/Heizung/Rstatus.txt");
    
      std::string status;
      std::ifstream daten("/home/bernd/Heizung/Rstatus.txt");
      status.assign(std::istream_iterator<char>(daten), std::istream_iterator<char>());
    
      std::cout << status << std::endl;
    }
    

    bb



  • bernd_h_schulz schrieb:

    char stream[200];
    [...]
    daten.getline(stream,250);
    

    Fällt dir was auf? char-Strings verwendet man in C++ normalerweise nicht - den Grund hast du bereits demonstriert.
    std::string-Objekte kannst du mit + bzw += aneinanderketten:

    std::string s1="Hallo";
    s1+="Hallo";
    s1=s1+s1+"Hallo";
    //usw.
    


  • unskilled schrieb:

    #include <fstream>
    #include <iterator>
    #include <string>
    
    void Rstatus()
    {
      system("Relaisprogramm.bin -r 1 -g > /home/bernd/Heizung/Rstatus.txt");
      
      std::string status;
      std::ifstream daten("/home/bernd/Heizung/Rstatus.txt");
      status.assign(std::istream_iterator<char>(daten), std::istream_iterator<char>());
    
      std::cout << status << std::endl;
    }
    

    bb

    liefert: Segmentation fault



  • bernd_h_schulz schrieb:

    unskilled schrieb:

    #include <fstream>
    #include <iterator>
    #include <string>
    
    void Rstatus()
    {
      system("Relaisprogramm.bin -r 1 -g > /home/bernd/Heizung/Rstatus.txt");
      
      std::string status;
      std::ifstream daten("/home/bernd/Heizung/Rstatus.txt");
      status.assign(std::istream_iterator<char>(daten), std::istream_iterator<char>());
    
      std::cout << status << std::endl;
    }
    

    bb

    liefert: Segmentation fault

    bestimmt nicht in dem teil des codes...

    #include <iterator>
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <iomanip>
    
    int main()
    {
    	std::fstream daten("../test/main.cpp");
    	daten << std::noskipws;
    	std::string status;
    	status.assign(std::istream_iterator<char>(daten), std::istream_iterator<char>()); 
    	std::cout << status << std::endl;
    }
    

    funktioniert n1...
    (Zeile 10 ist nur da, damit er die leerzeichen/zeilenumbrüche nicht verschluckt - deswegen auch der umstieg von ifstream auf fstream....
    wusste gar nicht, dass das hier ne Rolle spielt)

    bb



  • Danke, so klappt es wie gewünscht
    Bernd


Anmelden zum Antworten