Pobranie danych z pliku i zapis w tablicy

Odpowiedz Nowy wątek
2019-01-03 23:36
0

Nie mam pomysłu jak rozwiązać problem z wczytaniem danych z pliku do HashMap. Plik ma rozszerzenie txt.gz, więc rozpakowuję go tak:

in = new BufferedReader(
                        new InputStreamReader(new GZIPInputStream(new FileInputStream(fc.getSelectedFile()))));

Plik ma taką strukturę, że 1 i 2 linijka to inta reszta to int i ileś tam double i chciałbym te double własnie wpakować jako valuedo HashMapy, gdzie key to ten int z początku linijki.
Przykład tego pliku :

10
20 
0 1.1 2.4 0.567566 ....
1 0.565656 7.89989 ...
...

Będę wdzięczny za pomoc

edytowany 3x, ostatnio: Mattii4211, 2019-01-03 23:56
czyli chcesz od 3 wiersza wczytywać 1 wartość jako key a pozostale wartości z linijki do value jako tablica, to w czym problem? - Julian_ 2019-01-04 08:54
No taki, że kompletnie nie wiem jak to zrobić :( - Mattii4211 2019-01-04 12:29

Pozostało 580 znaków

2019-01-04 12:41
0

A z czym masz problem? Może zacznij od wypisania tych wartości na konsolę, później się będziesz przejmować hashmapą.

Pozostało 580 znaków

2019-01-04 12:58
0

Problem mam nawet z pętlą, bo jak próbowałem tak:

try {
                in = new BufferedReader(
                        new InputStreamReader(new GZIPInputStream(new FileInputStream(fc.getSelectedFile()))));
                numberOfBalls = Integer.parseInt(in.lines().skip(0).findFirst().get());
                numberOfParts = (int) in.lines().count() - 2;
                    try {
                        Scanner sc = new Scanner(in);
                        int line = 0, i = 0;
                        while (sc.hasNextLine()) {
                            if(line > 1) {
                                positions.put(i, new ArrayList<>());
                                while(sc.hasNextDouble()) {
                                    positions.get(i).add(sc.nextDouble());
                                }
                                i++;
                            }
                            line++;
                        }
                        sc.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                System.out.println("Nie mogę otworzyć pliku: " + fc.getSelectedFile().getAbsolutePath());
                System.out.println("Problem: " + e1);
            }

to zupełnie nie działa, jeśli tak while(in.readLine() != null) to też nie, bo zawsze był null także już zupełnie nie mam pomysłów

Pozostało 580 znaków

2019-01-04 16:54
0

@Mattii4211: to zacznij od początku.

  1. Usuń wszystko. Mówiąc wszystko mam na myśli dosłownie wszystko.
  2. Utwórz prosty plik csv zawierający jedną liczbę (NIE ZGZIPOWANY)
  3. Spróbuj ją przeczytać i wyświetlić.
  4. Zgzipuj plik
  5. Teraz powtórz 2 i 3.
  6. Dodaj drugą liczbę. Spróbuj wyświetlić obie.
  7. Spróbuj zapakować te liczby do tablicy.
  8. Dodaj kilka takich linijek i spróbuj wszystko zapakować do tablicy.
  9. I tak dalej...
  10. I tak dalej...

Powoli dodawaj kolejne rzeczy. Będzie Ci znacznie łatwiej jak gdzieś utkniesz, bo krok wcześniej będziesz miał w 100% działający kod, który w 100% rozumiesz. Teraz nic Ci nie działa i nic też nie rozumiesz. Zapamiętaj tą taktykę, bo Ci się przyda w życiu :)

edytowany 3x, ostatnio: Desu, 2019-01-04 16:56

Pozostało 580 znaków

2019-01-04 17:04
0

No wszystko fajnie ale ja po prostu nie wiem jak tym BufferedReader czytać liczby. Ot cały mój problem. Także twój sposób za bardzo sytuacji nie rozjaśnił

więć źle zadałeś pytanie... najpierw pogooglaj jak BufferedReaderem czytać liczby i ewentualnie jak czytać liczby innymi sposobami. Jak będziesz miał z tym problem to zapytaj o to. Pytaj o najmniejszą rzecz z jaką se nie radzisz i składaj po kolei klocek aż rozwiążesz całość. - Julian_ 2019-01-04 17:52
Googlam cały czas :( Mogę każdą linijkę zapisać w tablicy String i później pociąć po spacjach tylko tak też mi nie wychodziło ... - Mattii4211 2019-01-04 18:00

Pozostało 580 znaków

2019-01-04 20:38
0

Jeśli potnę te linijki po spacji:

String[] out;
                while((s = in.readLine()) != null) {
                    if(line > 1) {
                        out = s.split(" ");
                        for(int j =0; j<out.length; j++) {

to w jaki sposób sprawdzić czy out[j] jest typu double czy int?

Pytanie 2: W każdym przykładzie jaki widziałem jest podana ścieżka do pliku, ja używam JFileChooser a więc czy dla pętli while((s = in.readLine()) != null) źle pobieram ten plik?

in = new BufferedReader(
                        new InputStreamReader(new GZIPInputStream(new FileInputStream(fc.getSelectedFile()))));
edytowany 1x, ostatnio: Mattii4211, 2019-01-04 20:47

Pozostało 580 znaków

2019-01-04 23:54
0

Dobra. Problem rozwiązanany

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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