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

Wczytywanie danych do bazy

Ostatnio zmodyfikowano 2017-11-19 22:52
Autor Wiadomość
Roud
Temat założony przez niniejszego użytkownika
Wczytywanie danych do bazy
» 2017-11-19 14:12:23
Witam. Mam taki problem. Mam plik z imionami, nazwiskami, stanowiskami itd. Chciałem to z pliku wczytać do struktury. Jak to zrobić? Wiem, że plik sięczyta tak
C/C++
plik.open( "nazwa", ios::in );
if( plik.good() == true )
{
    while( !plik.eof() )
    {
        getline( plik, linia );
        cout << linia << endl;
    }
    plik.close();
}
Dane mam wypisane w taki sposób:
1. Imie 2. Nazwisko 3.Stanowisko i tak dalej. W sumie 10x10 pozycji. Da się jakoś zrobić zeby przeszukiwał mi plik i wczytywał do bazy?
P-166973
YooSy
» 2017-11-19 14:52:42
Da.
Jak konkretnie wygląda plik?
W jakim celu i wg jakich kryteriów będzie przeszukiwany plik.
Ile danych będzie w pliku?
P-166975
Roud
Temat założony przez niniejszego użytkownika
» 2017-11-19 15:01:15
Na początku napisałem sobie program, w którym mogłem sobie wypisać te dane i teraz chciałbym w drugim programie wczytać te dane do struktury. Mniej więcej tak:
C/C++
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;

struct Adres {
    int NrDomu;
    int NrLokalu;
    string Ulica;
    string Miasto;
};
struct Pracownik
{
    string imie;
    string nazwisko;
    string stanowisko;
    Adres adres;
    double StazPracy;
    double Pobory;
    double dodatki;
};

int main()
{
    int i = 0;
    int const maximum = 100;
    Pracownik baza[ maximum ];
   
    cin.clear();
    cin.sync();
    fstream plik;
    plik.open( "nazwa", ios::out );
    for( i = 0; i < 10; i++ )
    {
        cout << i + 1 << "-ty pracownik " << endl;
        plik << i + 1 << ".";
        cout << "podaj imie ";
        getline( cin, baza[ i ].imie );
        plik << "Imie: " << baza[ i ].imie << endl;
        ...
    }
    plik.close();
    system( "pause" );
    return 0; //wypisywanie danych
   
   
}
Teraz chciałbym z powstałego pliku wczytać dane po to aby wg podanego kryterium posortować dane np.: nazwiska alfabetycznie albo pensja od najmniejszej do największej. Jednak nie potrafie tego wczytać. Jest wypisane 10 osób czyli w sumie 10x10 linijek.
Myślałem np o tym, żeby w pętli for wypisał mi
C/C++
baza[ i ].imie = linijka 1
baza[ i ].nazwisko = linijka 2
 
P-166976
YooSy
» 2017-11-19 20:25:06
Jeszcze najważniejsze. Jak zapisane są dane w pliku.
Zresztą wpierw musisz te dane do pliku zapisać, więc odczytuj je analogicznie.

Można skorzystać z boost serialization.

W kodzie brakuje
#include <string>
, aby poprawnie obsługiwać
std::string
 oraz
std::getline()
.

plik.open( "nazwa", ios::out );
Brakuje rozszerzenia w nazwie pliku. Jeśli definiujesz plik tylko do zapisu, skorzystaj z obiektu
std::ofstream
.

Podziel kod na funkcje. Pisanie kodu spagetti w funkcji głównej jest złą praktyką.
P-166986
Roud
Temat założony przez niniejszego użytkownika
» 2017-11-19 22:52:14
zrobiłem to tak:
C/C++
while( !plik.eof() )
{
    getline( plik, linia );
    baza[ i ].imie = linia;
    getline( plik, linia );
    ...
    getline( plik, linia );
    a = atoi( linia.c_str() );
    baza[ i ].adres.NrDomu = a;
    ...
}
plik.close();
Reszte dodałem dziękuje.
P-166992
« 1 »
  Strona 1 z 1