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

Usuwanie znaków białych z pliku źródłowego

Ostatnio zmodyfikowano 2019-08-16 08:38
Autor Wiadomość
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:
C/C++
#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.
P-175019
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.
P-175021
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.

C/C++
#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ć.
P-175028
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.
C/C++
while( plik1 >> linia )
{
    cout << linia << endl;
    plik2 << linia << endl;
}
P-175029
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.
P-175036
« 1 »
  Strona 1 z 1