Przekonwertowanie danych z plików tekstowych

0

Witam

Mam problem i chciałbym się poradzić co do rozwiązania zadania.
Zadanie brzmi:
-dane są trzy pliki tekstowe o nazwach: lekarze.txt, pacjenci.txt, wizyty.txt.
Zawierają one informacje na temat lekarzy, pacjentów i odbytych wizyt domowych.
W każdym z plików dane w wierszu oddzielone są znakami tabulacji.
Wykorzystując informacje zawarte w plikach wykonaj następujące polecenia:

  • znajdź lekarza ktory miał najwięcej wizyt

Póki co stworzyłęm klasy lekarz, pacjent, wizyta, czas i w mainie wrzuciłem pliki do tablicy.

Mam problem z odczytem tych plików. Jak to zrobić by przekonwertować dane z tych trzech plikow tekstowych?
Z góry dzięki


public static void main(String[] args) throws IOException {

                File[] files = {new File("lekarze.txt"), new File("pacjenci.txt"), new File("wizyty.txt")};
                for (File file : files) {
                    if(file.isFile()) {
                        BufferedReader inputStream = null;
                        String line;
                        try {
                            inputStream = new BufferedReader(new FileReader(file));
                            while ((line = inputStream.readLine()) != null) {
                                System.out.println(line);
                            }
                        }catch(IOException e) {
                            System.out.println(e);
                        }
                        finally {
                            if (inputStream != null) {
                                inputStream.close();
                            }
                        }
                    }
                }

            }
        }

1

File[] files = {new File("lekarze.txt"), new File("pacjenci.txt"), new File("wizyty.txt")};

No ja bym tego tak nie robił.
Załadowałbym sobie te pliki do jakiejś listy.
Samo ładowanie można zrobić poprzez np. commons-csv.

-dane są trzy pliki tekstowe o nazwach: lekarze.txt, pacjenci.txt, wizyty.txt.

Możesz pokazać strukturę plików?

0

tak wyglądają pliki tekstowe


Id_pacjenta	Nazwisko	Imie	PESEL	Data_urodzenia
100	Kowal	Waldemar	01211309876	2001-1-13
110	Cyrankowska	Ilona	06281498876	2006-8-14
111	Imbierowicz	Hanna	64040456673	1964-4-4
121	Karlowski	Henryk	55090933455	1955-9-9
122	Nowakowska	Joanna	73050512356	1973-5-5
124	Witkowski	Hubert	88030422354	1988-3-4
135	Walentowicz	Kinga	02250987765	2002-5-9
147	Gumowska	Dorota	65092490065	1965-9-24
155	Duch	Alicja	06231299954	2006-3-12
160	Misz	Borys	77121098855	1977-12-10
161	Barski	Karol	99021766543	1999-2-17
163	Bartkowiak	Bartlomiej	07210376599	2007-1-3
164	Benetkiewicz	Piotr	01260988555	2001-6-9
165	Ciborski	Maciej	57091566457	1957-9-15
166	Gesicki	Radoslaw	00222709836	2000-2-27
170	Grajkowska	Monika	06271109823	2006-7-11
172	Juszczyk	Adela	99100996548	1999-10-9
173	Kolasinski	Karol	98090433765	1998-9-4
180	Kosicka	Kamila	03212099545	2003-1-20
181	Kupinski	Jakub	78061600987	1978-6-16
184	Lajzer	Michal	77092566487	1977-9-25
189	Lipinski	Artur	02281902345	2002-8-19
191	Malkowski	Adam	75082822376	1975-8-28
192	Noch	Przemyslaw	99111590976	1999-11-15
193	Nowicka	Karolina	06231744366	2006-3-17
197	Pawlak	Justyna	01250577856	2001-5-5
198	Pawlowski	Jaroslaw	80062465987	1980-6-24
200	Plaskowski	Jacek	56070476895	1956-7-4
204	Ruminski	Krzysztof	99101010987	1999-10-10
205	Szalewski	Wojciech	99111987656	1999-11-19
207	Szewczyk	Maciej	99092776545	1999-9-27
208	Wadowska	Agnieszka	04262908766	2004-6-29
209	Waga	Emilia	95052768598	1995-5-27
212	Wilkonska	Marta	83070576855	1983-7-5
213	Bojanowska	Magdalena	71022675598	1971-2-26
216	Czyza	Pawel	06281233456	2006-8-12
226	Grabania	Malgorzata	99040554586	1999-4-5
227	Kadajska	Monika	05272799043	2005-7-27
231	Becmer	Wojciech	99032778655	1999-3-27
233	Biernacka	Izabela	58073022657	1958-7-30
235	Blaszkiewicz	Marcin	04280999856	2004-8-9
236	Boladz	Artur	73022098768	1973-2-20
238	Ciecharowska	Ilona	65082890067	1965-8-28
241	Cyrankowska	Monika	03272809866	2003-7-28
243	Dankowski	Daniel	06291477654	2006-9-14
244	Draszczyk	Alicja	99030778645	1999-3-7

Jak wyciągnąc te dane z tych trzech plików? Robiłem coś podobnego na jednym pliku tekstowym ale nie na trzech :/

3

@TomMachaj: ja tutaj widzę tylko plik z pacjentami. Nie musisz wrzucać danych, wystarczy nagłówek ;)

znajdź lekarza ktory miał najwięcej wizyt

Trochę domyślam się jak wygląda struktura pozostałych plików i chyba nie potrzebujesz wczytywać plików z pacjentami aby odpowiedzieć na pytanie:

znajdź lekarza ktory miał najwięcej wizyt

Wystarczy sparsować plik z wizytami oraz lekarzami. Wtedy iterując po pliku z wizytami liczysz sumę dla każdego lekarza:

    for(var doctor : doctors){
        var sum = 0;
        for(var appointment : appointments){
            if(appointment.doctorId == doctor.id){
                sum = sum + 1;
            }
        }
        doctor.appointments = sum;
    }

w obiekcie doctor trzymasz pole z sumą. Listę można posortować po tym polu i pobrać pierwszy element.

Nie jest to super rozwiązanie ale od tego możesz zacząć.

0
.andy napisał(a):

@TomMachaj: ja tutaj widzę tylko plik z pacjentami. Nie musisz wrzucać danych, wystarczy nagłówek ;)

znajdź lekarza ktory miał najwięcej wizyt

Trochę domyślam się jak wygląda struktura pozostałych plików i chyba nie potrzebujesz wczytywać plików z pacjentami aby odpowiedzieć na pytanie:

znajdź lekarza ktory miał najwięcej wizyt

Wystarczy sparsować plik z wizytami oraz lekarzami. Wtedy iterując po pliku z wizytami liczysz sumę dla każdego lekarza:

    for(var doctor : doctors){
        var sum = 0;
        for(var appointment : appointments){
            if(appointment.doctorId == doctor.id){
                sum = sum + 1;
            }
        }
        doctor.appointments = sum;
    }

w obiekcie doctor trzymasz pole z sumą. Listę można posortować po tym polu i pobrać pierwszy element.

Nie jest to super rozwiązanie ale od tego możesz zacząć.

TLDR:
(d)oktory, (w)izyty
d * w vs w + d

--

Sorry za dosadność, ale wyjątkowo megagłupia konstrukcja z pętlą w pętli. Po co niby ta zewnętrzna przejeżdżająca po doktorach i dla każdego przejeżdza po wizytach?
Wystarczy jedna pętla która przejedzie po wizytach, żeby wyłonić id który występuje największą ilośc razy. Potem wybrać doktora na podstawie ID.

0

Sorry za dosadność, ale wyjątkowo megagłupia konstrukcja z pętlą w pętli. Po co niby ta zewnętrzna przejeżdżająca po doktorach i dla każdego przejeżdza po wizytach?

Zamysł był taki aby dla każdego doktorka policzyć sumę wizyt. W sumie w zadaniu jest aby wyznaczyć lekarza który miał najwięcej wizyt, więc to moje rozwiązanie jest ciut na wyrost.

Teraz wpadłem na pomysł, że tak na prawdę można to zrealizować przy parsowaniu danych do systemu i nie trzeba dodatkowo jeździć. Po prostu w momencie kiedy parsujemy plik z wizytami i dodajemy wizytę do listy to na lekarzu do którego wizyta jest zwiększa się licznik wizyt ;)

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