Nadpisywanie zawartości pliku
Ostatnio zmodyfikowano 2016-12-15 10:02
Warmix Temat założony przez niniejszego użytkownika |
Nadpisywanie zawartości pliku » 2016-12-13 19:27:18 Cześć, w pliku txt mam takie coś:
... ... First 0 Window 800 600 Inline 50 10 ... ...
W jaki sposób mogę nadpisać wartości w lini, w której znajduje się ciąg znaków "Window"? tzn aktualnie są np. 800 \t 600 a chciałbym to napisać np. 100 \t 200. Kombinuję coś z wykorzystaniem std::ostringstream ale nie chce mi działać :( Proszę o jakieś wsparcie. |
|
1aam2am1 |
» 2016-12-14 01:15:44 Otwórz w trybie append Trzeba uważać na to że jak coś piszesz to nadpisujesz znak po znaku np.
Abc Def
Pierwsza linie nadpiszemy abcd to ostatnia litera nadpiszemy enter.
AbcdDef
I najlepiej użyj fstream gdyż masz odczyt i zapis |
|
pekfos |
» 2016-12-14 01:45:29 Tak to niczego nie nadpiszesz, zwykłe std::ios::out. |
|
mokrowski |
» 2016-12-14 16:54:31 A masz.. baw się .... Będziesz wiedział czego ew. szukać aby uzyskać pełne rozwiązanie :-) Oczywiście zależy jakie masz tam dane. W najprostszym przypadku można tym. W bardziej skomplikowanych iterowanie "linia po linii" i zastosowanie do dopasowania gramatyki regularnej. #include <fstream> #include <iterator> #include <string> #include <iostream> #include <cstdlib> #include <cassert>
using namespace std;
bool replace_word_in_file( fstream & file, const string & src, const string & dst ) { assert( src.size() == dst.size() ); auto position = find( istream_iterator < string >( file ), istream_iterator < string >(), src ); if( position == istream_iterator < string >() ) { return false; } file.rdbuf()->pubseekoff( - src.size(), ios_base::cur ); file << dst; return true; }
int main() { fstream file( "/tmp/data.txt" ); string word_src { "1500" }; string word_dst { "baba" }; if( not replace_word_in_file( file, word_src, word_dst ) ) { cerr << "Ups... word not replaced!" << endl; exit( EXIT_FAILURE ); } return EXIT_SUCCESS; }
|
|
Warmix Temat założony przez niniejszego użytkownika |
» 2016-12-15 10:02:54 Dzięki. Generalnie już skorzystałem po prostu z opcji tradycyjnego nadpisywania całej linii, a nie tylko jej części, bo w tym przypadku akurat takie rozwiązanie może być, ale jeśli jeszcze przyda mi się to, to wykorzystam. Dzięki wielkie. |
|
« 1 » |