wczytywanie pliku -> struktura danych???

0

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 !!!

0

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
}
0

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 !!!!!

0
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.

0

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 !!!!

0

ok, juz wiem
ale musze podawac rozmiar tablicy ;/

String tab[]= new String[10];

nie ma czegos dynamicznego??
dzieki

0

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++;
}
0

heh
czytam, czytam
akurat zliczanie wyrazów w wierszu już zrobilem, innym sposobem, ale dzięki za sugestie !!!
dzięki za pomoc

0
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ą.

0

Do tak prostych tokenizacji najlatwiej uzywac:

String[] tokens = line.split(",");

i koniec, masz tablice tokenow. Jest "dynamiczne" ;-)

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1