Zeilen vergleichen

N

noobilicious

Gast
Hallo!

Gibt es in Java eine Möglichkeit, sich die aktuelle Zeile in einem Textdokument zu merken, dann mit dieser etwas zu machen und letztendlich bei der nächsten weiterzumachen?
Mein Problem ist folgendes: ich habe 2 *.txt-Dateien, die ich zeilenweise vergleichen will. Das funktioniert soweit auch, also es wird alles gefunden, was auch gefunden werden sollte. Allerdings werden beide Files unnötig oft durchlaufen und ich weiß nicht wie man das ändern kann.

Code:
Text 1 			Text2
Zeile1a			Zeile1b
Zeile2	a			Zeile2b
Zeile3	a			Zeile3b
Zeile4	a			Zeile4b

Der Ablauf soll so sein, dass Zeile1a (aus Text 1) eingelesen und ein spezifisches Element daraus gespeichert wird.
Dann soll Zeile1b aus Text 2 eingelesen, eben falls ein Element als Variable gespeichert werden.
Die beiden werden dann vergleichen, wenn eine Übereinstimmung zutrifft, werden die Zeilen ausgegeben. Das geht auch alles soweit, nur an den weiteren Schritten hapert es.

Im nächsten Schritt sollte Zeile2b eingelesen werden + Variable gespeichert und dann mit 1a verglichen werden, dann 3b und zum Schluss 4b.
Danach soll 2a eingelesen und mit 1b, 2b, 3b und 4b verglichen werden usw, bis Text 1 komplett durchlaufen wurde, sodass ich dann jede Zeile aus Text 1 mit jeder Zeile aus Text 2 verglichen habe.

Nur wie kann ich meinem Java-Programm sagen, dass es nicht immer wieder bei Zeile1 anfangen soll, sondern wenn diese abgearbeitet ist, bei Zeile2 fortfahren soll?
Momentan wird alles erneut von vorne durchlaufen und das ist unnötig. Es funktionert zwar, aber da ich recht viele Zeilen vergleichen will, dauert das natürlich ewig.

Für Hilfe dankbar.
 

SamHotte

Top Contributor
Sind die Dateien klein genug, um sie beide in bspw. je eine ArrayList einzulesen? Dann könntest Du auf den Listen besser navigieren ...
 
N

noobilicious

Gast
Teilweise.
Die größten sind allerdings 300 MB groß, habe gerade versucht, eine davon in eine ArrayList zu speichern und das hat schon kräftig gehakt, sprich der Rechner war für etliche Minuten extrem ausgebremst. (einfach nur mit Bufferedreader jede Zeile eingelesen, in ArrayList gespeichert und dann versucht, jedes Element auszugeben).
Bei einigen könnte das jedoch funktionieren.
 

SamHotte

Top Contributor
Ein Teil des ausbremsens könnte auf die häufige vergrößerung der ArrayList zurückzuführen sein - wenn Du vorher die Zeilenanzahl schätzt und die Liste gleich groß genug machst, tut sich dann was bei der Geschwindigkeit?

Ansonsten fällt mir noch MergeSort ein, aber Du willst ja nicht sortieren ...
 

parabool

Bekanntes Mitglied
Wenn ich das Problem richtig verstanden hab müsste es doch so gehen:

Code:
durchlaufe Text1 von Zeile 1 bis n
{

	durchlaufe Text2 von Zeile 1 bis m
	{

	   
		vergleich(text1.zeile , text2.zeile)

	
	}	

}


Das das ganze sehr lange dauern kann ist klar.

Könntest die Texte auch in eine DB einlesen, das spezifische Element (bestimmter Teil einer Zeile?) als
extra Feld (indiziert) in DB anlegen, und dann per SQL die Suche durchführen.
 
N

noobilicious

Gast
Wenn ich die Größe der ArrayList vorher festlege, tut sich tatsächlich einiges und es gibt keine krassen Freezes mehr. Wusste ich so auch noch nicht, thx.

Von SQL und DB habe ich keine Ahnung, ich möchte das Ganze mit Java lösen.

Also gibt es in Java so keine Möglichkeit mir eine Zeile zu merken um dann später bei der ihr nachfolgenden fortzufahren? Habe den LineNumberReader gefunden, und dachte es könne damit gehen. Aber da habe ich auch nichts gefunden wie ich dann mit der nächsten Zeile fortfahren kann...

Geht das also nur über ein Schleifenkonstrukt und indem ich beide Dateien komplett durchlaufe und mir dann immer mein Element extrahiere?
Oder ergibt es mehr Sinn, wenn ich meine Elemente einmal komplett aus beiden Texten in ein Array einlese und dann die beiden Arrays verlgeiche?
Was ist aus Programmierersicht (auch in Bezug auf die Zeit und Speicherverbrauch etc) sinnvoller?
 
V

vanny

Gast
Hmm, vieleicht ziehst du dir nur die kleinere Datei in eine ArrayList und gleichst dann immer Zeile für Zeile aus der großen Datei mit der ArrayList ab. So hast du eigentlich ein Minimum an Speicherbedarf.

Obs dadurch auch performanter wird weiß ich nicht.

Gruß Vanny
 

BlackViruZ

Aktives Mitglied
Wenn ich die Größe der ArrayList vorher festlege, tut sich tatsächlich einiges und es gibt keine krassen Freezes mehr. Wusste ich so auch noch nicht, thx.

Von SQL und DB habe ich keine Ahnung, ich möchte das Ganze mit Java lösen.

Also gibt es in Java so keine Möglichkeit mir eine Zeile zu merken um dann später bei der ihr nachfolgenden fortzufahren? Habe den LineNumberReader gefunden, und dachte es könne damit gehen. Aber da habe ich auch nichts gefunden wie ich dann mit der nächsten Zeile fortfahren kann...

Geht das also nur über ein Schleifenkonstrukt und indem ich beide Dateien komplett durchlaufe und mir dann immer mein Element extrahiere?
Oder ergibt es mehr Sinn, wenn ich meine Elemente einmal komplett aus beiden Texten in ein Array einlese und dann die beiden Arrays verlgeiche?
Was ist aus Programmierersicht (auch in Bezug auf die Zeit und Speicherverbrauch etc) sinnvoller?
Alternativ nur die Zeilen welche du dir Merken willst als String in eine List schreiben.

Wenn du dir eine Zeile "Merken" willst, und sie nicht in den speicher einlesen möchtest, um das ganze auf Speicherverbrauch zu Optimieren könntest du statt mit einem FileReader, mit einem Random Access File arbeiten und dir die Positionen des Streams bei den jeweiligen Zeilen in ein Array schreiben.
Das hieße allerdings in dem Context auch, dass mehrfach getrennt hintereinander auf die Festplatte zugegriffen wird, das könnte (vorallem bei Systemen wo die Festplatte gerade eh unter volllast rattert, weil z.b. ein großer kopiervorgang läuft) dann etwas verlangsamen.

Das funktioniert dann aber nur solange, wie die beiden dateien zwischendurch nicht bearbeitet werden (an der Stelle könnte man dann auch mit NIO die Dateien blocken bzw auf änderungen überwachen lassen, oder mit dem alten IO die timestamps vergleichen..)

Ich weiß nicht genau wie du die Dateien vergleichen willst, vielleicht kann man das auch einfacher optimieren.
Vergleichst du sagen wir 1 : N zeilen, also jeweils eine zeile der ersten datein mit vielen zeilen aus der 2ten oder 1 : 1 (eine Zeile in der anderen datei mit genau einer zeile in der anderen datei) oder sogar N : N ?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Array: Zeilen vergleichen Java Basics - Anfänger-Themen 4
K Input/Output 6000 Zeilen einlesen und String-Array vergleichen? Java Basics - Anfänger-Themen 1
Q LogFile.log einlesen und Werte zwischen 5 zeilen vergleichen Java Basics - Anfänger-Themen 5
J Zeilen eines Arrays vergleichen Java Basics - Anfänger-Themen 2
H Leere Zeilen in Textdatei löschen lassen Java Basics - Anfänger-Themen 5
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
districon 2D Array - Zeilen und Spalten durchsuchen Java Basics - Anfänger-Themen 3
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
s_1895 zu viele Zeilen in der Main Methode Java Basics - Anfänger-Themen 4
W Anzahl der Zeilen ausgeben lassen Java Basics - Anfänger-Themen 20
crrnogorka Letzte Zeile einer Tabelle "überschreibt" alle anderen Zeilen Java Basics - Anfänger-Themen 1
X Textdatei: zwei-zeilenweise gleiche Zeilen rausschmeißen Java Basics - Anfänger-Themen 21
A Jede x-te Zeile, lösche 10 Zeilen Java Basics - Anfänger-Themen 9
das_leon Alle Zeilen einer CSV-Datei auslesen Java Basics - Anfänger-Themen 1
C Zeilen aus einer Datei in Array speichern Java Basics - Anfänger-Themen 4
F Mehrere Zeilen zu einer Zeile zusammenfügen und in eine Datei schreiben Java Basics - Anfänger-Themen 1
A String mit mehreren Zeilen splitten Java Basics - Anfänger-Themen 4
S Java Text splitten mit Tabs, Zeilen, Zeichen und Klammern. Java Basics - Anfänger-Themen 6
D JTable Zeilen löschen Java Basics - Anfänger-Themen 5
H Best Practice JavaFX TableView mit Zell-Rahmen anstelle von Zeilen-Balken Java Basics - Anfänger-Themen 1
V Ergebnisse in 2 Zeilen Java Basics - Anfänger-Themen 4
R Eine Datei mit mehreren Zeilen beschreiben Java Basics - Anfänger-Themen 5
C Zeilen in Array einlesen und splitten? Java Basics - Anfänger-Themen 17
T Zeilen des ListArray nach einem Wort durchsuchen und diese Zeile ausgeben Java Basics - Anfänger-Themen 4
T Exceptions - ausgeführte Zeilen Java Basics - Anfänger-Themen 4
M Input/Output Alle Zeilen auslesen und in Variable speichern Java Basics - Anfänger-Themen 5
X wie kann ich in bluej/java einene 2d array mit zahlen fuellen, so dass sich diese in der der zeilen Java Basics - Anfänger-Themen 2
J Zeilen aus einer .txt-Datei auslesen und Variablen zuweisen Java Basics - Anfänger-Themen 11
F Problem mit Tabulatoren bei Zeilen zählen einer Textdatei Java Basics - Anfänger-Themen 17
F Textdatei einlesen und Zeilen zählen Java Basics - Anfänger-Themen 10
J Klassen Hilfe bei unbekannten Zeilen bzgl. Klassen / Komponenten Java Basics - Anfänger-Themen 12
T JTable einzelne Zeilen löschen Java Basics - Anfänger-Themen 3
L String extrahieren mit Regular Expression über mehrere Zeilen hinweg Java Basics - Anfänger-Themen 1
T CSV auf Inhalt und Zeilen überprüfen Java Basics - Anfänger-Themen 2
I Datei mit 2 Spalten und millionen Zeilen Java Basics - Anfänger-Themen 19
kaoZ Input/Output Einlesen von mehreren Zeilen Java Basics - Anfänger-Themen 4
J Zeilen unsichtbar Java Basics - Anfänger-Themen 11
3 JLabel - Text in mehreren Zeilen zentrieren Java Basics - Anfänger-Themen 5
L Split + Zeilen einer Datei mit bestimmtem Inhalt löschen Java Basics - Anfänger-Themen 23
V Methoden Zeilen nach bestimmtem Attribut sortieren Java Basics - Anfänger-Themen 4
M Einzelne Zeilen nach Zeichen auslesen Java Basics - Anfänger-Themen 4
T Methoden HILFE! readLine() liest nur ungerade Zeilen?? Java Basics - Anfänger-Themen 2
G JTextArea: nur bestimmte Zeilen anders formatieren Java Basics - Anfänger-Themen 7
B Input/Output bestimmte Zeilen in .txt Dateinen überschreiben Java Basics - Anfänger-Themen 20
G 3422 Zeilen in Eclipse Console Java Basics - Anfänger-Themen 5
L Zeilen und Spalten sortieren Java Basics - Anfänger-Themen 11
K Erste Schritte Eingabetext besteht aus mehreren Zeilen? Java Basics - Anfänger-Themen 3
T BufferedReader mehrere Zeilen einlesen Java Basics - Anfänger-Themen 4
B Zählen bestimmter Zeilen einer .txt Java Basics - Anfänger-Themen 7
N Datei mit max 2000 Zeilen schreiben Java Basics - Anfänger-Themen 9
D Input/Output Zeilen aus txt-datei in Java-Liste einfügen Java Basics - Anfänger-Themen 9
K BufferedWriter schreibt die letzten paar Zeilen nicht Java Basics - Anfänger-Themen 5
R Erste Schritte 2D-Array: Zeilen & Spalten ohne schleife übergeben? Java Basics - Anfänger-Themen 3
C Mehrere Zeilen unter ~.showMessageDialog Java Basics - Anfänger-Themen 12
K Java Split mehrere Zeilen Java Basics - Anfänger-Themen 4
H 200000 Zeilen aus Datei einlesen Java Basics - Anfänger-Themen 13
P Bestimmte Zeilen einer Datei ermitteln ? Java Basics - Anfänger-Themen 30
B JList und JTable: leere Zeilen bei listfiles(); Java Basics - Anfänger-Themen 5
M Zeilen aus String exportieren Java Basics - Anfänger-Themen 5
P Unterschied dieser 2 code Zeilen Java Basics - Anfänger-Themen 12
A Anzahl Zeilen eines Arrays bestimmen Java Basics - Anfänger-Themen 10
S .txt einlesen->Zeilen ersetzen->neu.txt speichern Java Basics - Anfänger-Themen 13
R String über mehrere Zeilen Java Basics - Anfänger-Themen 15
M Verständnis einiger Zeilen Java Basics - Anfänger-Themen 4
E Array mit Zahlen von 1-(Zeilen*Spalten) befüllen Java Basics - Anfänger-Themen 8
S Zeilen zählen Java Basics - Anfänger-Themen 7
Ollek Bestimmte Zeilen aus einer HTML Datei lesen Java Basics - Anfänger-Themen 8
C Zeilen aus einer Datei auslesen Java Basics - Anfänger-Themen 4
H String/StringBuffer nach zeilen aufteilen Java Basics - Anfänger-Themen 2
K Wie kann ich alle Zeilen in eineR Datenbank zählen? Java Basics - Anfänger-Themen 13
JFeel-x Zeilen eines JEditorPanes Java Basics - Anfänger-Themen 2
0 CSV Import - Zeilen, Spalten Java Basics - Anfänger-Themen 15
O 2D Array - Zeilen-/Spaltenlänge ermitteln Java Basics - Anfänger-Themen 4
P String über mehrere Zeilen definieren Java Basics - Anfänger-Themen 3
G Datei zeilen anhängen Java Basics - Anfänger-Themen 3
A Scanner liest nur 999 Zeilen ein Java Basics - Anfänger-Themen 5
B Zeilen in Textdatei löschen Java Basics - Anfänger-Themen 2
D Datei einlesen, zeilen ignorieren, probleeem Java Basics - Anfänger-Themen 7
A Anzahl der Zeilen in Textdatei Java Basics - Anfänger-Themen 7
G Zeilen in Eclipse einblenden Java Basics - Anfänger-Themen 2
M Zeilen aus Textdatei in Array schreiben Java Basics - Anfänger-Themen 2
M Zeilen auslesen Java Basics - Anfänger-Themen 12
H Streams etc. erster Versuch Zeilen aus einer Datei zu lesen Java Basics - Anfänger-Themen 6
L In einer Tabelle Zeilen loeschen Java Basics - Anfänger-Themen 4
D Auf Zeilen eines zweidimensionalen Arrays zugreifen Java Basics - Anfänger-Themen 3
D txt nach Zeilen splitten. Java Basics - Anfänger-Themen 9
G Anzahl der Zeilen in einer Datei Java Basics - Anfänger-Themen 7
T die letzten X zeilen einer datei entfernen Java Basics - Anfänger-Themen 19
E was bedeuten @Zeilen Java Basics - Anfänger-Themen 4
T Einlesen von einzelnen Zeilen Java Basics - Anfänger-Themen 2
T null-Zeilen aus einem Array entfernen Java Basics - Anfänger-Themen 4
E Automatischer Zeilen-Umbruch bei JTextArea Java Basics - Anfänger-Themen 4
G zeilen aus text datei löschen Java Basics - Anfänger-Themen 6
G CSV auslesen und Zeilen in Array speichern Java Basics - Anfänger-Themen 13
ARadauer zeilen einer text datei ermitteln Java Basics - Anfänger-Themen 6
S Anzahl von zeilen einer Datei bestimmen. Java Basics - Anfänger-Themen 4
J Tabelle mit mehreren Zeilen dynamisch aufbauen Java Basics - Anfänger-Themen 2
F Zeilen und Spalten in JTable Selektieren Java Basics - Anfänger-Themen 2
S In einer CSV Datei leere Zeilen ignorieren Java Basics - Anfänger-Themen 6
W int aus Zeilen einer Textdatei Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben