Doppelte Einträge in mehreren Textfiles finden und ausgeben

pabu1983

Mitglied
Hallo Zusammen,

ich bin am verzweifeln. Ich will in vielen Textfiles (ca. 70 stück) schauen ob gleiche Wörter drin stehen und falls ja den Dateinamen und Zeilennummer davon ausgeben. Ich hab jetzt schon was von regex gelesen aber ich find irgendwie keinen Ansatz.

Ich will ja nicht das jemand hier mir ein Programm schreibt! Echt nicht!

Also ich weiß nicht ob ich damit beginnen sollte alle Textfiles zu öffnen aber dann?!? Ich muss ja irgendwie alle Wörter aus allen Textfiles speichern, also alle einlesen und irgendwo Speichern, dann muss ich die irgendwie mit den Textfiles vergleichen...und dann noch irgendwie ausgeben wo ich den doppelten eintrag finde...ahhhh ich dreh noch durch.

bitte um hilfe,
mfg
pabu
 

pabu1983

Mitglied
Also gut ich hab jetzt mal angefangen und bin mal soweit das er eine Datei einliest und die wichtigen Zeilen herausfiltert. Aus irgendeinem Grund schreibt er die sachen nicht in das Outputfile. Er erstellt Sie aber sie ist leer... wobei der command output stimmt...komisch, jemand eine idee?

Jetzt will ich diese Zeile noch weiter filtern mittels regex. Ich weiß aber nicht wie, kennt sich jemand damit aus? Außerdem wie kann ich mehrere Files nacheinander durchlaufen lassen? Anstatt eine txt, alle dateien in einem unterordner? Welche Befehle brauch ich dafür?


Hier mein Code bis jetzt:
Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.io.File;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
//import java.util.regex.*;


/**
 *
 * @author pabu
 */
public class Sym_vergleich {

    public static void main (String[] args) {
    
        String begin_var = "  VARIABLES";
        String end_var = "/*-----";
        boolean var = false;
        
        String begin_sym1 = "const";
        String begin_sym2 = "static";
        String begin_sym3 = "SWORD";
        String begin_sym4 = "UWORD";
        String begin_sym5 = "Bool";
        String begin_sym6 = "UBYTE";

//        Pattern p = Pattern.compile("[\w]\p{L}\s[\w]\s[\w]");
//        Matcher m = p.matcher("aaaaab");


        try {

            FileReader fr = new FileReader("out.txt");
            BufferedReader myReader = new BufferedReader(fr);
            String line = myReader.readLine();

            File ausgabeDatei = new File("out_var_only.txt");
            FileWriter fw = new FileWriter(ausgabeDatei);
            BufferedWriter bw = new BufferedWriter(fw);

            while (line != null) {
                line = myReader.readLine();

                if (line.equals(begin_var)) {
                    var = true;
                }
                
                if (line.startsWith(end_var)) {
                    var = false;
                }

                if (var == true) {
                    
                    if (line.startsWith(begin_sym1) || line.startsWith(begin_sym2) || line.startsWith(begin_sym3) || 
                        line.startsWith(begin_sym4) || line.startsWith(begin_sym5) || line.startsWith(begin_sym6)) {
                        
                        System.out.println(line);
                        bw.write(line);
                        bw.newLine();
                    }
                }
            }

            myReader.close();
            bw.flush();
            bw.close();
        }
        catch (Exception e) {
         
        }
    
    }

}
 

pabu1983

Mitglied
ok das mit mehreren Files hab ich, jetzt brauch ich nur noch hilfe mit dem regex...

Ich will folgendes erreichen:

Wenn die Zeile mit var1 ODER var2 beginnt, dann speichere nur das Dritte Wort in dieser Zeile
Wenn die Zeile mit var3 ODER var4 beginnt, dann speichere nur das Zweite Wort in dieser Zeile

wie kann man sowas lösen?

Danke im voraus!

mfg
pabu
 
S

SlaterB

Gast
was spricht denn gegen
> if (line.startsWith(begin_sym1)
usw? kommst du damit nicht zum Ziel?

Pattern sind da recht kompliziert, hier ein Beispiel
Java:
public class Test
{
    public static void main(String[] args)
    {
        String begin1 = "auto";
        String begin2 = "flug";

        String pattern = "(" + begin1 + "|" + begin2 + ").*";
        Pattern p = Pattern.compile(pattern);

        System.out.println(p.matcher("a").matches());
        System.out.println(p.matcher("autobahn").matches());
        System.out.println(p.matcher(" autobahn").matches());
        System.out.println(p.matcher("autoflug").matches());
        System.out.println(p.matcher("flugauto").matches());
        System.out.println(p.matcher("frugauto").matches());
    }
}

drittes Wort dann wieder mit einem anderen RegEx oder string.split()
 

pabu1983

Mitglied
das problem ist wenn ich das mit if mache brauche ich trotzdem einen befehl der mir dann das dritte oder zweite wort speichert. wie mache ich das dann? Dachte das geht irgendwie mit pattern und matcher...
 
T

Tomate_Salat

Gast
ich bin am verzweifeln. Ich will in vielen Textfiles (ca. 70 stück) schauen ob gleiche Wörter drin stehen

Mein Idee wäre: Die Wörter einer Datei in einem [c]HashSet[/c] speichern, für jede Datei ein eigenes Set anlegen.

Nach dem durchlauf die HashSets vergleichen und wenn ein Wort in einem anderen HashSet schonmal vorkommt, dieses Wort in einem letzten HashSet speichern.

Da man auf diese weise wahrscheinl. alle Sets nacheinander miteinander vergleich muss, wäre es denk ich nicht verkehrt die bereits gecheckten wörter aus den HashSets beim durchlauf zu löschen

Wenn die Zeile mit var1 ODER var2 beginnt, dann speichere nur das Dritte Wort in dieser Zeile
Wenn die Zeile mit var3 ODER var4 beginnt, dann speichere nur das Zweite Wort in dieser Zeile

Zeilenweise einlesen, in einem String speichern, [c].trim();[/c] benutzen. Dann würde ich eine HashMap anlegen etwa so: [c]HashMap<String, Integer> wortwahl[/c]. Dann zerlegst du den String mittels [c].split(" ");[/c] in seine Wörter und machst einen check:
Java:
if(wortwahl.get(word[0]) != null)
{
    speicherDasWort(word[wortwahl.get(word[0]));
}

MFG

Tomate_Salat
 

pabu1983

Mitglied
mit Hashsets kenn ich mich gar nicht aus, könntest du n bissl größeres Beispiel hier reinschreiben?

Wenn nicht hab ich das Problem jetzt auch anders gelöst (zumindest mit dem passenden Wort rausfiltern). Jetzt muss ich nur noch diese Wörter vergleichen und die doppelten in einer Datei ausgeben. Ich wollte (weil ich das mit dem vergleichen nicht hinbekomme) erstmal alle gefilterten Worte in eine TXT ausgeben, aber irgendwie bekomme ich keine Daten rein... Er erstellt die "_all.txt" aber mit 0KB und ist leer.

Hier mein bisheriger Code:

Code:
import java.io.File;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.StringTokenizer;

public class Sym_vergleich {

    public static void main (String[] args) {

        File dir = new File("D:/Temp/");
        File[] fileList = dir.listFiles();

        String begin_var = "  VARIABLES";
        String end_var = "/*-----";
        boolean var = false;
        
        String begin_sym1 = "const";
        String begin_sym2 = "static";
        String begin_sym3 = "SWORD";
        String begin_sym4 = "UWORD";
        String begin_sym5 = "Bool";
        String begin_sym6 = "UBYTE";

        for(File f : fileList) {

            try {

                FileReader fr = new FileReader(f);
                BufferedReader myReader = new BufferedReader(fr);
                String line = myReader.readLine();

                File ausgabeDatei = new File("D:/Temp/_all.txt");
                FileWriter fw = new FileWriter(ausgabeDatei);
                BufferedWriter bw = new BufferedWriter(fw);

                while (line != null) {
                    line = myReader.readLine();

                    if (line.equals(begin_var)) {
                        var = true;
                    }
                
                    if (line.startsWith(end_var)) {
                        var = false;
                    }

                    if (var == true) {
                    
                        if (line.startsWith(begin_sym1) || line.startsWith(begin_sym2)) {

                            StringTokenizer st = new StringTokenizer(line);
                            String word = (String)st.nextToken();
                            word = (String)st.nextToken();
                            word = (String)st.nextToken();
                            System.out.println(word);
                            
                            bw.write(line);
                            bw.newLine();
                        }

                        if (line.startsWith(begin_sym3) || line.startsWith(begin_sym4) ||
                            line.startsWith(begin_sym5) || line.startsWith(begin_sym6)) {

                            StringTokenizer st = new StringTokenizer(line);
                            String word = (String)st.nextToken();
                            word = (String)st.nextToken();
                            System.out.println("Variable " + word + " in der Datei " + f);

                            bw.write(line);
                            bw.newLine();
                        }
                    }
                }

                myReader.close();
                bw.flush();
                bw.close();
            }
            catch (Exception e) {
         
            }
        }
    }

}
 
T

Tomate_Salat

Gast
Nun ja, HashSets sind nicht schwer

Java:
HashSet<String> word    = new HashSet<String>();
word.add("hallo");
word.add("hallo");
System.out.println( word.size() ); // Ausgabe: 1
word.add("Hallo");
System.out.println( word.size() ); // Ausgabe: 2

Musst halt beachten: sind casesensitiv, also vllt immer die [c]toLowerCase()[/c] oder halt die [c]toUpperCase()[/c] verwenden. Im Prinzip achtet das Set einfach nur darauf, dass keine Einträge doppelt vorkommen.

Die Einträge bekommst du z.B. durch iteriern wieder:

Java:
Iterator<String> it = word.iterator();
        
while(it.hasNext())
{
    System.out.println( it.next() );
}

// Ausgabe:
// Hallo
// hallo
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S CSV auf doppelte Einträge überprüfen Java Basics - Anfänger-Themen 8
E Array doppelte Einträge Java Basics - Anfänger-Themen 2
S Variablen Array in ArrayList auf doppelte Einträge überprüfen Java Basics - Anfänger-Themen 4
P Doppelte Einträge in eine List Java Basics - Anfänger-Themen 5
C Doppelte Einträge aus String [] Array entfernen. Java Basics - Anfänger-Themen 5
M doppelte Einträge Emailempfänger... Java Basics - Anfänger-Themen 35
G txt-File als DB>doppelte Einträge verhindern/Suche/... Java Basics - Anfänger-Themen 10
J doppelte Einträge in einem Array Java Basics - Anfänger-Themen 7
-horn- Doppelte Einträge entfernen, aus Array, List oder sonstwas Java Basics - Anfänger-Themen 9
G _NUR_ doppelte Einträge in einem Array behalten Java Basics - Anfänger-Themen 3
G doppelte Einträge im String Array löschen Java Basics - Anfänger-Themen 21
0 ArrayList - doppelte Einträge entfernen? Java Basics - Anfänger-Themen 9
S Methode, um doppelte Einträge in Array zu finden Java Basics - Anfänger-Themen 5
G Wie doppelte Einträge in ComboBox vermeiden ? Java Basics - Anfänger-Themen 9
M Doppelte Einträge in einer datei löschen(nach timestamp)! Java Basics - Anfänger-Themen 4
D Doppelte Einträge einer Liste löschen Java Basics - Anfänger-Themen 6
B 2 ELists vergleichen und doppelte Einträge löschen Java Basics - Anfänger-Themen 11
K Warum werden immer noch doppelte Zahlen ausgegeben ? Java Basics - Anfänger-Themen 13
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
D Doppelte For Schleife / Array Java Basics - Anfänger-Themen 3
C das Doppelte des Wertes in der Console ausgeben Java Basics - Anfänger-Themen 10
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
H Frage zur ermittlung eines doppelte Paars aus Sotieralgorithmus Java Basics - Anfänger-Themen 4
N Best Practice Doppelte und einfach Anführungsstriche in Runtime.getruntime().exec() Java Basics - Anfänger-Themen 6
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
L Doppelte Schleife Anpassen Java Basics - Anfänger-Themen 5
W Map doppelte Values löschen Java Basics - Anfänger-Themen 3
S Doppelte Liste Einfügen Java Basics - Anfänger-Themen 1
M Argument in Integer verwandeln und das Doppelte davon printen Java Basics - Anfänger-Themen 9
T Klassen Doppelte Elemente aus Container entfernen Java Basics - Anfänger-Themen 6
M Erste Schritte Doppelte Ausgabe? (JList) Java Basics - Anfänger-Themen 1
kilopack15 Array auf doppelte Elemente überprüfen Java Basics - Anfänger-Themen 16
S Input/Output Doppelte Input-Abfrage Java Basics - Anfänger-Themen 3
K Input/Output Doppelte Ausgabe Java Basics - Anfänger-Themen 5
S Erste Schritte Doppelte Ausführung? Java Basics - Anfänger-Themen 4
E Threads Doppelte Threads beenden Java Basics - Anfänger-Themen 4
J Variablen Doppelte Werte in Int Array Java Basics - Anfänger-Themen 10
D Java doppelte Zahlen auch über 10 in einem String entfernen Java Basics - Anfänger-Themen 2
D Java doppelte Zahl/Zeichen in einem String entfernen Java Basics - Anfänger-Themen 6
S ArrayList Gruppieren, "Doppelte Werte" Addieren Java Basics - Anfänger-Themen 5
O Doppelte For-Scheife Java Basics - Anfänger-Themen 6
M Einfache und Doppelte Operatoren Java Basics - Anfänger-Themen 3
P Doppelte Datensätze aus CSV-Datei löschen Java Basics - Anfänger-Themen 17
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
S Array befüllen & auf doppelte werte prüfen Java Basics - Anfänger-Themen 6
B Klassen Doppelte werte Filtern XML, Datenbank und DOM Java Basics - Anfänger-Themen 3
R Doppelte löschen Java Basics - Anfänger-Themen 6
K Doppelte namen bei random Java Basics - Anfänger-Themen 3
U Doppelte Interfcae Implementierung Java Basics - Anfänger-Themen 10
DerGroßeNargus Doppelte Liste initialisieren Java Basics - Anfänger-Themen 2
H Datentypen Doppelte Verkette Liste - Verständnissproblem Java Basics - Anfänger-Themen 5
T Doppelte Liste Java Basics - Anfänger-Themen 8
R Schleife Doppelte Daten löschen Java Basics - Anfänger-Themen 3
V Doppelte Zahl suchen Java Basics - Anfänger-Themen 14
L Hilfe, doppelte Zufallszahlen Java Basics - Anfänger-Themen 13
G List suchen und doppelte rausfiltern Java Basics - Anfänger-Themen 3
T Doppelte Anführungszeichen ersetzen?? Java Basics - Anfänger-Themen 4
Luk10 Doppelte for-schleife Java Basics - Anfänger-Themen 7
T Array: Doppelte Charakteren löschen - Ein Lösungsversuch Java Basics - Anfänger-Themen 37
P doppelte Werte im Array ausgeben. Java Basics - Anfänger-Themen 4
M Aufgabe: Array auf doppelte Zahl prüfen Java Basics - Anfänger-Themen 8
J Doppelte Integer aus einem Array entfernen - seltsames Prob. Java Basics - Anfänger-Themen 5
C Doppelte Punktnotation Java Basics - Anfänger-Themen 2
F doppelte Elemente in HashSet Java Basics - Anfänger-Themen 5
G java.util.LinkedList: Doppelte Elemente vermeiden Java Basics - Anfänger-Themen 5
S "doppelte" if-Anweisung Java Basics - Anfänger-Themen 10
G Doppelte (Paar) Werte in einem Vektor finden Java Basics - Anfänger-Themen 6
F Doppelte Datensätze zusammenziehen Java Basics - Anfänger-Themen 2
V Doppelte Zahlen bei Lotto verhindern Java Basics - Anfänger-Themen 11
N ResultSet auf Einträge überprüfen Java Basics - Anfänger-Themen 5
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
C Erste Schritte JComboBox Einträge auf Duplikat prüfen Java Basics - Anfänger-Themen 4
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8
K Datentypen Einträge zweier Matrizen vergleichen Java Basics - Anfänger-Themen 4
I Einträge in den Konstruktor Java Basics - Anfänger-Themen 3
S Problem: Array alle Einträge gleich Java Basics - Anfänger-Themen 10
M Erste Schritte JList einträge Java Basics - Anfänger-Themen 1
P Erste Schritte Einträge aus verschachtelter Map chronoligisch ausgeben Java Basics - Anfänger-Themen 5
C JList Einträge nach Datum sortieren Java Basics - Anfänger-Themen 3
T Einträge in jComboBox aus Liste übernehmen Java Basics - Anfänger-Themen 1
S Wie bestehende Excel-Einträge mit neuen Vergleichen (mit Apache POI)? Java Basics - Anfänger-Themen 0
T Alte Einträge im Array werden von neuen überschrieben Java Basics - Anfänger-Themen 5
D Javaliste auf gleiche Einträge überprüfen Java Basics - Anfänger-Themen 2
C Datentypen Array-Einträge überhalb der Array-Länge - welcher Wert? Java Basics - Anfänger-Themen 5
L Erste Schritte Einträge in ArrayList prüfen Java Basics - Anfänger-Themen 4
M Ziffer einträge vergrößern Java Basics - Anfänger-Themen 16
H Einträge aus Array löschen Java Basics - Anfänger-Themen 8
J Markierte Einträge (Dateien) in JList sollen in einen anderen Ordner verschoben werden. Java Basics - Anfänger-Themen 12
K ArrayList.add() überschreibt vorhandene Einträge. Java Basics - Anfänger-Themen 12
M Gewisse Einträge aus einer ArrayList löschen Java Basics - Anfänger-Themen 3
K ArrayList Zugreifen auf Einträge Java Basics - Anfänger-Themen 8
B 2D-Array, gleiche Einträge prüfen Java Basics - Anfänger-Themen 5
F Hiberate-Log-Einträge Java Basics - Anfänger-Themen 2
J Datentypen List - gleiche Einträge bei neuen Objekten Java Basics - Anfänger-Themen 31
Beckenbauer OOP Durch Komma getrennte Einträge in einem String in ein Array oder eine Tabelle schreiben Java Basics - Anfänger-Themen 4
kitz Mehrere Einträge auswerfen? Java Basics - Anfänger-Themen 20
E Darstellung der Choice Einträge Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben