Witam. Mam pewien problem, mianowicie nie mam zielonego pojecia jak wczytac dane z pliku pod odpowiednie zmienne. Z calego zdania mam zrobic jakby 4 zmienne.
Przyklad:
w pliku:Jan Kowalski 17 20.8
imie=Jan
nazwisko=Kowalski
wiek=17
skutecznosc 20.8
Ktos wie jak to zrobic?? Z gory dzieki za pomoc :P
Najlepiej żebyś sam się pomęczył. Wtedy będzie największa satysfakcja. Ale nakieruję Ciebie. Jeśli tekst w pliku wygląda tak jak podałeś, czyli między wyrazami i '=' nie ma żadnych odstępów, to jedyna opcja pobierać linie, obcinać zmienną typu string metodą substring() i może jakimś licznikiem ładować do odpowiednich zmiennych. A gdybyś np. miał tam odstępy i wtedy nie musiałbyś obcinać tego tekstu, to może załadować plik do obiektu typu Scanner i wtedy czytać co odstęp i określić co który raz ma ładować tekst do zmiennej. To na szybko coś na yt. . Przerób sobie to z filmiku i będzie OK.
szukajka niedziała? Tutaj
Kilka luźnych uwag ode mnie:
- Czytaj plik linia po linii (poszukaj, jest duuużo przykładów). Jeżeli zupełnie nie wiesz - coś można podpowiedzieć, ale warto najpierw spróbować zdobyć wiedzę samemu.
- Pomoże Ci metoda
split
klasyString
- rozbije wiersz według spacji i wpakuje wartości do tablicy. Wtedy już jesteś właściwie w domu - możesz przypisać wartości tablicy do zmiennych lub zrobić z nimi cokolwiek innego. - Jeżeli potrzebujesz zrobić z ciągu znaków liczbę, to każda podklasa
Number
ma jakąś metodęparse
.
Powodzenia!
Dziekuje za wszelkie uwagi i rady. Wiadomo, jesli do czegos dojdzie sie samemu to dluzej mozna zapamietac jak to sie zrobilo :P
Niestety nadal nie wiem jak zrobic to zadanie. Jesli chodzi o substring to z tego co przeczytalem wczytuje ona litery jedna po drugiej a nie wszystkie na raz. Czytalem tez o fukncji StringTokenizer ale rowniez nie wiem jak sie tym poslugiwac. Zdanie jest juz wczytane ale dalsze pytanie, jak je podzielic i zapisac pod konkretne zmienne??
@chrupek97: Tak jak pisałem, w tym wypadku split
to najprostszy sposób, żeby zrobić to, czego potrzebujesz :) StringTokenizer
to starsza klasa, umiarkowanie wygodna w obsłudze, w dodatku jej używanie w nowym kodzie jest obecnie odradzane, z kolei substring
pozwala wyciąć fragmenty ciągu znaków, pod warunkiem, że wiesz o jaki fragment Ci chodzi (czyli znasz indeks początkowy/końcowy) ;) więc w Twoim przypadku nie zda się na nic.
Poniżej króciutki przykład użycia split
final String line="Jan Kowalski 17 20.8";
final String[] data=line.split("\\s+");
for(int i=0; i< data.length; i++) {
System.out.println(String.format("data[%d]: %s", i, data[i]));
}
Da to następujący wynik:
data[0]: Jan
data[1]: Kowalski
data[2]: 17
data[3]: 20.8
Uwaga: użycie wywołania line.split(" ")
też by zadziałało w tym konkretnym przypadku, ale użycie wyrażenia regularnego \s+
sprawia, że jeśli spacji będzie więcej (lub byłby to jakiś inny rodzaj białego znaku), program nadal zadziała prawidłowo.
Działaj i pytaj w razie czego.
Niestety nadal nie moge skonczyc tego programu. Ma on na celu pobrac dane osobowe z pliku i wypisac osoby ktorych dlugosc imienia jest wieksza od 3, nazwisko konczy sie na "ski" oraz osoba ta ma najwieksza skutecznosc. W momencie gdy chce skompilowac plik przy ifie zaznaczonym na czerwono pojawia sie zarowka z ostrzezeniem i komunikatem Invert if i Flip operands of the binary operator.
Ciężko patrząc na ten kod powiedzieć, co ten program właściwie próbuje zrobić (brzmi to trochę inaczej od tego, co pisałeś wcześniej). Poustawiaj breakpointy, użyj debuggera i sprawdź co dokładnie robi Twój program. Kto wie, może sam się zdziwisz ;)