Streams benutzen(2 fragen)



  • hi

    kann mir jemand bitte sagen, wie ich:

    1 >> In einer Datei ein bestimmten String bzw. ein bestimmtes Wort finden kann? (also zbsp. ich hab ne test.txt Datei und dort hab ich folgendes stehen:

    Hallo "HAHA"
    test test4
    passwort: 31

    und ich prüfen will ob nach "Hallo" das Wort inkl. " " => "HAHA" steht oder ein anderes Wort. Ist es ein anderes Wort, so wird ein Text "nicht haha" ausgegeben, sonst "ok".)
    __________________________________________________________________________
    2 >> In eine Datei vor oder nach einen String ein bestimmtes Wort einzufügen.

    Wäre nett wenn mir jemand helfen könnte 😉

    Mit bestem dank im voraus,
    _asm 🙂



  • 1. In String einlesen, und nach den Worten durchsuchen. Oder falls es Zeilenweise praktischer wäre, den Stream per std::getline() in einen vector einlesen und jede einzelne zeile durchgehen.

    2. Im Prinzip das gleiche; Datei in einen String lesen, ersetzen/einfügen und wieder zurückschreiben.



  • sorry, aber ich weiß nicht wie ich das realisieren soll.
    Folgendes hab ich schon probiert:

    void find(std::string file, std::string name)
    {
    	std::ifstream output;
    	output.open(file.c_str());
    	for(std::string::iterator x = name[x]; x != name; ++x)
    	{
    		if(x == name)
    		{
    			std::cout << "GEFUNDEN";
    		} else {
    			std::cout << "Suche .." << std::endl;
    		}
    	}
    }
    

    funktioniert aber nicht, da compilererrors.

    kannst du mir einmal zeigen, wie es geht?
    ich weiß nichtmal was du mit

    In String einlesen, und nach den Worten durchsuchen

    meinst 😕

    mfg



  • void find(std::string file, std::string name)
    {
    	std::ifstream output;
    	output.open(file.c_str());
    	std::vector<std::string> source;
    	for(std::string::size_type x = 0; x != source.size(); ++x)
    	{
    		source.push_back(output);
    	}
    }
    

    scheint auch nicht zu klappen 😞

    Kannst du mir wenigstens Tipps geben? oder den code?

    mfg



  • push 🙄



  • Eigentlich sollte man nach so einem dreisten gepushe garnichts mehr sagen... aber nagut:

    void find(std::string file, std::string name) 
    { 
        std::fstream output; 
        output.open(file.c_str()); 
        std::vector<std::string> source; 
        while(output.good()) 
        { 
            std::string line;
            std::getline(output, line);
            if(line.find(name) != std::string::npos)
            {
                std::cout << "gefunden!" << std::endl;
                break;
            }
        } 
    }
    

    So oder so ähnlich müsste es passen.



  • #include <fstream>
    #include <string>
    // ...
    bool find(const std::string& filename, const std::string& data)
    {
        std::ifstream input(filename.c_str()); // Datei öffnen
        if (!input) return false;
        std::string line; // Soll die Zeile reingelesen werden
        while (std::getline(input, line)) // Zeile aus input(Datei) in line(String) lesen ...
            if (line.find(data) != std::string::npos) // Wenn data(String) vorhanden
                return true; // erfolgreich
        return false; // nicht da ...
    }
    

    ...

    Für 1:

    std::string const& get_value(const std::string& filename, const std::string& var)
    {
        std::ifstream input(filename.c_str());
        if (!input) throw std::invalid_argument("could not open file");
        std::string line;
        while (std::getline(input, line))
        {
            std::size_t pos = line.find(var);
            pos = line.find_first_not_of(' ', pos);
            if (pos != std::string::npos)
                return line.substr(pos);
        }
        throw std::runtime_error("var not set");
    }
    
    int main()
    {
        try
        {
            std::cout << get_value("test.txt", "Hallo") << std::endl;
        } catch(std::exception& ex)
        {
            std::cerr << "FEHLER: " << ex.what() << std::endl;
        }
    };
    

    ...



  • 'getline': Ist kein Element von 'std'
    und der bezeichner wurde nicht gefunden:

    bool find(const std::string& file, const std::string &data)
    {
    	std::fstream read;
    	read.open(file.c_str());
    	if(!read)
    	{
    		std::cerr << "File couldn't be found." << std::endl;
    		return false;
    	}
    	std::string line;
    	while(std::getline(read, line))
    	{
    		if(line.find(data) != std::string::npos)
    		{
    			std::cout << "Gefunden" << std::endl;
    			return true;
    		}
    	}
    	return false;
    }
    

    😉



  • #include <string>
    


  • THX HAT GEKLAPPT!

    nur noch letzte frage: wie kann ich noch im nachhinein einen text an eine bestimmte stelle schreiben?
    habs so versucht:

    bool find(const std::string& file, const std::string &data)
    {
    	std::fstream read;
    	read.open(file.c_str());
    	if(!read)
    	{
    		std::cerr << "File couldn't be found." << std::endl;
    		return false;
    	}
    	std::string line;
    	while(std::getline(read, line))
    	{
    		if(line.find(data) != std::string::npos)
    		{
    			std::cout << line.find(data) << std::endl;
    			std::cout << "Gefunden, edit" << std::endl;
    			read << "HALLO"; // einfach durch read
    			return true;
    		}
    	}
    	return false;
    }
    

    erscheint dann aber nicht in der file 😮



  • Tja ... also du solltest den Code den ich dir gegeben habe nicht verschlimmbessern ...

    Zu deinem Problem: read ist weder als std::ios::in noch als std::ios::out geöffnet ... also solltest de vllt mal setzen -.-


Anmelden zum Antworten