Usuwanie znaków białych z pliku źródłowego
Ostatnio zmodyfikowano 2019-08-16 08:38
Neramis Temat założony przez niniejszego użytkownika |
Usuwanie znaków białych z pliku źródłowego » 2019-08-15 13:26:44 Cześć, próbuję napisać program usuwający wszystkie podwójne spacje z pliku .txt (w dalszej kolejności, kiedy już zostaną tylko pojedyncze spacje, będę dążyć do napisania kodu zamieniającego je na \n). Napisałem na razie to: #include <string> #include <iostream> #include <fstream>
using namespace std;
int main() { fstream plik; plik.open( "1.txt" ); string linia; while( getline( plik, linia ) ) { cout << linia << endl; string szukaj = " "; int pozycja = linia.find( szukaj ); do { cout << "Fraza zostala odnaleziona na pozycji " << pozycja << endl; pozycja = linia.find( szukaj, pozycja + szukaj.size() ); linia.erase( pozycja, 1 ); cout << linia << endl; fstream plik2; plik2.open( "2.txt", ios::out | ios::app ); plik2 << linia << endl; plik2.close(); } while( pozycja != string::npos ); } return 0; }
Wyskakuje mi błąd: Terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::erase: __pos (which is 4294967295) > this->size() (which is 7) Proszę o radę, co robię źle i ewentualne pomysły, co mógłbym zrobić inaczej. |
|
pekfos |
» 2019-08-15 14:05:33 Próbujesz usunąć tekst, którego nawet nie znalazłeś. Cześć, próbuję napisać program usuwający wszystkie podwójne spacje z pliku .txt (w dalszej kolejności, kiedy już zostaną tylko pojedyncze spacje, będę dążyć do napisania kodu zamieniającego je na \n). |
Prościej to zrobić za jednym zamachem i działając na jednym znaku naraz, a nie na liniach. |
|
Neramis Temat założony przez niniejszego użytkownika |
» 2019-08-15 21:24:56 Jeśli od razu zamienię spacje na entery to skończę z wielokrotnymi enterami. Zamierzony efekt jest taki, by każdy wyraz pliku tekstowego skończył w osobnej linii i by w pliku nie było już obecnych żadnych spacji. Oczywiście nie pomyślałem, że najłatwiej byłoby to zrobić za pomocą operatora >>, który pominie białe znaki. #include <string> #include <iostream> #include <fstream>
using namespace std;
int main() { fstream plik1; plik1.open( "1.txt" ); fstream plik2; plik2.open( "2.txt", ios::out | ios::app ); string linia; while( true ) { plik1 >> linia; cout << linia << endl; plik2 << linia << endl; } plik1.close(); plik2.close(); return 0; }
Ten program prawie robi to, czego oczekuję, gdyby nie drobny problem związany z tym, że na samym końcu generuje mnóstwo razy ostatnią frazę. Jak to przerwać? Proszę o wyrozumiałość wobec mojej wybiórczej wiedzy - nie chcę (lub raczej nie mam czasu), by uczyć się całego C++, potrzebuję jedynie stworzyć jeden lub dwa programy, które uporządkują mi setki plików .txt do jednej formy, na której wygodnie będzie mi operować. |
|
pekfos |
» 2019-08-15 22:05:52 na samym końcu generuje mnóstwo razy ostatnią frazę. Jak to przerwać? |
Najlepiej przez nie pisanie tego w nieskończonej pętli. Użyj samego wczytywania jako warunku. while( plik1 >> linia ) { cout << linia << endl; plik2 << linia << endl; } |
|
Neramis Temat założony przez niniejszego użytkownika |
» 2019-08-16 08:38:15 Dzięki, problem rozwiązany. Zmieniłem nazwę postu z "Usuwanie podwójnej spacji z pliku źródłowego" na "Usuwanie znaków białych z pliku źródłowego". Temat zamykam. |
|
« 1 » |