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

[C++] Wczytanie danych z pliku

Ostatnio zmodyfikowano 2010-05-12 21:15
Autor Wiadomość
bartek483
Temat założony przez niniejszego użytkownika
[C++] Wczytanie danych z pliku
» 2010-05-11 23:53:07
Witammm

Mam problem z odczytaniem z pliku danych a dokladniej jednego elementu, drugi parametr konstruktora (nazwa) jesli ktos by mogl mi dac wskazowke gdzie szukac bledu bede baaaaardzo wdzieczny :):) Podaje kod ( niestety zapomnialem jakie sa tu znaczniki na kod ):

C/C++
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

enum Kategoria
{
    Informacje = 0,
    Rozrywka,
    Film,
    Muzyka,
    Inne
};
//////////////////////////////////////////////////////////////
class Kanal
{
public:
    Kanal( const int _numer, const char * _nazwa, const double _hz, Kategoria _o );
    int odczyt_kanal() const { return nr_kanal; }
    char * odczyt_nazwa() const { return nazwa; }
    double odczyt_hz() const { return Hz; }
    int odczyt_o() const { return o; }
    void Wyswietl() const;
    ~Kanal() { delete[] nazwa; }
   
private:
    int nr_kanal;
    char * nazwa;
    double Hz;
    Kategoria o;
};
//////////////////////////////////////////////////////////////
Kanal::Kanal( const int _numer, const char * _nazwa, const double _hz, Kategoria _o )
    : nr_kanal( _numer )
    , Hz( _hz )
    , o( _o )
{
    nazwa = new char[ 40 ];
    strcpy( nazwa, _nazwa );
}
//////////////////////////////////////////////////////////////
void Kanal::Wyswietl() const
{
    cout << nr_kanal << " " << nazwa << " " << Hz << " ";
    if( o == 0 ) cout << "Informacje.";
    else if( o == 1 ) cout << "Rozrywka.";
    else if( o == 2 ) cout << "Film.";
    else if( o == 3 ) cout << "Muzyka.";
    else if( o == 4 ) cout << "Inne.";
   
}
//////////////////////////////////////////////////////////////
class Telewizor
{
public:
    vector < Kanal > wektor;
    void Wczytaj( const char * _plik );
    void Zapisz( const char * _plik2 );
    void Wypisz() const;
};
//////////////////////////////////////////////////////////////
void Telewizor::Wypisz() const
{
    for( size_t i = 0; i < wektor.size(); ++i )
         wektor[ i ].Wyswietl();
   
}
//////////////////////////////////////////////////////////////
void Telewizor::Zapisz( const char * _plik2 )
{
    ofstream plik;
    plik.open( _plik2, ios::out );
   
    for( size_t i = 0; i < wektor.size(); ++i )
    {
        plik << wektor[ i ].odczyt_kanal() << " " << wektor[ i ].odczyt_nazwa()
        << wektor[ i ].odczyt_hz() << " ";
        if( wektor[ i ].odczyt_o() == 0 )
             plik << "Informacje.";
        else if( wektor[ i ].odczyt_o() == 1 )
             plik << "Rozrywka.";
        else if( wektor[ i ].odczyt_o() == 2 )
             plik << "Film.";
        else if( wektor[ i ].odczyt_o() == 3 )
             plik << "Muzyka.";
        else if( wektor[ i ].odczyt_o() == 4 )
             plik << "Inne.";
       
    }
    cout << "Zapisano do pliku ..\n";
    plik.close();
}
//////////////////////////////////////////////////////////////
void Telewizor::Wczytaj( const char * _plik )
{
    ifstream plik2;
    plik2.open( _plik, ios::in );
   
    int _numer;
    double _hz;
    char _nazwa[ 40 ];
    Kategoria _o;
    char O[ 32 ];
   
    if( plik2.good() )
    {
        while( !plik2.eof() )
        {
            plik2 >> _numer;
            plik2 >> _nazwa;
            plik2 >> _hz;
            plik2 >> O;
           
            if( strcmp( O, "Informacje." ) == 0 ) _o = Informacje;
            else if( strcmp( O, "Rozrywka." ) == 0 ) _o = Rozrywka;
            else if( strcmp( O, "Film." ) == 0 ) _o = Film;
            else if( strcmp( O, "Muzyka." ) == 0 ) _o = Muzyka;
            else if( strcmp( O, "Inne." ) == 0 ) _o = Inne;
           
            Kanal T( _numer, _nazwa, _hz, _o );
            wektor.push_back( T );
        }
    }
    else cout << "Error .. " << __LINE__ << '\n';
   
    plik2.close();
}
//////////////////////////////////////////////////////////////
int main( int argc, char * argv[] )
{
    Telewizor obiekt;
    //obiekt.Zapisz( "plik.txt" );
    obiekt.Wczytaj( "plik.txt" );
    obiekt.Wypisz();
   
    return 0;
}
P-16793
GoldWolf
» 2010-05-12 07:49:25
Spróbuj przeanalizować mój kod mam tam właśnie dostęp do odpowiednich danych w pliku(tego co sam chce odczytać). http://forum.ddt.pl/?Tid=465
Niestety kod jest w Borlandzie i możesz mieć problem z jego analizą.
P-16795
malan
» 2010-05-12 15:24:02
1. Co to za problem?
2. Spróbuj wyzerować zmienną nazwa (pętlą :)) i użyć strncpy
3. Jeżeli punkt 2 nie pomógł daj przykładowe dane, które powinny znaleźć się w pliku.
4. :)
P-16797
bartek483
Temat założony przez niniejszego użytkownika
» 2010-05-12 17:26:59
1. Tak jak pisalem, nie moze wczytaj nazwy, choc jak podam mu wiecej niz 1 linie w pliku to kompletnie nic nie odczytuje.
2. Wyzerowanie zmiennej nie pomoglo, funkcja strncpy rowniez.

Podaje przykladowa tresc pliku:

01 TVN 65.54 Film.
02 TVN4 45.87 Muzyka.
03 TVP1 54.65 Informacje.
P-16799
malan
» 2010-05-12 20:31:20
Jestem w domu ;D (tzn. znalazłem błąd) :).
Gotowca Ci nie dam - zapomnij ;). Przeanalizuj sobie funkcję Wczytaj- najlepiej tutaj napisz co się dzieje (po kolei) kiedy program wykonuje funkcję (szczególnie co robi po wyjściu) :).
P-16802
bartek483
Temat założony przez niniejszego użytkownika
» 2010-05-12 20:48:38
Zbreakpointowalem i okazalo sie ze desruktor za szybko dziala i usuwa 'nazwe' :D oczywiscie zadzialalo, malan o to Ci chodzilo?;>

PS: Na gotowca nigdy nie oczekuje [;
P-16803
malan
» 2010-05-12 21:07:52
Tak :). Wstawiłem do destruktora tekst i zobaczyłem, że trochę za dużo razy się wywołuje :).
Temat rozwiązany? ;)
P-16804
bartek483
Temat założony przez niniejszego użytkownika
» 2010-05-12 21:15:30
Tak, rozwiazany :) dzieki :)
P-16805
« 1 »
  Strona 1 z 1