• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zamiana zapisu pliku

42 Warsaw Coding Academy
+1 głos
381 wizyt
pytanie zadane 25 sierpnia 2021 w C i C++ przez magda_19 Gaduła (3,080 p.)

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.

To mój kod:

#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;
}

1 odpowiedź

+1 głos
odpowiedź 26 sierpnia 2021 przez tkz Nałogowiec (42,020 p.)
wybrane 26 sierpnia 2021 przez magda_19
 
Najlepsza
#include <fstream>
#include <iostream>
#include <string>

int main()
{
    std::ifstream input("input.txt");
    std::ofstream output("output.txt");
    std::string line;
    std::string sequence;
    for (std::size_t counter{0}; std::getline(input, line); ++counter)
    {
        if (!(counter % 6) && (counter != 0))
        {
            output << (sequence.pop_back(), sequence) << '\n';
            sequence.clear();
        }
        sequence += line + '|';
    }
}

 

komentarz 26 sierpnia 2021 przez magda_19 Gaduła (3,080 p.)
Dzięki za pomoc, ale dlaczego kod usuwa ostatnią osobę w output.txt?
komentarz 26 sierpnia 2021 przez tkz Nałogowiec (42,020 p.)

Nie usuwa, po prostu ostania nie jest podzielna przez 6. 

#include <fstream>
#include <iostream>
#include <string>

int main()
{
    std::ifstream input("input.txt");
    std::ofstream output("output.txt");
    std::string line;
    std::string sequence;
    for (std::size_t counter{0}; std::getline(input, line); ++counter)
    {
        if (!(counter % 6) && (counter != 0))
        {
            output << (sequence.pop_back(), sequence) << '\n';
            sequence.clear();
        }
        sequence += line + '|';
    }
    output << (sequence.pop_back(), sequence) << '\n';
}

 

Podobne pytania

0 głosów
1 odpowiedź 572 wizyt
pytanie zadane 20 sierpnia 2022 w C i C++ przez ivankov Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 994 wizyt

93,383 zapytań

142,382 odpowiedzi

322,539 komentarzy

62,744 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...