maniek1310 Temat założony przez niniejszego użytkownika |
Zamiana tekstu w pliku » 2013-07-19 18:41:47 Witam mógłbym was prosić o sprawdzenie tego pliku, gdyż po skompilowaniu dochodzi do otworzenie plik.txt i plik2.txt i dalej już nic nie robi. Program ma sprawdzać każdą linię i gdy natrafi na słowo english, zamienić go na polish. Oto kod : string linia; fstream plik; fstream plik2;
plik.open( "plik.txt", ios::in ); plik2.open( "plik2.txt", ios::out | ios::app ); if( plik.good() == true and plik2.good() == true ) { while( !plik.eof() ) { getline( plik, linia ); string a( "english" ); string b( "polish" ); int n = linia.find( a ); linia.replace( n, b.size(), b ); plik2 << linia << endl; cout << linia << endl; } }
plik.close(); plik2.close(); |
|
Savail |
» 2013-07-19 18:50:22 Sprawdzaj wynik metody std::string::find. Jeśli nie znajdzie danego słowa to zwraca std::string::npos. Wykonuj dalsze operacje tylko jeśli zwróci wartość >= 0. I przed zapisywaniem do pliku dodawaj do zmiennej linia znak nowej lini czyli '\n'. |
|
maniek1310 Temat założony przez niniejszego użytkownika |
» 2013-07-19 18:53:27 Sprawdziłem kod po linijce i okazało się że tu coś jest nie tak : linia.replace( n, b.size(), b ); Ps. Okazało się że jeżeli n przyjmowało wartość -1 to funkcja .replace nie chciała zmieniać tekstu więc dodałem instrukcję warunkową i teraz wszystko działa. Temat można zamknąć. Tutaj kod jak by ktoś chciał : string linia; fstream plik; fstream plik2;
plik.open( "plik.txt", ios::in ); plik2.open( "plik2.txt", ios::out | ios::trunc ); if( plik.good() == true and plik2.good() == true ) { while( !plik.eof() ) { getline( plik, linia ); string a( "english" ); string b( "polish" ); int n = linia.find( a, 0 ); if( n != - 1 ) { linia.replace( n, a.size(), b ); } plik2 << linia << endl; cout << linia << endl; } }
plik.close(); plik2.close(); |
|
maniek1310 Temat założony przez niniejszego użytkownika |
» 2013-07-19 19:58:51 Przepraszam że otwieram ale pojawił się kolejny problem kodowanie pliku. Jest plik przepuśćmy "test.ini" gdy zamienię jakiś wyraz i zapiszę do nowego pliku przypuśćmy "test2.ini" to w niektórych miejscach są "krzaczki". I tutaj teraz moje pytanie da radę ustawić kodowanie zaraz po otworzeniu pliku test.ini ??
Kodowanie w pliku test.ini to jest "UCS-2 Little Endian" i chciałbym zmienić na np. "UTF-8". |
|
Monika90 |
» 2013-07-19 20:13:09 Twój kod zawiera bardzo popularny błąd while( !plik.eof() ) { getline( plik, linia ); rob_cos( linia ); }
eof albo flagi błędów należy sprawdzać po próbie odczytu a nie przed: while( getline( plik, linia ) ) { rob_cos( linia ); }
if( plik.eof() ) cout << "wczytano calosc"; else cout << "error";
Takie coś też jest dziwne: if( plik.good() == true and plik2.good() == true )
wystarczy: if( plik.good() && plik2.good() )
a najlepiej: |
|
maniek1310 Temat założony przez niniejszego użytkownika |
» 2013-07-19 20:20:19 @up a kodowanie to jak mam zrobić ?? |
|
Monika90 |
» 2013-07-19 20:28:12 Po pierwsze musisz użyć std::wifstream do czytania i std::wstring do przechowywania tekstu. I zwiazać ze strumieniami odpowiednie locale z ustawioną konwersją znaków, (codecvt_utf16, codecvt_utf8) |
|
maniek1310 Temat założony przez niniejszego użytkownika |
» 2013-07-19 20:39:24 A byś wysłała mi link do biblioteki "codecvt" bo nie mogę znaleźć ?? |
|
« 1 » 2 |