Textdatei auf Dubletten prüfen

Gojira

Mitglied
Liebes Forum,

ich habe bereits in der Suche nach meinem Problem geschaut. Allerdings habe ich für die Prüfung auf Dublettten nur den Fall gefunden, dass man einen String übergibt, der auf Dubletten geprüft wird.

In meinem Fall würde ich gerne eine Textdatei nach Dubletten durchsuchen, allerdings ohne vorher einen zu prüfenden String übergeben. Meine Textdatei enthält Zeilen mit einer ID, einer Adresse und Longitude/Latitude Angaben. Ich würde gerne die Zeilen darauf prüfen, ob die Longitude/Latitude Angaben in dem Dokument schon einmal vorgekommen sind / bzw. besser formuliert: ob für die bestimmte ID die gleichen Angaben bereits einmal vorgekommen sind. Das elementare Grundgerüst steht wohl soweit, allerdings habe ich keine Ahnung, wie ich das prüfen kann. Könnt ihr mir helfen? Besten Dank :)

Java:
public class FindUnusedVehicles {
	final static String VERZEICHNIS = ("savings/vehicleData.csv");
    public static void main(String[] args)
    {
        try
        {
            BufferedReader bufferReader = new BufferedReader(new FileReader(VERZEICHNIS));

            String dokZeile = bufferReader.readLine();

            while (dokZeile != null)
            {
            	
                dokZeile = bufferReader.readLine();

                
                
            }
            	
            bufferReader.close();
        }
        catch(IOException ioe)
        {
            ioe.printStackTrace();
        }
        
    }
}
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
Woran fehlt es genau? Brauchst du eine Idee, wie du deine ID´s aus dem Dokument extrahierst (das wird dir ohne die Datei zu kennen keiner sagen können), oder brauchst du eine Strategie, wie man überprüft, ob beim parsen eines Textes ein bestimmtes Textfragment bereits aufgetaucht ist?
 

Gojira

Mitglied
Hallo Harry!

Erst einmal vielen Dank für deine Antwort :)

Im Prinzip muss ich nur gucken, ob ein bestimmtes Textfragment öfter auftaucht, richtig. Nur dass ich dass Fragment vorher nicht festlegen kann - es muss also beim Durchsuchen der Datei prüfen, ob ein Textelement immer wieder auftaucht. Hier einmal ein Auszug aus der Datei, dann versteht man mich vielleicht auch besser :)

Die Datei:
...
2014-02-28 09:06:16.902;HH-GO8425;Am Baum 17, 21029 Hamburg;10.22088;53.48826
2014-02-28 09:06:16.902;HH-GO8426;Ellernreihe 59, 22179 Hamburg;10.07965;53.60659
2014-02-28 09:06:16.902;HH-GO8428;Vogelhüttendeich 32, 21107 Hamburg;9.98386;53.51841
2014-02-28 09:06:16.902;HH-GO8429;Lange Reihe 115, 20099 Hamburg;10.01446;53.5599
2014-02-28 09:06:16.902;HH-GO8433;Reclamstraße 19, 22111 Hamburg;10.11045;53.53961
2014-02-28 09:06:16.902;HH-GO8434;Stadtbahnstraße 17, 22393 Hamburg;10.10796;53.65367
2014-02-28 09:06:16.902;HH-GO8436;Blosweg 6, 22111 Hamburg;10.08874;53.54787
2014-02-28 09:06:16.902;HH-GO8437;Mützendorpsteed 24, 22179 Hamburg;10.08106;53.61479
... (usw.)

Es ist eine .csv Datei, in der ersten Spalte das Datum + Zeit, dann die ID, Adresse, Longitude, Latitude.
Das gleiche wird dann 10min später wieder eingefügt: zu prüfen wäre dann, ob bspw. für die ID "HH-GO8425" erneut die gleichen Longitude/Latitude angegeben sind.

Falls ich noch irgendetwas elementares zum Verständnis vergessen habe, macht mich gerne darauf aufmerksam! Danke :)
 

dcc

Aktives Mitglied
Lies wortweise aus, dann pack jedes Wort in eine Liste und vergleiche alle folgenden Wörter mit dem Listeninhalt. Wenn du ID -> Koordinaten Kombos testen musst, brauchst entweder ein 2D Array mit Anzahl der Zeilen, oder du machst eine Klasse die ID/Koords aufnehmen kann und erzeugst lauter Objekte davon, die du ein eine Liste steckst. Danach vergleichen...

Oder du machst einen großen String draus, und String.split nach beliebigem Trennzeichen. Resultat ist ein Array mit Worten. Dann geht:

Java:
Set<T> mySet = new HashSet<T>();
Collections.addAll(mySet, myArray);

die addAll entfert alle Duplikate, da die im Set Elemente einzigartig sein müssen.
resultat ist ein set mit einzigartigen wörtern.
 
Zuletzt bearbeitet:

Gojira

Mitglied
Hi dcc,

magst du mir deine erste Erklärung noch etwas genauer erklären?

Das ist vielleicht in meiner ersten Frage nicht ganz klar rübergekommen: Ich möchte die Duplikate nicht entfernen, ich will die Anzahl der Duplikate herausfinden. Also um bei der Beispiel-Textdatei zu bleiben: Wenn ein Longitude/Latitude Wert mehrmals vorkommt, dann soll geguckt werden, ob es die gleiche ID hat.. Das prüfen der ID könnte zur Not auch manuell erfolgen. Wichtig ist, dass die Zeilen ausgegeben werden, die den gleichen Longitude/Latitude Wert haben.
 

Harry Kane

Top Contributor
Möchtest du prüfen, ob eine bestimmte ID (wie "HH-GO8425") schin einmal vorgekomen ist, oder bestimmte Koordinaten?
Für den ersten Fall sollte das hier hilfreich sein:
Java:
public class WordCounter {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        HashMap<String, Coordinates> map = new HashMap<String, Coordinates>();
        String datei = "HH-1;Foo;10.1;53.0#HH-2;Bar;10.2;52.9#HH-3;Foobar;10.0;53.1#HH-2;Barfoo;10.0;53.1";
        String[] lines = datei.split("#");
        for(int i = 0; i < lines.length; i++){
            String s = lines[i];
            String[] coords = s.split(";");
            String id = coords[0];
            Coordinates c = new Coordinates(coords[0], coords[1], Double.parseDouble(coords[2]), Double.parseDouble(coords[3]));
            if(map.get(id) == null){
                map.put(id, c);
            }
            else{
                Coordinates existing = map.get(id);
                if(!existing.equals(c)){
                    System.out.println("Zwei ungleiche Objekte mit gleicher ID gefunden!");
                    System.out.println("Bereits vorhanden: " + existing.toString());
                    System.out.println("Neu gefunden: " + c.toString() + " in Zeile " + i);
                    existing.hit();
                }
            }
        }
    }
}
class Coordinates{
    private String id;
    private String address;
    private double longitude;
    private double latitude;
    private String str;
    private int hits;
    Coordinates(String id, String address,double longitude, double latitude){
        this.id = id;
        this.address = address;
        this.longitude = longitude;
        this.latitude = latitude;
        this.str = "ID = " + id + ", " + "Adresse = " + address + ", Longitude = " + longitude + ", Latitude = " + latitude;
    }
    public boolean equals(Object o){ 
        if(!(o instanceof Coordinates)) return false;
        Coordinates other = (Coordinates)o;
        if(!other.address.equals(this.address)) return false;
        if(!other.id.equals(this.id)) return false;
        if(Math.abs(other.longitude - this.longitude) > 0.0001) return false;
        if(Math.abs(other.latitude - this.latitude) > 0.0001) return false;
        return true;
    }
    public String toString(){
        return str;
    }
    public void hit(){
        hits++;
    }
}
Wenn zweites der Fall ist, müsste die Klasse "Coordinates" etwas umgestrickt werden und die HashMap müsste statts String z. B. Point2D Objekte als Key verwenden..
 

Gojira

Mitglied
Hallo Harry Kane,

erst einmal vielen Dank für deine ausführliche Antwort! Bei mir wäre es der zweite Fall,
denn ich will wissen, ob die Koordinaten ein weiteres Mal in dem Textdokument vorkommen und wenn ja, ob sie dann der gleichen ID zugeordnet sind.

In der Textdatei sind jeweils Fahrzeuge mit dem Standort aufgelistet. In dieser Datei wird alle 10min eine neue Liste der Fahrzeuge eingefügt. Nach dem kompletten Tag möchte ich die komplette Liste einmal überprüfen, ob ein Fahrzeug immer wieder am gleichen Standort steht. Ob das für eine bestimmte ID der Fall ist, kann ich vorher nicht wissen, weshalb ich auch keine ID als Parameter übergeben kann.

Einmal an einem Minimalbeispiel:

2014-02-28 09:06:16.902;HH-GO8004;Wolfshagen 3 20535 Hamburg;10.04853;53.55942;
2014-02-28 09:06:16.902;HH-GO8426;Ellernreihe 59, 22179 Hamburg;10.07965;53.60659
2014-02-28 09:06:16.902;HH-GO8433;Reclamstraße 19, 22111 Hamburg;10.11045;53.53961
2014-02-28 09:16:27.902;HH-GO8004;Wolfshagen 3 20535 Hamburg;10.04853;53.55942;
2014-02-28 09:16:27.902;HH-GO8480;Rotenhäuser Damm 27 21107 Hamburg;9.99156;53.51341;
2014-02-28 09:06:16.902;HH-GO8433;Mützendorpsteed 24, 22179 Hamburg;10.08106;53.61479

Hier sieht man, dass um 09:06 Uhr und um 09:16 Uhr das Fahrzeug HH-GO8004 an den gleichen Koordinaten steht (während z.B. HH-GO8433 an einer anderen Stelle steht). Genau das möchte ich ausgeben. Die Liste hat allerdings tausende Zeilen, also kann ich das nicht manuell durchführen.
 

dcc

Aktives Mitglied
Lese einfach erst mal Koordinaten / Bezeichnung aus und pack es in eine HashMap, Liste oder was auch immer. Dann ließt das nächste aus, und schaust ob es schon drin ist.
 
Zuletzt bearbeitet:

turtle

Top Contributor
Den Vorschlag von dcc finde ich gut und würde ihn "etwas" abändern.

Ich würde eine Klasse schreiben, die genau die Attribute enthält, die du testen möchtest, im Beispiel also
HH-GO8004;Wolfshagen 3 20535 Hamburg;10.04853;53.55942;

dann würde ich über alle Werte iterieren und Objekte in einem HashSet speichern. Beim add() bekommst du einen boolean Wert zurück, der angibt, ob der Wert (dein Objekt) bereits im Set vorliegt, also eine Dublette ist.

Dieses funktioniert aber nur, wenn du equals() und hashCode() überschreibst. Eclipse beispielsweise kann diese Methoden für dich automatisch generieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Leere Zeilen in Textdatei löschen lassen Java Basics - Anfänger-Themen 5
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
izoards Textdatei Human unreadable abspeichern Java Basics - Anfänger-Themen 17
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
LeoDerKek Textdatei in JAR-File Java Basics - Anfänger-Themen 4
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
3 Textdatei Zeilenweise auslesen Java Basics - Anfänger-Themen 3
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
NeoLexx Datenströme Lesen und Schreiben einer Textdatei Java Basics - Anfänger-Themen 2
D Input/Output Mehrzeiligen String aus Textdatei erstellen Java Basics - Anfänger-Themen 5
M Datenbank oder Textdatei? Java Basics - Anfänger-Themen 4
X Textdatei: zwei-zeilenweise gleiche Zeilen rausschmeißen Java Basics - Anfänger-Themen 21
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
J Wörter aus Textdatei suchen Java Basics - Anfänger-Themen 2
S Importieren einer Textdatei Java Basics - Anfänger-Themen 2
x-tshainge Innerhalb von Textdatei addieren Java Basics - Anfänger-Themen 9
Jinnai4 Werte in Textdatei ändern Java Basics - Anfänger-Themen 2
JDimi Textdatei mit beliebig vielen Zeilenumbrüchen erstellen Java Basics - Anfänger-Themen 2
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
G Wert in Textdatei ersetzen? Java Basics - Anfänger-Themen 2
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
C Input/Output Textdatei vom Java-Programm nicht geladen Java Basics - Anfänger-Themen 58
A Textdatei mit BufferedReader einlesen Java Basics - Anfänger-Themen 0
T Länge einer Textdatei Java Basics - Anfänger-Themen 11
S Übertragen einer Textdatei in ein 2d-Array Java Basics - Anfänger-Themen 2
N Integers aus Textdatei auslesen und mehrere Arrays erstellen Java Basics - Anfänger-Themen 9
T Textdatei öffnen und ans Ende scrollen Java Basics - Anfänger-Themen 11
J Textdatei filtern und bearbeiten Java Basics - Anfänger-Themen 1
C Textdatei oder doch eine Datenban Java Basics - Anfänger-Themen 15
J Input/Output Tilemap effizient speichern als Textdatei Java Basics - Anfänger-Themen 7
J Input/Output Zeile in Textdatei ändern Java Basics - Anfänger-Themen 14
M Textdatei(en) in .jar schreiben Java Basics - Anfänger-Themen 5
K Textdatei auslesen Java Basics - Anfänger-Themen 10
H Input/Output Inhalt einer GUI in Textdatei speichern Java Basics - Anfänger-Themen 1
K Erste Schritte Textdatei -> Array Java Basics - Anfänger-Themen 1
F Textdatei einlesen in ArryList (Objekte abspeichern?) Java Basics - Anfänger-Themen 4
F Problem mit Tabulatoren bei Zeilen zählen einer Textdatei Java Basics - Anfänger-Themen 17
G Erste Schritte Textdatei einlesen und in Array speichern Java Basics - Anfänger-Themen 5
F Textdatei einlesen und Zeilen zählen Java Basics - Anfänger-Themen 10
L Namen aus Textdatei auslesen Java Basics - Anfänger-Themen 1
E Textdatei kopieren funktioniert nicht Java Basics - Anfänger-Themen 12
M Zweidimensionales Array aus Textdatei gewinnen Java Basics - Anfänger-Themen 6
C Aus einer Textdatei Zahlen lesen mit Leerzeichen Java Basics - Anfänger-Themen 11
S Methoden Textdatei auslesen Java Basics - Anfänger-Themen 11
T Textdatei Zeile löschen? Java Basics - Anfänger-Themen 4
T Textdatei beschreiben/bearbeiten Java Basics - Anfänger-Themen 4
S Textdatei einlesen und JFrame füllen Java Basics - Anfänger-Themen 14
C auslesen bestimmter werte einer textdatei und anschl. hineinschreiben in eine neue txt-datei. Java Basics - Anfänger-Themen 2
S Textdatei lesen, Methode gibt nur die letzte Zeile aus. Warum? Java Basics - Anfänger-Themen 5
C Einlesen in Array von Textdatei sehr langsam Java Basics - Anfänger-Themen 7
R Werte in eine Textdatei schreiben Java Basics - Anfänger-Themen 20
J Neue Zeile an bestimmter Stelle in Textdatei einfügen Java Basics - Anfänger-Themen 2
D Textdatei in geschachtelte Array speichern Java Basics - Anfänger-Themen 17
T Scanner für große Textdatei Java Basics - Anfänger-Themen 11
A Unterschied Textdatei und Quelltextdatei Java Basics - Anfänger-Themen 5
P Input/Output Textdatei einlesen - 1. Zeichen fehlt Java Basics - Anfänger-Themen 7
J Input/Output Textdatei in einer JAR lesen Java Basics - Anfänger-Themen 3
T Erste Schritte einzelne Wörter aus textdatei lesen... Java Basics - Anfänger-Themen 4
S Textdatei im Internet lesen und editieren Java Basics - Anfänger-Themen 2
J Textdatei einlesen und ausgeben - NullPointerException Java Basics - Anfänger-Themen 5
M Input/Output Objekte in einer Textdatei ablegen (Highscore) Java Basics - Anfänger-Themen 9
P CSV Daten in Textdatei Speichern Java Basics - Anfänger-Themen 3
K Input/Output Eingelesenedaten von Scanner als Textdatei ausgeben? Java Basics - Anfänger-Themen 2
N Input/Output Konsolenausgabe in Textdatei speichern/umleiten Java Basics - Anfänger-Themen 7
V Auf Textdatei in jar zugreifen Java Basics - Anfänger-Themen 3
A Textdatei einlesen - erstes Zeichen falsch Java Basics - Anfänger-Themen 20
S Methoden Textdatei Teil String auslesen Java Basics - Anfänger-Themen 3
H Zeile aus Textdatei lesen und in Textfield schreiben Java Basics - Anfänger-Themen 4
J durch drücken eines buttons text in einer textdatei speichern Java Basics - Anfänger-Themen 2
W letzte Zeile aus wachsender Textdatei auslesen Java Basics - Anfänger-Themen 5
algebraiker Textdatei-Import Java Basics - Anfänger-Themen 8
M Datum aus einer Textdatei holen Java Basics - Anfänger-Themen 9
C Spalte einer Textdatei einlesen Java Basics - Anfänger-Themen 10
Fab1 Input/Output Textdatei auslesen Java Basics - Anfänger-Themen 4
O grosse Textdatei performant als string speichern Java Basics - Anfänger-Themen 8
P Mit offset aus Textdatei auslesen Java Basics - Anfänger-Themen 3
C Textdatei einlesen Java Basics - Anfänger-Themen 8
V Falsches Auslesen von Textdatei Java Basics - Anfänger-Themen 3
T Input/Output 20Mb Textdatei zeilenweise auslesen Java Basics - Anfänger-Themen 10
N Textdatei lesen mit Umlauten Java Basics - Anfänger-Themen 16
N In Textdatei speichern und auslesen Java Basics - Anfänger-Themen 18
M Textdatei einlesen Java Basics - Anfänger-Themen 3
M Liste in Textdatei schreiben Java Basics - Anfänger-Themen 7
B Input/Output Textdatei einlesen Windows / Linux Java Basics - Anfänger-Themen 2
F Textdatei einlesen Java Basics - Anfänger-Themen 7
C Textdatei einlesen -> Probleme Java Basics - Anfänger-Themen 3
K Input/Output Textdatei scheibchenweise auslesen Java Basics - Anfänger-Themen 8
S Textdatei stückweise einlesen Java Basics - Anfänger-Themen 7
D 1 Wort aus TextDatei auslesen Java Basics - Anfänger-Themen 3
J Jede Zeile der Textdatei in ListUI eintragen Java Basics - Anfänger-Themen 2
N Textdatei wird beim Speichern nicht überschrieben, sondern ergänzt Java Basics - Anfänger-Themen 4
A Double Array in TextDatei schreiben Java Basics - Anfänger-Themen 9
K Richtige Pfadangabe einer Textdatei Java Basics - Anfänger-Themen 7
B OOP Aus Textdatei auslesen Java Basics - Anfänger-Themen 11
P Textdatei auf erste Zeichenkette Prüfen... Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben