mam nastepujacy problem,
w pliku mam dane w postaci, np:
aa,bb,ccc,ddd,eee,fff,ddd, hghghh, jjh
ggg,hh,yyy,uuu,aaa
itd....
liczba pol w wierszu nie jest zmienna
kazdy wiersz to osobny rekord z bazy, mam wykonywac jakies operacje na tych malych czlonach
pytanie, co najlepiej wykorzystac, aby najlatwiej mozna bylo tymi danymi operowac/porownywac itd...
nie musi to byc optymalne rozwiazanie, wazne, zeby dostep do tych pol byl latwy ....
no i w jaki spsob wczytac ten plik??
dzieki za pomoc !!!
Odczyt pliku możesz zrealizować tak:
try {
BufferedReader in = new BufferedReader(new FileReader("infilename"));
String str;
while ((str = in.readLine()) != null) {
//tu przetwarzasz wczytaną linię
}
in.close();
} catch (IOException e) {
}
Uwaga linia z while powinna wyglądać tak: while ((str = in.readLine()) != null)
Przetwarzanie lini możesz zrealizować na klasie StringTokenizer, która podzieli Ci wiersz na wyrazy:
StringTokenizer st = new StringTokenizer(str,",");
while (st.hasMoreTokens()){
String wyraz = st.nextToken();
//przetwarzanie wyrazu
}
ok, wczytywanie spoko
ale pytanie odnosine tokenizerow, jeszcze ich nie uzywalem
zaraz cos poszukam, ale moze na szybko zadam nastepne pytanie
jak moge sie odwolywac do stringa w kazdym tokenizerze???
jest jakis indeks??
czy tylko jakis next, previous....???
zalezy mi, zeby dostep do stringow w poszczegolnych tokenizerach byla w miare latwy, bo musze na nich sporo rzeczy wukonywac ....
dzieki za pomoc !!!!!
gerym napisał(a)
jak moge sie odwolywac do stringa w kazdym tokenizerze???
jest jakis indeks??
czy tylko jakis next, previous....???
Jest tylko next. Możesz utworzyć sobie tablicę stringów. Ilość wyrazów zwróci Ci StringTokenizer metodą countTokens(). W pętli while przypiszesz sobie kolejne elementy do tablicy i gotowe. Innym rozwiązaniem podziału jest metoda split z klasy String, której parametrem jest wyrażenie regularne a wynikiem tablica stringów.
w jaki sposob utworzyc tablice stringow??
jesli juz sie dowiem jak to zrobic, to przypisywac kolejnym indeksow tablicy stringi w tej petli z tokenizerem??
w tej petli moze byc mniej wiecej cos takiego:
char tab[rozmiar];
while(.......)
{
char[i]=st.nextToken();
i++;
}
??
ale musze znac wczesniej rozmiar tablicy, ArrayList jest chyba dynamiczne ....
dzieki za pomoc !!!!
ok, juz wiem
ale musze podawac rozmiar tablicy ;/
String tab[]= new String[10];
nie ma czegos dynamicznego??
dzieki
Nie czytasz dokładnie tego, co Ci napisałem.
Luuki napisał(a)
Ilość wyrazów zwróci Ci StringTokenizer metodą countTokens().
Czyli deklaracja tablicy na wyrazy będzie wyglądać tak:
String tab[]= new String[st.countTokens()];
Pętla tworząca tablicę:
StringTokenizer st = new StringTokenizer(str,",");
int i=0;
String wyrazy[]= new String[st.countTokens()];
while (st.hasMoreTokens()){
wyrazy[i] = st.nextToken();
i++;
}
heh
czytam, czytam
akurat zliczanie wyrazów w wierszu już zrobilem, innym sposobem, ale dzięki za sugestie !!!
dzięki za pomoc
gerym napisał(a)
ok, juz wiem
ale musze podawac rozmiar tablicy ;/
String tab[]= new String[10];
nie ma czegos dynamicznego??
dzieki
Czytasz, czytasz ale niedokładnie ;), bo odpowiedź na w/w pytanie już miałeś napisaną.
Do tak prostych tokenizacji najlatwiej uzywac:
String[] tokens = line.split(",");
i koniec, masz tablice tokenow. Jest "dynamiczne" ;-)
Gerym. Tez jakis czas temu miałem taki sam problem. Jeżeli każda linijka to oddzielny rekord i danymi, to moze wygodniejsze będzie takie rozwiązanie:każdy rekord to oddzielny obiekt z polamia danych. następnie każdy obiekt zapisujesz do ArrayList(dzięki ArayList niemusisz podawac jej wielkosci ), a następnie do pliku zapisywac ArrayList.