Ĺadny brzuch
Witam, mimo wielu prób nie potrafię znaleźć rozwiązania na mój problem. Otóż mam plik, jego zawartość to mniej więcej:
2000-01-01 9 19 22 23 34 39 2000-01-05 3 5 13 23 41 42 2000-01-08 4 6 26 27 42 49 2000-01-12 4 22 36 39 41 45 2000-01-15 15 22 24 29 37 44 2000-01-19 22 23 24 29 30 45 2000-01-22 1 2 16 29 33 42
Są to losowania lotto, najpierw data, potem wylosowane liczby.
I teraz chciałbym wyczytać ten plik a następnie dane te przenieść do klasy ( w zasadzie tablicy obiektów tej klasy ):
class losowanie { public: char linia[255]; char data; int l1; int l2; int l3; int l4; int l5; int l6; };
Tak wyczytuje linijki (oczywiście zapętlone to jest):
char str[255]; ifstream plik; plik.open("lotto.txt"); plik.getline(str,255); plik.close();
Wydaje mi się, że najlepszym rozwiązanie było by użycie zmiennej typu string, więc tak też próbowałem, ale podczas próby wczytania danych z pliku string (dane.c_str() ) wyskakuje błąd:
error C2664: 'class istream &__thiscall istream::getline(char *,int,char)' : cannot convert parameter 1 from 'const char *' to 'char *'
Próbowałem także z tablica etc i nic z tego... Może ktoś z was wie jak doczytać plik linijka po linijce i odpowiednio rozdzielić te dane?
(to jest zadanie z matury próbnej z informatyki)
1) Jeśli chcesz czytać do stringa całą linię razem ze spacjami itd.
// zamiast plik.getline(dane.c_str(), 255) //co nie działa // użyj getline(plik, dane);
2) Skoro w każdej linijce jest zawsze tyle samo danych, można się skusić o coś prostego
ifstream plik; string data; int l1, l2, l3, l4, l5, l6; plik.open("in.txt"); for (int i = 0; i < ILE_LINII; ++i) { plik >> data >> l1 >> l2 >> l3 >> l4 >> l5 >> l6; // rób coś z tymi danymi }
Nie wiem czemu, ale w Visual C++ po użyciu samego getline() wyskakuje mi błąd, że nie ma takie metody.
D:\Documents and Settings\Robert\Pulpit\matura.cpp(36) : error C2065: 'getline' : undeclared identifier
Wszystko includowałeś? To coś powinno się skompilować:
#include <fstream> #include <string> using namespace std; int main() { ifstream plik; string buf; plik.open("in.txt"); getline(plik, buf); plik.close(); return 0; }
Ok, zadziałało. Dzięki za pomoc, okazało się ze program się nie kompiluje, gdyż mam fstream.h he? ;] po zmianie na po usunięciu .h wszystko jest ok.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
2000-01-01 9 19 22 23 34 39 2000-01-05 3 5 13 23 41 42 2000-01-08 4 6 26 27 42 49 2000-01-12 4 22 36 39 41 45 2000-01-15 15 22 24 29 37 44 2000-01-19 22 23 24 29 30 45 2000-01-22 1 2 16 29 33 42
Są to losowania lotto, najpierw data, potem wylosowane liczby.
I teraz chciałbym wyczytać ten plik a następnie dane te przenieść do klasy ( w zasadzie tablicy obiektów tej klasy ):
class losowanie { public: char linia[255]; char data; int l1; int l2; int l3; int l4; int l5; int l6; };
Tak wyczytuje linijki (oczywiście zapętlone to jest):
char str[255]; ifstream plik; plik.open("lotto.txt"); plik.getline(str,255); plik.close();
Wydaje mi się, że najlepszym rozwiązanie było by użycie zmiennej typu string, więc tak też próbowałem, ale podczas próby wczytania danych z pliku string (dane.c_str() ) wyskakuje błąd:
error C2664: 'class istream &__thiscall istream::getline(char *,int,char)' : cannot convert parameter 1 from 'const char *' to 'char *'
Próbowałem także z tablica etc i nic z tego... Może ktoś z was wie jak doczytać plik linijka po linijce i odpowiednio rozdzielić te dane?
(to jest zadanie z matury próbnej z informatyki)
1) Jeśli chcesz czytać do stringa całą linię razem ze spacjami itd.
// zamiast plik.getline(dane.c_str(), 255) //co nie działa // użyj getline(plik, dane);
2) Skoro w każdej linijce jest zawsze tyle samo danych, można się skusić o coś prostego
ifstream plik; string data; int l1, l2, l3, l4, l5, l6; plik.open("in.txt"); for (int i = 0; i < ILE_LINII; ++i) { plik >> data >> l1 >> l2 >> l3 >> l4 >> l5 >> l6; // rób coś z tymi danymi }
Nie wiem czemu, ale w Visual C++ po użyciu samego getline() wyskakuje mi błąd, że nie ma takie metody.
D:\Documents and Settings\Robert\Pulpit\matura.cpp(36) : error C2065: 'getline' : undeclared identifier
Wszystko includowałeś? To coś powinno się skompilować:
#include <fstream> #include <string> using namespace std; int main() { ifstream plik; string buf; plik.open("in.txt"); getline(plik, buf); plik.close(); return 0; }
Ok, zadziałało. Dzięki za pomoc, okazało się ze program się nie kompiluje, gdyż mam fstream.h he? ;] po zmianie na po usunięciu .h wszystko jest ok.