Wczytywanie danych do bazy
Ostatnio zmodyfikowano 2017-11-19 22:52
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 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? |
|
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?
|
|
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: #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; }
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 baza[ i ].imie = linijka 1 baza[ i ].nazwisko = linijka 2
|
|
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ą. |
|
Roud Temat założony przez niniejszego użytkownika |
» 2017-11-19 22:52:14 zrobiłem to tak: 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. |
|
« 1 » |