Java wczytywanie danych z pliku txt do tabeli

2013-02-24 14:00
mziem
0

Witam
mam pytanie odnośnie wczytywania danych do tabeli.
Mam dane w formacie
64
65
54
67
...
i tak 20000 linijek.
Są to dane potrzebne do klasyfikacji pomiarów.
Jak najprościej wczytać te dane z pliku txt do tabeli w java? Następnie muszę policzyć odległości między dowolnymi dwiema wartościami z tych danych, ale to już kolejny krok.
Z góry dziękuję za pomoc.

edytowany 1x, ostatnio: bogdans, 2016-12-13 18:26

Pozostało 580 znaków

2013-02-24 14:31
1

Wczytujesz linia po linii (BufferedReader) i każdą z nich interpretujesz jako Integer (Integer.parseInt()). Wstawiasz wszytko to listy/tablicy i po problemie. Albo używasz klasy Scanner.

Pozostało 580 znaków

2013-02-24 14:55
mziem
0

Nie jestem informatykiem (jestem matematyczką), więc pewnie moje pytania są dość podstawowe, ale w jaki sposób deklaruję, żeby każdą linijkę umieszczał w osobnej komórce tabeli?
Pozdrawiam
M

Pozostało 580 znaków

2013-02-24 15:04
0

Masz tu gotowy kod, umiesc go w pliku o nazwie ListaLiczb.java

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

public class ListaLiczb {

    private List<Integer> liczby = new ArrayList<Integer>();

    public void dodajLiczbe(int liczba) {
        liczby.add(liczba);
    }

    public int wezLiczbe(int indeks) {
        return liczby.get(indeks);
    }

    public int ileLiczb() {
        return liczby.size();
    }

    public static void main(String[] args) {
        ListaLiczb w = new ListaLiczb();

        String nazwaPliku = "liczby.txt";

        try {
            BufferedReader br = new BufferedReader(new FileReader(nazwaPliku));
            String linia = null;
            while ((linia = br.readLine()) != null) {
                int liczba = Integer.parseInt(linia.trim());
                w.dodajLiczbe(liczba);
            }
        } catch (Exception e) {
            System.err.println("Wystapil blad przy wczytywaniu danych");
            e.printStackTrace();
        }
        System.out.println("Wczytanych liczb: " + w.ileLiczb());
    }

}
edytowany 1x, ostatnio: [losowa nazwa], 2013-02-24 15:06
Pokaż pozostałe 3 komentarze
A niech Ci będzie, kod w poście na dole. - [losowa nazwa] 2013-02-24 15:58
Dziękuję, ale tylko częściowo. Wolałbym numery błędnych linii, a nie błędne linie. Ale jak się nie ma co się lubi, to się lubi co się ma.:P - bogdans 2013-02-24 17:24
Do parsowania automatycznego ? Przecież komunikaty są postaci: "Linia: " + nrLinii + ", wartosc=\"" + linia + "\"", więc masz tam TEŻ numer linii :p - [losowa nazwa] 2013-02-24 23:52
Sorry, czytałem zbyt pobieżnie. Dziękuję bez zastrzeżeń.:P - bogdans 2013-02-25 06:05
A ja mam pytanie jak nalezaloby to rozwiazac dla tablicy 2-wymiarowej - poczatkujacy_C 2016-11-05 19:55

Pozostało 580 znaków

2013-02-24 15:06
mziem
0

dziękuję serdecznie i pozdrawiam

Pozostało 580 znaków

2013-02-24 15:58
0

Kod uwzględniający informowanie o błędnych liniach w pliku (i ignorujący je przy wczytywaniu):

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ListaLiczb {

    private List<Integer> liczby = new ArrayList<Integer>();

    public void dodajLiczbe(int liczba) {
        liczby.add(liczba);
    }

    public int wezLiczbe(int indeks) {
        return liczby.get(indeks);
    }

    public int ileLiczb() {
        return liczby.size();
    }

    public static void main(String[] args) {
        ListaLiczb w = new ListaLiczb();

        String nazwaPliku = "liczby.txt";

        List<String> bledneLinie = new ArrayList<String>();
        try {
            BufferedReader br = new BufferedReader(new FileReader(nazwaPliku));
            String linia = null;
            int nrLinii = 1;
            while ((linia = br.readLine()) != null) {
                try {
                    int liczba = Integer.parseInt(linia.trim());
                    w.dodajLiczbe(liczba);
                } catch (NumberFormatException e) {
                    bledneLinie.add("Linia: " + nrLinii + ", wartosc=\"" + linia + "\"");
                }
                nrLinii++;
            }
        } catch (IOException e) {
            System.err.println("Wystapil blad przy wczytywaniu danych");
            e.printStackTrace();
        }
        System.out.println("Wczytanych linii: " + w.ileLiczb() + ", w tym blednych: " + bledneLinie.size());
        if (bledneLinie.size() > 0) {
            System.out.println("Wystapily bledne linie w pliku:");
            for (String l : bledneLinie) {
                System.out.println(l);
            }
        }

    }

}

Pozostało 580 znaków

2013-02-24 16:26
mziem
0

Moje problemy są niemożliwe :)
Chciałam wyświetlić tę listę, ale robię to komendą
System.out.println(Array.toString(liczby)); i wyskakuje błąd.
Jaka jest na to rada?

Pozostało 580 znaków

2013-02-24 16:30
0

"liczby" to nie jest tablica... dlatego Ci się nie udało :p

for (int i = 0; i < liczby.ileLiczb(); i++) {
  System.out.println("Liczba pod indeksem: " + i + " to " + liczby.wezLiczbe(i));
}
[losowa nazwa] odbierz pw :) - mziem 2013-02-24 16:34

Pozostało 580 znaków

2013-02-24 17:23
0

Nie rozumiem po co wyświetlać kolekcję 20 tys. liczb. Ale jeśli jest to uzasadnione, to można tak:

System.out.println(liczby);

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans, 2013-02-24 17:41
nie chciałam tego wyświetlać docelowo, tylko chciałam sprawdzić, czy działa-odwołać się do konkretnej wartości z tej tablicy :) - mziem 2013-02-28 18:23

Pozostało 580 znaków

2013-02-24 17:38
0

Przyjazna klasa do wczytywania tokenów ze strumienia - StreamTokenizer.

Pozostało 580 znaków

2013-02-28 18:14
0

Mam kolejne pytanie. Poniżej umieszczam kod-wczytuję dane z pliku txt do ArrayList, ale potrzebuję tablicy. Tak jak to napisałam nie działa. Może jakaś podpowiedź? Najlepiej by było, gdyby kopiowało mi to od razu do pierwszej kolumny tablicy 2-wymiarowej. Kolejnym krokiem będzie obliczenie odległości pomiędzy wartościami z tej tabeli a dokładnie posegregowanie ich i wyznaczenie dla każdego punktu odległości od k najbliższych sąsiadów dla ustalonego k (np k=51). Może podpowiecie jak to najszybciej zrobić?

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class  LOFactor {

        /**
     *
     */
    public List<Double> liczby = new ArrayList<>();

        private double distance;

        /**
     *
     * @param liczba
     */
    public void dodajLiczbe(double liczba) {
                liczby.add(liczba);
        }

        public Double wezLiczbe(int indeks) {
                return liczby.get(indeks);
        }

        public int ileLiczb() {
                return liczby.size();
        }

        public static void main(String[] args) {
                LOFactor w = new LOFactor();

                String HR1 = "C:/Users/Maja/Desktop/dyplom/instancje/HR1.txt";

                List<Double> lista = new ArrayList<>();
                // wypelnianie listy
                double[] tablica = new double[lista.size()];
                    for (int i = 0; i < lista.size(); i++) {
                    tablica[i] = lista.get(i);
                    }
                List<String> bledneLinie = new ArrayList<>();

                try {
                        BufferedReader br = new BufferedReader(new FileReader(HR1));
                        String linia = null;
                        int nrLinii = 1;
                        while ((linia = br.readLine()) != null) {
                                try {
                                        int liczba = Integer.parseInt(linia.trim());
                                        w.dodajLiczbe(liczba);
                                } catch (NumberFormatException e) {
                                        bledneLinie.add("Linia: " + nrLinii + ", wartosc=\"" + linia + "\"");
                                }
                                nrLinii++;
                        }
                } catch (IOException e) {
                        System.err.println("Wystapil blad przy wczytywaniu danych");
                }

                System.out.println("Wczytanych linii: " + w.ileLiczb() + ", w tym blednych: " + bledneLinie.size());
                if (bledneLinie.size() > 0) {
                        System.out.println("Wystapily bledne linie w pliku:");
                        for (String l : bledneLinie) {
                                System.out.println(l);

                        }
                }
                Double[] tablica = lista.toArray(new Double[]{});
                System.out.println(tablica[3]);
        }
}
edytowany 1x, ostatnio: bogdans, 2013-02-28 19:23

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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