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

[C++] Dopisanie tekstu na końcu wiersza

Ostatnio zmodyfikowano 2014-01-10 19:05
Autor Wiadomość
Malesur
Temat założony przez niniejszego użytkownika
[C++] Dopisanie tekstu na końcu wiersza
» 2014-01-10 18:17:04
Witam!

Potrzebuję pomocy z dopisaniem tekstu bądź liczby na końcu odczytanego wcześniej wiersza pliku źródłowego. Chodzi o to, by program dopisywał te dane w tym samym pliku, z którego je czytał.

Całość wykonywanych operacji wygląda mniej więcej tak:

1. Otwieram plik.
2. Czytam wiersz.
3. Wykonuję pewne operacje na przeczytanych danych.
4. Wynik operacji dopisuję na końcu tego przeczytanego wiersza (w tym samym pliku).
5. Czytam następny wiersz.
6. Wykonuję operacje.
7. Wynik zapisuję na końcu przeczytanego wiersza.

I tak w kółko aż do zakończenia pliku. Generalnie przykładowo plik przed wykonaniem programu może wyglądać tak:

Krzesło
Stolik
Lampa

Po wykonaniu operacji ten sam plik .txt wyglądać może tak:

Krzesło stoi
Stolik czerwony
Lampa jasna

Mój obecny fragment kodu odpowiadający za czytanie i wykonywanie operacji to:

C/C++
int main()
{
   
    string wiersz;
    fstream plik;
    double wynik;
   
    plik.open( "testowy.txt", ios::in | ios::out );
   
    do
    {
        getline( plik, wiersz );
        wiersz = operacja1( wiersz );
       
        if( operacja2( wiersz ) )
        {
            wiersz = operacja3( wiersz );
            wynik = operacja4( wiersz );
        }
       
        else
             cout << "dopisany_string" << endl;
       
    }
    while( !plik.eof() );
   
    return 0;
};

Poprawność funkcji 'operacjaX' nie jest w tym momencie istotna. Chodzi tylko o problem 'dopisania' stringa bądź liczby double na końcu przeczytanego i przeanalizowanego w danym momencie wiersza. Ważne jest też, żeby te wiersze nie były wczytywane naraz, a tak jak tu widać - każdy z osobna.

Z góry dziękuję za pomoc.

P-101779
Monika90
» 2014-01-10 18:33:13
Dwa sposoby:
1. Wczytujesz cały plik to wektora stringów, zamykasz i zapisujesz przetworzony pod tą samą nazwą. (ale co będzie jak ci elektrownia prąd wyłączy?)

2. Wczytujesz z jednego pliku i na bieżąco zapisujesz do innego.
P-101781
Malesur
Temat założony przez niniejszego użytkownika
» 2014-01-10 18:43:59
Niestety te sposoby nie rozwiążą mojego problemu.

1. Nie mogę wczytać całego pliku naraz. Do czegokolwiek bym tego nie wpisywał.

2. To rozwiązanie byłoby najłatwiejsze, jednak te dane mają być zapisywane w tym samym pliku, z którego były odczytywane.

Jeśli uważasz, że prócz tych sposobów nie ma innej drogi, daj znać. Żebym na darmo nie czekał i się nie zastanawiał nad niemożliwym. Z dwojga złego wybiorę wtedy tę drugą opcję.
P-101783
Monika90
» 2014-01-10 19:00:27
dane mają być zapisywane w tym samym pliku, z którego były odczytywane.
Jak skończysz, to możesz skasować plik źródłowy i zmienić nazwę pliku wynikowego na taką jaką miał źródłowy.

Jeśli uważasz, że prócz tych sposobów nie ma innej drogi
To są najprostsze sposoby. Można kopiować fragmenty pliku z jednego miejsca w drugie, po to żeby zrobić miejsce na dopisane dane - tylko kto chciałby się tak męczyć? W Windows można spróbować użyć file mapping http://msdn.microsoft.com​/en-us/library/windows/desktop​/aa366556%28v=vs.85%29.aspx (w Linuksie też)
P-101786
Malesur
Temat założony przez niniejszego użytkownika
» 2014-01-10 19:05:36
Hmm... Zastanawiałem się nad możliwością tej 'podmiany' nazw o której pisałaś. Nie byłem jednak do końca pewien czy jest to wykonalne.
Dziękuję za pomoc. Od tego miejsca powinienem już sobie poradzić.
P-101787
« 1 »
  Strona 1 z 1