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 fileopen file
for every item in lines
file << lines[item] << std::endl;
close fileso 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