[C++] Zapis danych ze strumienia, do osobnych obiektów w klasie
Ostatnio zmodyfikowano 2015-05-22 21:04
GigaByte23 Temat założony przez niniejszego użytkownika |
[C++] Zapis danych ze strumienia, do osobnych obiektów w klasie » 2015-05-22 14:41:18 Witam Szanownych Forumowiczów! Szlifuję w tej chwili tematy obsługi wyjścia/wejścia, Otóż mam w tej chwili małą zagwoztkę, prawdopodobnie błahy problem. Chcę w programie wczytać dane (w tym przypadku produkty wraz z ceną) z pliku tekstowego o następującej treści: Produkt 1 19,99 Produkt 2 25,99 Produkt 3 13,00 ...
Do klasy, przy czym każdy produkt jako osobny obiekt: (a obiektem będzie "Produkt + CENA") class items { std::string item_name; double item_price; public: items(); items( std::string it_name, std::string it_price ); void load(); };
Przy czym, za bardzo nie orientuję się Jak automatycznie wczytać dane jako osobne obiekty (np. o1, o2 itd.), podając jedynie plik (ścieżkę do pliku) bez deklarowania ich w "int main();" |
|
JMII89 |
» 2015-05-22 14:48:45 Przejedź się po pliku , zlicz ilość produktów i stwórz dynamicznie obiekty klasy.Potem w pętli możesz się do nich odwołać. |
|
GigaByte23 Temat założony przez niniejszego użytkownika |
» 2015-05-22 17:04:26 Co do zliczania produktów - ten fakt nigdy nie będzie na sztywno, bo użytkownik będzie dopisywał do pliku produkty, ewentualnie usuwał. Wydziergałem coś takiego: void items::load( string _p ) { string _path = _p; fstream tempFile; tempFile.open( _path, ios::in ); if( tempFile.good() == false ) { perror( "Blad lub niewlasciwy plik!" ); exit( 1 ); } string streambuf; int tmp = 0; while( getline( tempFile, streambuf ) ) { if( tmp % 2 == false ) { item_name = streambuf; } if( tmp % 2 == true ) { item_price = streambuf; }; tmp++; } tempFile.close(); streambuf.clear(); }
Z tymże w dalszym ciągu nie wiem jak stworzyć nowe obiekty, ani też nie mam kontroli nad tym co wczytuje. |
|
JMII89 |
» 2015-05-22 21:04:32 Możesz zrobić coś takiego. Jednak lepiej użyć vectora , niż starych wskaźników. items::items( std::string temp_nazwa, double temp_item_price ) { item_name = temp_nazwa; item_price = temp_item_price; }
std::string linia; int line = 0; std::vector < items > Items;
std::string temp_nazwa; double temp_item_price;
while( getline( plik, linia ) ) { if( line % 2 == 0 ) { temp_nazwa = linia; } else { temp_item_price = atof( linia.c_str() ); Items.push_back( items( temp_nazwa, temp_item_price ) ); } line++; }
Wtedy możesz używać normalnie metody push_back i dodawać produkty do vectora lub je usuwać . |
|
« 1 » |