Napisałem coś takiego. Zadaniem programu jest przygotowanie relacyjnej bazy danych. Z jednego pliku robi trzy pliki. Plik pierwszy ze słówkami niemieckimi i rodzajnikiem, plik drugi ze słówkiem polski, a trzeci plik z relacją. Plik wygląda tak:
Aberglauben;der;przesąd,zabobon,
Kopiuj
Aberglauben;der;przesąd,zabobon,
cis11;a;cos11,
cis12;a;cos12,cos11,
cis13;a;cos13,cos15,cos16,
cis14;a;cos13,
cis15;a;cos12,
cis16;a;cos14,
funkcja wygląda następująco:
Kopiuj
public static void TworzenieListyTrzyPlikowej(String name) throws FileNotFoundException {
FileInputStream file = new FileInputStream(name);
PrintWriter writePL = new PrintWriter("src/main/resources/wtirePL.txt");
PrintWriter writeDE = new PrintWriter("src/main/resources/wtireDE.txt");
PrintWriter writePLDE = new PrintWriter("src/main/resources/wtirePLDE.txt");
ArrayList listaPL = new ArrayList();
Scanner sc = new Scanner(file, "UTF-8");
int i = 0;//index DE
int j = 0;//index PL
int k = 0;//l.p.
int duplikat = 0; //znacznik jak występują duplikaty
int duplikatPLid = 0;
writePLDE.println("Id;IdDE;IdPL");
while (sc.hasNextLine()) {
String[] wyrazy = sc.nextLine().split(";");
String[] slowa = wyrazy[2].split(",");
writeDE.println(i + ";" + wyrazy[0].trim() + ";" + wyrazy[1].trim());
for (String s : slowa) {
//sprawdzenie czy w liście PL wystąpią duplikaty po dodaniu nowego rekordu.
for (int x = 0; x < listaPL.size(); x++) {
if (listaPL.get(x).equals(s.trim())) {
duplikat = 1;
duplikatPLid = x;
}
}
if (duplikat == 0) {
writePL.println(j + ";" + s.trim());
listaPL.add(s.trim());
writePLDE.println(k + ";" + i + ";" + j);
j++;
} else {
writePLDE.println(k + ";" + i + ";" + duplikatPLid);
}
k++;
System.out.println(j);//program wykonuje się dosyć długo, dlatego zostawiłem odliczanie aby widzieć że coś się dzieje.
duplikat = 0;
}
i++;
}
writePL.close();
writeDE.close();
writePLDE.close();
}
Dziękuję wszystkim za sugestie i proszę o opinie jak ten kod powinien wyglądać.
Kod napisałem już dwa dni temu, ale cały czas miałem błędy wynikające jak się okazało z faktu, że plik ze słówkami nie we wszystkich linijkach miał po dwa średniki (bywało nawet po 6 średników). Plik ma 60tyś linijek i troszkę mi zajęło zanim to wyłapałem. A jak już wyłapałem co jest grane to napisałem mały programik który mi to wyprostował.