[C++] Program usuwający nadmiar spacji z pliku

0

Witam, mam problem z programem, który czyta tekst z jednego pliku i zapisuje jego zmodyfikowaną wersję w drugim pliku. W pierwszym pliku dane są pooddzielane podwójnymi spacjami, a w zapisane dane w drugim pliku mają być pooddzielane pojedynczymi spacjami(trzeba usunąć jedną spacje w każdym miejscu gdzie są dwie). Na razie udało mi się napisać program który wczytuje dane oddzielone podwójnymi spacjami i zapisuje w drugim pliku bez żadnych spacji, i nie mam pomysłu jak go zmodyfikować. Oto kod:

 
#include<iostream>
#include<fstream>
#include<conio.h>
using namespace std;
int main()
{
    fstream plik( "dane6.txt", std::ios::in );
    ofstream plik_2("dane7.txt");
    char bufor[ 1024 ];
    plik.read( bufor, 1024 );
    string Usuniety;
    int n = plik.gcount();
        for (int i=0; i<n;i++)
        {
             if(bufor[i]!=' ')
             Usuniety+=bufor[i];
        }
    plik_2 << Usuniety << endl;
//Tekst=Usuniety;
    system("pause");
    return 0;
}
0

Zliczaj wczytywane spacje i jeśli masz drugą w kolejności, to ją olewaj przy zapisie. Jeśli natkniesz się na inny znak, resetuj licznik...

albo:

Jedź po tablicy oknem wielkości dwóch znaków i sprawdzaj czy ma dwie spacje. Jeśli tak, zapisz do pliku dane od miejsca ostatniego zapisu do pierwszej spacji z tych, na które wskazuje okno i jedź dalej.

Druga metoda powinna być wydajniejsza, gdyż zapisujesz blokami i nie musisz zliczać spacji. Musisz tylko pamiętać żeby oknem jechać co znak, a nie co wielkość okna oraz o "zawijaniu" (jeśli konieczne).

0

Jeżeli format tego pliku jest stały, to znaczy zawsze wiesz, że Twoje dane będą oddzielone podwójnymi spacjami to możesz tak zmodyfikować swoją pętle:

for (int i=0; i<n;i++)
        {
             if(bufor[i]==' ' && bufor[i+1]==' '){
                           continue;
             }
             Usuniety.push_back(bufor[i]);
        }
 
0

Pierwsza metoda wydaje mi się prostsza, tylko zastanawiam się jaki postawić warunek żeby resetować licznik przy natrafieniu na znak.

0
several napisał(a)

Jeżeli format tego pliku jest stały, to znaczy zawsze wiesz, że Twoje dane będą oddzielone podwójnymi spacjami to możesz tak zmodyfikować swoją pętle:

for (int i=0; i<n;i++)
        {
             if(bufor[i]==' ' && bufor[i+1]==' '){
                           continue;
             }
             Usuniety.push_back(bufor[i]);
        }
 

Bardzo dziękuje za pomoc, format pliku faktycznie jest stały. Wszystko działa.

0

a ja z ciekawości chciałbym poznać format pliku. mógłbyś wrzucić ten plik wejściowy?

1 użytkowników online, w tym zalogowanych: 0, gości: 1