Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Nadpisywanie zawartości pliku

Ostatnio zmodyfikowano 2016-12-15 10:02
Autor Wiadomość
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.
P-154869
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
P-154890
pekfos
» 2016-12-14 01:45:29
Otwórz w trybie append
Tak to niczego nie nadpiszesz, zwykłe std::ios::out.
P-154891
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.
C/C++
#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;
}
P-154915
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.
P-154964
« 1 »
  Strona 1 z 1