Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Es ist schon etwas länger her als ich etwas mit Java Programmiert habe. Ich habe bereits ein Programm geschrieben, aber es macht nicht das was ich eigentlich will. Ich weiss nicht ob mein vorhaben überhaupt möglich ist. Es stellte sich als viel schwieriger und komplizierter herraus als ich anfangs dachte. Ich habe 2 Text-Dateien die z.b. so aussehen:
1. In Datei1 können Daten stehen die in Datei2 nicht stehen und umgekehrt.
2. In Datei1 können die gleichen Daten stehen wie in Datei2 aber an anderer Stelle.
3. In beiden Dateien können Dublikate vorkommen.
Mein Program sieht bisher so aus:
Java:
package test;
import java.io.*;
import java.util.Scanner;
public class Main
{
public static void main(String[] args) throws IOException
{
String curString1, curString2, writeString1, writeString2;
Scanner fileReader1 = new Scanner(new File("D:\\work\\datei1.txt"));
Scanner fileReader2 = new Scanner(new File("D:\\work\\datei2.txt"));
FileWriter fw = new FileWriter("D:\\work\\datei3.txt");
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw);
while (fileReader1.hasNext())
{
out.println(fileReader1.nextLine());
}
while (fileReader2.hasNext())
{
out.println(fileReader2.nextLine());
}
out.close();
}
}
Ich habe viel ausprobiert. Das hier war noch das brauchbarste was dabei herrausgekommen ist. Das ist wie bereits oben geschrieben nicht das richtige Ergebnis, aber hoffentlich ein guter Ansatz.
Ziel soll sein das als Ergebnis des Programms die Unterschiede und die Dublikate angezeigt werden. Ich hoffe ich habe alles ausführlich beschrieben. Es wird wohl nicht so einfach zu lösen sein.
Dein Code macht ja nichts anderes, als beide Dateien Zeile für Zeile einzulesen und die zweite an die Erste anzuhängen. Die dadurch entstehende neue Datei schreibt er dann in den BufferedWriter. Im übrigen kannst du dir den PrintWriter sparen. BufferedWriter hat selbst ein writeln() mit derselben Funnktion wie das println().
Ich würde mit javaCC oder sableCC einen Parser bauen. Der macht aus den Textdateien Collectionklassen mit Objekten, die die Daten halten.
In den Collections kannst du dann rumsuchen, sortieren und vergleichen soviel du willst. Eventuell empfiehlt es sich, die equals- Methode zu überschreiben, damit gleiche Datensätze auch mit equals true erkannt werden. Das vereinfacht die Erkennung enorm.
Das hört sich gut an, aber dafür reicht mein Java-Wissen bei weitem nicht aus. Hast du oder jemand anders vielleicht einen Lösungsvorschlag als Quelltext?
Sorry, aber wir (oder zumindest ich ) helfen dir wenn du es probierst, programmieren aber nichts für dich fertig.
Zweite Variante:
Du liest jetzt schon zeilenweise als String ein. Schreib diese Strings nicht in einen anderen Writer, sondern in eine Collection. Strings die mit # anfangen (deine Kommentare) lässt du einfach weg. (charAt(0) liefert dir das erste Zeichen, ein if sagt dir, ob es ein Kommentar ist).
Anschließend kannst du auf der Collection mit den Methoden der Collection und der Collections- Klasse nach Duplikaten usw. suchen. Dabei kannst du nur nicht feststellen, ob bei einem doppelten Eintrag beide aus derselben Datei oder aus unterschiedlichen kommen. Wenn du das brauchst, lässt sich das aber leicht nachrüsten (zwei Collections nehmen).
Du darfst gerne weiterfragen, wenn du was davon nicht verstehst.
du könntest immer wenn du eine brauchbare zeile findest(die nicht mit # beginnt) sie in eine ArrayList schreiben.
später könntest du die 2 ArrayLists dann vergleichen.
ungefähr so:
Code:
in array List1 sind die daten aus datei 1 gespeichert und in ArrayList die aus 2
für jeden eintrag in arrayList1:
varialbe bla ist der eintrag
varialbe zähler ist die anzahl der vorkommen eines eintrags
für jeden eintrag in arrayList2
wenn eintrag(i) bla entspricht
zähler++
*wenn
*für
gebe aus: bla + "kommt"+zähler +"vor"
*für
Unter diff habe ich auch schon gesucht aber nichts passendes gefunden.
Ich habe das ganze auch schon mit hilfe einer batch datei versucht. das hat halbswegs funktioniert, aber mit java hat man mehr möglichkeiten.
weiss denn keiner eine lösung, bzw. hat ein paar code snippets?
Du hast doch eh schon genug Vorschläge bekommen wie du das Problem angehen könntest - es wird dir hier wohl eher keiner eine fertige Lösung anbieten.
Du kannst doch einfach im Google nach Zeug suchen welches Dateien aus einer Datei einliest und dann, je nachdem wie du es lösen möchtest, in ein Objekt schreibt etc.
Ist ja nicht wirklich schwer, du liest dir Datei 1 ein und iterierst darüber und hierbei schreibst du die Zeilen in eine Collection od. wie auch immer. Danach die 2. Datei einlesen und die Zeilen wieder in eine Collection und danach kannst du beide Collections miteinander vergleichen wie du möchtest.
Wie bereits geschrieben reichen meine Programmierkenntnisse dafür leider nicht aus und ohne hilfe komm ich an dieser Stelle nicht weiter. Ich werd mal noch in einem anderen Forum fragen. Trotzdem danke.