Zamiana zapisu pliku

Zamiana zapisu pliku
MP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

Witam,
Piszę program, który ma za zadanie przekonwertować dane zapisane wers po wersie (zdjęcie nr 1) na zapis taki jak na zdjęciu nr 2. Problem w tym, że mój program wykonuje tę zmianę, ale zapisuje wszystkich w jednej linii (zdjęcie nr 3), a ja chciałabym aby nowa osoba była w nowej linii.old.JPGnew.JPG
wrong.JPG
To mój kod:

Kopiuj
#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>
#include <algorithm>

using namespace std;

int main()
{
    string nazwaStaregoPliku = " ";
    string liniaDoOdczytania;
    stringstream ss(liniaDoOdczytania);
    string tymczas = "";
    int nrLinii = 1;

    cout << "Podaj nazwe starego pliku zrodlowego: ";
    cin >> nazwaStaregoPliku;

    if (nazwaStaregoPliku == "ksiazka_z_adresami.txt")
    {
        ifstream staryPlik ("ksiazka_z_adresami.txt");
        ofstream nowyPlik ("ksiazka_adresowa_nowy_format.txt");

        while ( !staryPlik.eof())
        {
            (getline(staryPlik, tymczas, '|'));
            ss << tymczas;
            tymczas.clear();
            while ( !ss.eof())
            {
                ss >> tymczas;
                nowyPlik << tymczas << "|";
                if (nrLinii >=6) {
                    nrLinii = 1;
                }
            }
            nowyPlik << std::endl;
            ss.clear();
        }

        staryPlik.close();
        nowyPlik.close();
    }
    else
    {
        cout << "Bledna nazwa pliku!" << endl;
        exit(0);
    }
    cout << "Konwersja zostala przeprowadzona" << endl;


    return 0;
}

Althorion
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1620
2

Przy minimalnej liczbie zmian — zacznij korzystać z tej Twojej zmiennej nrLinii. Zwiększaj go co wczytaną linijkę i gdy jej wartość stanowi wielokrotność szóstki (bo informacje o osobie mają po sześć linijek), dodawaj znak nowej linii.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

To strasznie! Czemu tak przekombinowane?
Wystarczy JEDEN wiersz kodu!

Kopiuj
#include <fstream>

using namespace std;

int main()
{
    ifstream fin("ksiazka_z_adresami.txt");
    ofstream fout("ksiazka_adresowa_nowy_format.txt");
    for(int ch,count=0;(ch=fin.get())!=EOF;) fout.put(((ch=='\n')&&(((++count)%=6)!=0))?'|':ch);
    return 0;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.