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

[C++] Wczytywanie danych z pliku

Ostatnio zmodyfikowano 2020-04-13 12:48
Autor Wiadomość
Biedrzyk
Temat założony przez niniejszego użytkownika
[C++] Wczytywanie danych z pliku
» 2020-04-11 13:01:03
Witam,
utworzyłem w moim programie funkcję, która ma wczytywać przy każdym uruchomieniu programu zawartość książki adresowej z pliku( dane zapisane przy poprzednich uruchomieniach programu). W pliku zapis wygląda następująco:
1|Jan|Kowalski|123456789|jan@kowalski.pl|ul. Stara, 11-111 Wrocław|. Po odpaleniu ma wczytać wszystkie osoby do wektora żeby przy dodaniu kolejne numeracja nie zaczynała się od 1 tylko była o jeden większa niż poprzedni wpis. Niestety po uruchomieniu programu zawartość wektora jest równa 0 więc nie działa, czy ktoś mógłby mi pomóc i wyjaśnić dlaczego? Zmienna iloscAdresatow to oczywiście wielkość wektora. Podaję kod poniżej:

C/C++
void wczytajAdresatow( vector < Adresat > & adresaci )
{
    Adresat adresat;
    char znak = '|';
    int iloscAdresatow = 0;
    int iloscZnakow = 0;
    string wycinekLinii;
   
    fstream plik;
    ifstream( "KsiazkaAdresowa.txt" );
   
    if( plik.good() == true )
    {
        while( getline( plik, wycinekLinii, znak ) )
        {
            switch( iloscZnakow )
            {
            case 0:
                adresat.id = atoi( wycinekLinii.c_str() );
                break;
            case 1:
                adresat.imie = wycinekLinii;
                break;
            case 2:
                adresat.nazwisko = wycinekLinii;
                break;
            case 3:
                adresat.nr_tel = wycinekLinii;
                break;
            case 4:
                adresat.email = wycinekLinii;
                break;
            case 5:
                adresat.adres = wycinekLinii;
                break;
            }
            if( wycinekLinii == " " )
            {
                iloscZnakow = 0;
                adresaci.push_back( adresat );
            }
            else
            {
                iloscZnakow++;
            }
        }
        plik.close();
    }
}

Adresat to struktura:
C/C++
struct Adresat
{
    int id = 0;
    string imie = "", nazwisko = "", nr_tel = "", email = "", adres = "";
};
P-176635
RazzorFlame
» 2020-04-11 23:08:17
C/C++
fstream plik;
ifstream( "KsiazkaAdresowa.txt" );
Nie tak otwiera się pliki. Sprawdź w kursie jak to ma wyglądać poprawnie. Problemem jest to, że ta druga linia w żaden sposób nie ma wpływu na obiekt plik. Tworzy ona inny, nienazwany obiekt, który od razu jest niszczony. No i oprócz tego, weź pod uwagę, że typ fstream to inny typ niż ifstream.

I zamiast atoi użyj std::stoi.
P-176637
Biedrzyk
Temat założony przez niniejszego użytkownika
» 2020-04-13 12:48:15
Zmieniłem tak jak pisałeś ale nadal wektor jest pusty, nie odczytuje mi kompletnie nic :/ Plik jest tworzony przez inna funkcję w katalogu roboczym programu, mam wpisanych 10 pozycji. Po ponownym uruchomieniu programu nie wczytuje mi zapisanych ju.ż danych i numeruje kolejne wpisy od początku :/ A dlaczego nie mogę użyć atoi? przy użyciu stoi i dodaniu biblioteki string dostaję taki komunikat:


error: 'stoi' was not declared in this scope|

C/C++
int wczytajAdresatow( vector < Adresat > & adresaci )
{
    Adresat adresat;
    char znak = '|';
    int iloscAdresatow = 0;
    int iloscZnakow = 0;
    string wycinekLinii = "";
   
    ifstream plik;
    plik.open( "KsiazkaAdresowa.txt" );
   
    while( getline( plik, wycinekLinii, znak ) )
    {
        switch( iloscZnakow )
        {
        case 0:
            adresat.id = atoi( wycinekLinii.c_str() );
            break;
        case 1:
            adresat.imie = wycinekLinii;
            break;
        case 2:
            adresat.nazwisko = wycinekLinii;
            break;
        case 3:
            adresat.nr_tel = wycinekLinii;
            break;
        case 4:
            adresat.email = wycinekLinii;
            break;
        case 5:
            adresat.adres = wycinekLinii;
            break;
        }
        if( wycinekLinii == " " )
        {
            adresaci.push_back( adresat );
            iloscZnakow = 0;
        }
        else
        {
            iloscZnakow++;
        }
    }
    plik.close();
    return iloscAdresatow;
}
P-176640
« 1 »
  Strona 1 z 1