Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Odczytywanie i zapisywanie, modyfikacja danych pliku

Ostatnio zmodyfikowano 2009-05-17 21:13
Autor Wiadomość
bartek9393
Temat założony przez niniejszego użytkownika
Odczytywanie i zapisywanie, modyfikacja danych pliku
» 2009-05-17 09:07:18
Witam!

Robię aktualnie program na 6 z informatyki, taki Organizer ucznia.
Wszystko działa ładnie, tylko mam problem z odczytem i zapisem niektórych danych, oto kawałek kodu:
C/C++
if( znak == 2 )
{
    //WCZYTYWANIE UCZNIA
    clrscr();
    cout << "PROFIL UCZNIA" << endl;
    cout << "Podaj nazwe profilu, ktory podales tworzac nowego ucznia: ";
    cin >> nazwaprofilu;
    fstream plik;
    plik.open( & nazwaprofilu[ 0 ], ios::in | ios::out );
    cout << "Otworzono profil!" << endl;
    system( "PAUSE" );
    //tu operacje na pliku
    menu2:
    clrscr();
    menu_profil();
    cin >> wybor;
    if( wybor == 1 )
    {
        clrscr();
        //ZARZADZANIE PRZEDMIOTAMI 
        cout << "Zarzadzanie przedmiotami" << endl;
        menu_przedmioty();
        cin >> wybor;
        if( wybor == 1 )
        {
            //DODAJ PRZEDMIOT
            clrscr();
            cout << "Nazwa przedmiotu (bez spacij): ";
            cin >> przedmiotplus; <== tutaj chcia ł bym zastosowa ć getline(), ale jak zo zrobie to jest jaki ś b ł ą d i program od razu przeskakuje do nastepnej lini i nie mo ż na wpisac nazwy
           
            plik.open( & nazwaprofilu[ 0 ], ios::out | ios::ate );
            plik.write( & przedmiotplus[ 0 ], przedmiotplus.length() );
            plik.close();
            cout << "Dodano!" << endl;
            system( "PAUSE" );
            goto menu2;
        } else
        if( wybor == 2 )
        {
            //USUN PRZEDMIOT 
           
           
        } else

I jak tak zrobię, to nie dopisuje mi na koncu pliku tego co podam do zmiennej
"przedmiotplus", tylko plik jest w nienaruszonym stanie.
Chciałbym, aby tekst ktory podam do zmiennej przedmiotplus, był wstawiany we wczytanym wczesniej pliku w konkretne miejsce, np. w linię nr 4, czy istnieje taka możliwość?

Chciałbym też odczytywać tekst, od konkretnego miejsca do wyznaczonego miejsca w pliku.

Proszę o pomoc!
Z góry dzięki!
P-6940
krdk
» 2009-05-17 11:03:44
http://forum.ddt.pl/?Tid=622
Przeczytaj punkt 2. Kod będzie czytelniejszy :)
P-6941
malan
» 2009-05-17 12:49:29
1.
<== tutaj chciałbym zastosować getline(), ale jak zo zrobie to jest jakiś błąd i program od razu przeskakuje do nastepnej lini i nie można wpisac nazwy
 Dzieje się tak ponieważ bufor jest "zapełniony". Jeśli chcesz używać 'getline',a wcześniej użyłeś 'cin' musisz wyczyścić bufor:
fflush(stdin);
2.
C/C++
plik.open( & nazwaprofilu[ 0 ], ios::in | ios::out );
//Rozumiem, że otwierasz plik żeby zapisać w nim dane? Więc ios::in|ios::out możesz zamienić na ios::out, ios::app.
//Jak byś tak zrobił to nie musiałbyś już otwierać pliku (którego wcześniej nie zamknąłeś) po raz 2:
plik.open( & nazwaprofilu[ 0 ], ios::out | ios::ate );
3.
Chciałbym też odczytywać tekst, od konkretnego miejsca do wyznaczonego miejsca w pliku.
 Hmm może poczytaj o 'tellg()' http://kursy.ddt.pl/?LessonId=110
P-6943
bartek9393
Temat założony przez niniejszego użytkownika
» 2009-05-17 13:08:10
ok, dzięki!
a co do tellg(), co spróbuje
na odczytywanie i zapisywanie danych w określone miejsce pliku pozwana chyba funkcja
seekg() i seekp(),
tyko jak je zastosować?? próbowałem je użyć, ale za każdym razem jest błąd w kompilacji!
niech ktoś poda przykład jak je zastosować
z góry dzięki

P-6946
TomekU
» 2009-05-17 13:20:18
P-6948
pekfos
» 2009-05-17 13:35:28
jeśli zasługujesz na tę 6 to powinieneś nie mieć z tym problemu:)
poza tym nie używaj system() bo nowsze antyviry uznają takie programy
za potencjalnie niebezpieczne lub wirusy a nawet mogą nie pozwolić na
uruchomienie programu. używaj getch() bo pozwala na odczytywanie kodu
wciśniętego klawisza lub módl się aby nauczyciel który ma sprawdzać ten
program nie używał oprogramowania antywirusowego z heurystyczną kontrolą
aplikacji:)
P-6952
bartek9393
Temat założony przez niniejszego użytkownika
» 2009-05-17 20:06:10
ok, dzieki, juz załapałem, ale chyba zrezygnuje z tego programu ;(
może wymyśle jakiś inny
a na 6 z informatyki chyba zasługuje, bo inni w moiej klasie, nawet nie wiedzą co to jest c++, a nauczyciela mam spoko, 6 mi postawi, bo już 3 rok robie programy (chodze do 3 kl gimnazjum) i mi zawsze stawiał, tylko musze jakiś program mu zanieść.
kurde, tylko nie mam pomysłu na program
pomóżcie, co można wymyśleć???
z góry dzięki za odpowiedź!
P-6973
TomekU
» 2009-05-17 20:15:18
Mozesz napisac prosta baze danych (np. ksiazke telefoniczna). Wystarczy samo dodawanie/usuwanie i edytowanie rekordow. Wszystko to zapisuj w pliku .txt
Mozesz tez napisac sobie jakas klase matematyczna/fizyczna/jaka_chcesz. Nie patrz na to ze istnieja juz takie, wazny jest trening i ocena na ktorej Ci zalezy.
P-6975
« 1 » 2
  Strona 1 z 2 Następna strona