Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[cpp] - Zapisanie obiektow do pliku *.txt

karl9955 14 Cze 2015 20:31 462 7
  • #1 14 Cze 2015 20:31
    karl9955
    Poziom 8  

    Witam, robię program na zaliczenie a'la elektroniczny dziennik. Tworze tam między innymi obiekt typu Nauczyciel i umieszczam go w wektorze.

    Kod: c
    Zaloguj się, aby zobaczyć kod



    I tu pytanie, w jaki sposób mógłbym ten wektor zapisać do pliku i go otwierać? Czytałem troszeczkę o bibliotece fstream lecz ze bardzo nie wiem jak się za to zabrać. Prosiłbym o pomoc. Pozdrawiam ;)

    1 7
  • #2 14 Cze 2015 20:46
    namok
    Poziom 24  

    karl9955 napisał:
    Czytałem troszeczkę o bibliotece fstream lecz ze bardzo nie wiem jak się za to zabrać. Prosiłbym o pomoc. Pozdrawiam ;)
    Chcesz powiedzieć że nie było tam przykładu jak zapisać dane do pliku. To sprawdź to.

    1
  • #3 14 Cze 2015 21:09
    Dżyszla
    Poziom 42  

    Ogólnie - robisz deparsowanie danych i zapisujesz... W ujęciu obiektowym jest to bardzo fajne, bo na obiekcie wystarczy stworzyć metodę, której przekażesz tylko strumień, a ona pobierze swoje pola (wszystkie / wybrane) i zapisze do strumienia. W głównej obsłudze otwierasz ten strumień (może nim być plik) i wywołujesz metodę dla kolejnych obiektów, na końcu zapisujesz/zamykasz strumień.

    1
  • #4 15 Cze 2015 00:55
    karl9955
    Poziom 8  

    Wszystko ok tylko dalej nie rozumiem w jaki sposób to działa. Czy jeżeli przekieruje strumień z wektora na plik to czy to wystarczy, czy muszę do pliku wysłać dane typu: wektor o nazwie.. , rozmiar wynosi.., posiada takie i takie obiekty... itp.

    1
  • #5 15 Cze 2015 10:25
    -psiak-
    Poziom 32  

    karl9955 napisał:
    Czytałem troszeczkę o bibliotece fstream lecz ze bardzo nie wiem jak się za to zabrać.
    Chrzani Waść!

    Nie licząc otwarcia/zamknięcia jest to identycznie z konsolą.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    1
  • #6 15 Cze 2015 10:49
    karl9955
    Poziom 8  

    Dzięki za odpowiedź, czy Twój zapis typu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jest równoznaczny z tym:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    I ponawiam pytanie, bo Ty w tym przykładzie użyłeś 2 zmiennych typu string i int, a jeżeli ja mam wektor, jest on wypełniony obiektami to wystarczy że zrobię coś w tym stylu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jeszcze przy okazji, jest jakiś sposób żeby funkcja getch działała pod Ubuntu?

    1
  • #7 15 Cze 2015 12:58
    namok
    Poziom 24  

    karl9955 napisał:
    Jeszcze przy okazji, jest jakiś sposób żeby funkcja getch działała pod Ubuntu?
    Tak wystarczy użyć mocy i pierwszy link da odpowiedź.

    0
  • #8 15 Cze 2015 19:39
    -psiak-
    Poziom 32  

    karl9955 napisał:
    Kod: c
    Zaloguj się, aby zobaczyć kod
    - ten fragment to produkt od kogoś kto nie zna biblioteki standardowej.
    • Po kiego najpierw tworzyć obiekt po tym go otwierać, kiedy można to zrobić od razu? Nawet jeżeli w pętli otwierasz/zamykasz pliki to i tak na każdy warto zrobić osobną zmienną aby nie mieć problemów z clear().
    • Czytanie i pisanie jednocześnie do tego samego pliku? Kiedy i gdzie to może być potrzebne? Owszem są takie sytuacje ale raczej marginalne.
    W związku z powyższym, używaj ifstream oraz ofstream, nigdy fstream, no przynajmniej dopóki nie zrozumiesz jak to działa.

    Co do wektora, skąd program ma się domyślić jak to chcesz załatwić?
    Ale możesz załatwić to poprzez:
    http://www.cplusplus.com/reference/iterator/ostream_iterator/ - zapis
    http://www.cplusplus.com/reference/iterator/istream_iterator/ - odczyt (można też użyć copy mimo że nie ma w przykładzie ale razem z http://www.cplusplus.com/reference/iterator/back_inserter/ )

    Postanowiłem jednak machnąć przykład:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0