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

odczyt i zapis z pliku do pliku

Object Storage Arubacloud
0 głosów
1,476 wizyt
pytanie zadane 14 maja 2016 w C i C++ przez Evelek Nałogowiec (28,960 p.)

Chcę odczytać dane z jednego pliku tekstowego a następnie te same dane zapisać do innego pliku. Mój kod wygląda tak:

#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;

int main()
{
    fstream plik;
    plik.open("111.txt", ios::in);

    string dane;

    while(!plik.eof())
    {
        plik >> dane;
            plik2.open("222.txt", ios::out || ios::app);
            {
                plik2 << dane << endl;
            }
            plik2.close();
    }
    plik.close();

    return 0;
}

Pojawia się błąd: : 'plik2' was not declared in this scope|

Dlaczego to nie działa i co to za błąd?

2 odpowiedzi

0 głosów
odpowiedź 14 maja 2016 przez Radfler VIP (101,030 p.)
Nie zdefiniowałeś zmiennej plik2....
komentarz 14 maja 2016 przez Evelek Nałogowiec (28,960 p.)

Poprawiłem na:

#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;

int main()
{
    fstream plik;
    plik.open("111.txt", ios::in);

    string dane;

    while(!plik.eof())
    {
        plik >> dane;
            fstream plik2;
            plik2.open("222.txt", ios::app);
            {
                plik2 << dane << endl;
            }
            plik2.close();
    }
    plik.close();

    return 0;
}

Konwertuje mi ale nie przepisuje liczb z pliku 111.txt do 222.txt.

Dlaczego?

komentarz 14 maja 2016 przez Radfler VIP (101,030 p.)

A plik 111.txt na pewno istnieje? Poza tym użyj takiej pętli:

while(plik >> dane) { ... }

 

komentarz 15 maja 2016 przez draghan VIP (106,230 p.)
edycja 15 maja 2016 przez draghan

Konwertuje mi ale nie przepisuje liczb z pliku 111.txt do 222.txt.

Dlaczego?

Zrób jakąkolwiek diagnostykę w swoim programie. Sprawdzaj poprawność plików, wypisuj komunikaty.

Nie podoba mi się otwieranie i zamykanie pliku wyjściowego co iterację. Można przecież otworzyć plik przed pętlą, zrobić swoje i go zamknąć.

#include <fstream>
#include <streambuf> // do metody "deserowej"
#include <string>

int main()
{
    std::ifstream input("we.txt");
    std::ofstream output("wy.txt");
    std::string data;

    if(!input.good() || !output.good())
    {
        return 1;
    }
    else
    {
        /*
        Poniższy sposób ma jedną wadę - do pliku wyjściowego dwa razy
        zostanie zapisana ostatnia wartość. Dlaczego?
        while(!input.eof())
        {
            input >> data;
            output << data << "\n";
        }
        */

        /*
        Takie proste przepisywanie z użyciem wejścia/wyjścia formatowanego:
        */
        while(input >> data)
        {
            output << data << "\n";
        }

        /*
        Lub na deser ciekawy sposób, podpatrzony na SO, wykorzystujący
        iterator dla bufora strumienia.
        Ma tę zaletę, że nie burzy struktury pliku, bo wczytuje
        wszystkie znaki z pliku wejściowego, łącznie z białymi.

        data = std::string( (std::istreambuf_iterator<char>(input)),
                                         std::istreambuf_iterator<char>() );
        output << data;
        */
        return 0;
    }
}

 

komentarz 15 maja 2016 przez Evelek Nałogowiec (28,960 p.)
Super ten twój sposób! I przejrzyście wygląda. Dziękuje za rozpisanie tego. Wszystko zrozumiałem.

Masz rację, ostatni wiersz jest zawsze dwa razy wpisywany, dlaczego tak się dzieje to nie mam pojęcia, ale zauważyłem gdy mi się liczby o jedną nie zgadzały.
komentarz 15 maja 2016 przez draghan VIP (106,230 p.)
Ostatnia wartość ląduje w pliku wyjściowym dwa razy dlatego, że flaga eof jest podnoszona nie wtedy, kiedy przeczytasz wszystko w pliku, tylko wtedy, kiedy przeczytasz wszystko i spróbujesz wczytać jeszcze coś. Stąd pętla na końcu wykonuje się o raz więcej, niż potrzeba.

EDIT: zmieniłem jeszcze 8. linię, czyli sposób otwarcia pliku, bo mi się w nocy zaplątało niepotrzebnie ios::app.
komentarz 15 maja 2016 przez Evelek Nałogowiec (28,960 p.)
Dzięki raz jeszcze. Zaraz potestuje ten program cały.

Przy okazji, pytałem też o to: http://forum.pasja-informatyki.pl/141008/odczyt-i-zapis-kilka-metod

Bo wolę używać jednej i stałej metody, która jest poprawna, a widzę po prostu, że co programista to nową metodę wprowadza i trochę mi się już zaczyna to mieszać.
0 głosów
odpowiedź 14 maja 2016 przez Fenix Nałogowiec (26,750 p.)
Zamiast plik >> dane, użyj getline( plik, dane ) + brak zdefinowania plik2 użyj fstream plik2;
komentarz 14 maja 2016 przez Evelek Nałogowiec (28,960 p.)
Nie pomogło. Poza tym wolę stosować swoją metodę.

Podobne pytania

0 głosów
2 odpowiedzi 563 wizyt
pytanie zadane 28 lipca 2016 w PHP przez rucin96 Użytkownik (500 p.)
0 głosów
2 odpowiedzi 232 wizyt
pytanie zadane 24 maja 2016 w C i C++ przez Kacperos_89 Początkujący (400 p.)
0 głosów
1 odpowiedź 2,272 wizyt
pytanie zadane 12 października 2016 w PHP przez Ditrix Mądrala (5,650 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...