[C++] Dopisanie tekstu na końcu wiersza
Ostatnio zmodyfikowano 2014-01-10 19:05
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: 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. |
|
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.
|
|
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ę. |
|
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ż) |
|
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ć.
|
|
« 1 » |