stream frage
-
hi

wie kann man in C++ mit Streams ein Wort in einer Datei hinzufügen?
Meine Lösung wäre:1. Man öffnet die Datei(mit x.open(..);)
2. Sucht nach einem bestimmten Wort bzw. einer bestimmten Zeile
3. Man ersetzt das Wort mit einem anderem.Nur wie setze ich das in C++ um?
Danke schon im Voraus

M.R.
-
Datei mit std::fstream::open() öffnen, Inhalt in einen std::string einlesen, Wort ersetzen und wieder rausschreiben

-
The-Kenny schrieb:
Datei mit std::fstream::open() öffnen, Inhalt in einen std::string einlesen, Wort ersetzen und wieder rausschreiben

ja, hab ich ja geöffnet, wie soll ich denn einen std::string einlesen?
hab was gefunden: http://www.c-plusplus.net/forum/viewtopic-var-t-is-192025-and-highlight-is-streams.html
da hast du dem auch nur was gesagt, kann deins aber da nicht kompilieren..
zeig mal bitte code, der auf MEINE Frage bezogen ist.
-
1. Datei öffnen
std::istream file_stream("data.ext"); if (!file_stream) throw std::invalid_argument("data.txt could not be opened!");2. Datei einlesen
std::vector <std::string> data; std::string tmp; while (std::getline(file_stream, tmp)) data.push_back(tmp);3. String suchen
std::string tmp("Das ist ein Test"); std::size_t pos = tmp.find("Test"); if (pos == std::string::npos) throw std::invalid_argument("could not find \"Test\"");4. Datei schreiben
std::vector <std::string> data; std::copy(data.begin(), data.end(), std::ostream_iterator<std::string>(file_stream, "\n"));... soo ... das setzt du jetzt entsprechend ein und es klappt

-
danke.
hab zwei fragen..
was bedeutet:
while (std::getline(file_stream, tmp)) data.push_back(tmp);und
if (pos == std::string::npos)
MFG
-
@(D)Evil:
/set pedantisch=1
Dir ist schon klar dass der Code ggf. auch andere Änderungen in der Datei macht, also nicht "binary safe" ist?
Unter Windows wird z.B. vermutlich jedes \n welches nicht auf ein \r folgt zu einem \r\n werden. Und wenn die letzte Zeile im File nicht mit einem \n oder \r\n abgeschlossen ist wird eins angehängt.
/set pedantisch=0
-
streamlooser schrieb:
was bedeutet:
while (std::getline(file_stream, tmp)) data.push_back(tmp);while sollte klar sein.
std::getline: http://msdn2.microsoft.com/en-us/library/2whx1zkx(VS.80).aspx
std::vector<T>::push_back: http://msdn2.microsoft.com/en-us/library/7fthz5xd(VS.80).aspxif (pos == std::string::npos)std::basic_string<T>::find: http://msdn2.microsoft.com/en-us/library/efzty53k(VS.80).aspx
find liefert std::basic_string<T>::npos zurück wenn nix gefunden werden konnte, sonst den Index der ersten Stelle wo das Gesuchte gefunden wurde.
-
ich würde das ganze file auf einmal lesen, dann ist es "binary save" und du sparst dir ne menge schleifen.
http://www.cplusplus.com/doc/tutorial/files.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-155739.html