Text aus .txt oder string finden und löschen



  • Hi,

    ich habe zu dem Thema bereits viel gegooglet und auch die Boardsuche benutzt, die Ergebnisse fielen jedoch spärlich aus...

    Ich hoffe, jemand von euch kann mir das beantworten:

    Ich würde gerne ein Wort in einer txt-datei oder in einem string suchen und löschen lassen.

    Als OS benutze ich Windows XP mit Dev-Cpp als IDE, falls das von Bedeutung ist.

    Wäre über 'ne schnelle Antwort dankbar 🙂



  • naja - der übliche weg ist die datei einlesen, die datei ohne den string neu schreiben



  • Könntest du mir daür evtl. ein kleines code-Beispiel geben?
    Wüsste jetzt nicht, wie ich das machen soll.



  • Pseudo
    vector<string> lines;
    open file
    string line
    getline(file, line)
    replace in line if string found
    lines.push_back(line);
    close file

    open file
    for every item in lines
    file << lines[item] << std::endl;
    close file

    so in etwa 🙂



  • #include <string>
    #include <iostream>
    #include <fstream>
    #include <iterator>
    using namespace std;
    
    int main(int argc, char ** argv) {
    	if(argc!=3) {
    		cout << "Dieses Programm entfernt alle Vorkommen eines Wortes aus einer Datei\n"
    				"Und gibt den neuen Inhalt aus\n"
    				"Bitte per <prog> <datei> <wort> starten" << endl;
    		return 0;
    	}
    	string data;
    	string find_s(argv[2]);
    
    	ifstream file(argv[1]);
    
    	file.unsetf(ios::skipws);
    
    	data.assign(istream_iterator<char>(file), istream_iterator<char>());
    
    	file.close();
    
    	int pos=0;
    	while( (pos=data.find(find_s))!=string::npos) 
    		data.erase(pos, find_s.length());
    
    	cout << data;
    	return 0;
    }
    

    das wieder in die datei schreiben dürfte einfach sein ^^



  • Danke schonmal.

    Da ich ja noch programmier-anfänger bin, nehme ich mir morgen mal die Zeit um den doch recht langen code zu verstehen und anzuwenden. 🙂



  • hier nochmal mit mehr comments

    #include <string>
    #include <iostream>
    #include <fstream>
    #include <iterator>
    using namespace std;
    
    int main(int argc, char ** argv) {
    	if(argc!=3) {
    		cout << "Dieses Programm entfernt alle Vorkommen eines Wortes aus einer Datei\n"
    				"Und gibt den neuen Inhalt aus\n"
    				"Bitte per <prog> <datei> <wort> starten" << endl;
    		return 0;
    	}
    	string data;
    	string find_s(argv[2]); // der string den wir suchen
    
    	ifstream file(argv[1]); // öffnet die datei aus dem ersten argument
    
    	file.unsetf(ios::skipws); // stellt das überspringen von whitespace ab
    
    	data.assign( // zuweisung von daten an den data string
                 istream_iterator<char>(file), //anfang der datei
                 istream_iterator<char>()); // ende der datei
    
    	file.close();
    
    	int pos=0;
    
            // solange wie der zu entfernende string vorhanden: 
            //     entferne ihn einmal
    	while( (pos=data.find(find_s))!=string::npos) 
    		data.erase(pos, find_s.length());
    
    	cout << data;
    	return 0;
    }
    


  • @r0nny ... dann such auch erst wieder ab der stelle an der der String das letzte mal gefunden wurde ... ist etwas viel performanter. ..



  • dann her mit dem schnelleren suchen !

    #include <string>
    #include <iostream>
    #include <fstream>
    #include <iterator>
    using namespace std;
    
    int main(int argc, char ** argv) {
    	if(argc!=3) {
    		cout << "Dieses Programm entfernt alle Vorkommen eines Wortes aus einer Datei\n"
    				"Und gibt den neuen Inhalt aus\n"
    				"Bitte per <prog> <datei> <wort> starten" << endl;
    		return 0;
    	}
    	string data;
    	string find_s(argv[2]); // der string den wir suchen
    
    	ifstream file(argv[1]); // öffnet die datei aus dem ersten argument
    
    	file.unsetf(ios::skipws); // stellt das überspringen von whitespace ab
    
    	data.assign( // zuweisung von daten an den data string
                 istream_iterator<char>(file), //anfang der datei
                 istream_iterator<char>()); // ende der datei
    
    	file.close();
    
    	int pos=0;
    
            // solange wie der zu entfernende string vorhanden: 
            //     entferne ihn einmal
    	while( (pos=data.find(find_s, pos))!=string::npos) 
    		data.erase(pos, find_s.length());
    
    	cout << data;
    	return 0;
    }
    

    @(D)Evil: thx für den hinweis - solche kleinigkeiten vergisst man gerne wenn man nicht mehr so oft mit c++ arbeitet


Anmelden zum Antworten