5000-6000 Dateien nach Textblocken suchen

Status
Nicht offen für weitere Antworten.

chuanito

Mitglied
hallo,

Ich habe folgendes Problem, das ich zu lösen versuche:

-in einem einzigen Verzeichnis befinden sich ca. 5000-6000 Dateien die in Ihrer grösse sehr
unterschiedlich sein können. (10kb-1mb)
-diese Dateien beinhalten Textstellen (irgendwo im Text) nach denen ich mit einer Eingabe
gesucht werden muss.
-jeder Block im Text ist klar gekennzeichnet wie z.B

123456
123456 Adresse der_gesuchte_text
123456 Wohnort
456435
456435 Adresse
456435 Wohnort

Was ich nun versuche ist durch diese 5000-6000 Dateien zu gehen und diesen "der_gesuchte_text"
zu finden. Wenn ich es gefunden habe sollte es die ersten 6 stellen (in diesem Fall "123456") herausfiltern
und den ganzen Block mit diesen "prefix" anzeigen.

Ich verwende immer noch Java 1.3 daher kommt höchsten die RegExp Funktionalitäten von commons oro
in Frage..

vielen Dank im voraus für die Antworten,
Chuanito
 

Sky

Top Contributor
Warum machst Du das mit JAVA ?

Unter UNIX findet man sowas wie 'grep'.

Wenn's doch mit JAVA sein soll: String#indexOf kannst Du zum suchen verwenden.
 

AlArenal

Top Contributor
Wenn das ne einmalige Sache ist und es aufs Ergebnis ankommt, hat Sky Recht, da ist man mit nem Linux gut aufgehoben...
Natürlich gehts mit Cygwin auch the Unix way auf Windows-Basis...

Wenn es unbedingt Java sein muss und das ganze öfter benötigt wird, schau dir mal Lucene an, das ist ein Framwork/eine Lib für Suchmaschinen.

"Lucene 1.4 will run with JDK 1.3 and up but requires at least JDK 1.4 to compile. Lucene >= 1.9 requires Java 1.4."

Vor Urzeiten habe ich beim Online-Chefredakteur der Wirtschaftswoche auch mal ein freies Tool für Windows gesehen, dass über komplette Verzteichnisse Suchen und Suchen/Ersetzen kann.. hab aber vergessen wie es heißt.. ;)

Ansonsten würde ich auch mal über irgendwelche Desktop-Suchmaschinen nachdenken. Gibt auch eine in Java geschrieben (Unterbau ist Lucene): http://kbforge.com/
 

chuanito

Mitglied
Nun, es gibt ein Shellskript, der diese Suche schon macht...es gibt einfach die dateinamen aus, die diesen
Text beinhalten..
Ich will aber ein Webinterface machen, damit sich die Suche vereinfacht und auch Leute suchen können,
die kein Zugriff auf diesen Server haben.
 

AlArenal

Top Contributor
Dann haste die o.g. Möglichkeiten und noch mehr (PHP, Python, ...).

Ob du dann dein Shell-Skript weiterverwenden, oder das Ganze neu implementieren willst, ist dabei dir überlassen. Zwingend Java-spezifisch ist das jedenfalls nicht. Erinnert mich an die guten alten CGI-Skripte in Perl.. oder Perl mit Webseiten vermanscht über mod_perl für den Apache Webserver...

Wie gesagt, Möglichkeiten zur Umsetzung hast du en masse...
 

chuanito

Mitglied
ich glaube, dass ich mich nicht klar genug ausgedrückt habe :)

Ich will das ganze mit JAVA schreiben.Sonst hätte ich es nicht in einem Java-Forum
gepostet :)

Ich weiss, dass solche aufgaben sicherlich angenehmer in Perl zu realisieren sind aber
dies ist nicht möglich aufgrund der Gegebenheiten an meiner Arbeitsstelle ;-)
 

Murray

Top Contributor
Mit Java lässt sich das doch auch ziemlich "straightforward" lösen:
1. Dateien im Verzeichnis auflisten -> java.io.File#listFiles
2. Dateien zeilenweise einlesen -> BufferedReader, ggfs. Forensuche
3. Präfix fester Länge abtrennen -> java.lang.String#substring
4. Ob die Zeile das gewünschte Muster enthält, lässt sich mit java.lang.String#indexOf erkennen (wie Sky schon geschrieben hat)

Um jetzt nicht nicht nur die eine Zeile, sondern den gesamten Block auszugeben, muss man das noch etwas erweitern; ich würde mir immer dann, wenn ein neues Präfix kommt, einen Puffer (z.B. einen java.util.Vector) anlegen und alle Zeilen mit dem Präfix in diesen Puffer schreiben und jeweils prüfen, ob die Zeile das Muster enthält.

Wenn ein neuer Puffer angelegt wird (oder das Ende der Datei ereicht wurde), gibt man den Inhalt des alten Puffers genau dann aus, wenn mindestens eine der Zeilen das Muster enthalten hat.

Die Implementierung dürfte nicht allzu schwierig sein.

/EDIT: Typo
 

AlArenal

Top Contributor
Ich würds aber über Lucene machen. Ist doch ziemlicher Overkill für jede einzelne Suche erneut mehrere tausend Dateien zu durchsuchen..
 

Murray

Top Contributor
AlArenal hat gesagt.:
Ich würds aber über Lucene machen. Ist doch ziemlicher Overkill für jede einzelne Suche erneut mehrere tausend Dateien zu durchsuchen..
Nun ja - man könnte natürlich auch die Installation einer derart mächtigen Software wie Lucene für so eine eher einfache Aufgabe als Overkill bezeichnen - ist sicher eine Frage der Betrachtungsweise...

Natürlich sollte man sich geeignete Caching-Strategien überlegen, aber das sollte man m.E. erst dann tun, wenn a) das gProgramm grundsätzlich funktioniert , b) die Antwortzeiten wirklich aus Benutzersicht verbesserungsbedürftig sind und c) die Änderungsfrequenz der Dateien gering genug ist, um genügend Cache-Hits zu bekommen.
 
B

bygones

Gast
Murray hat gesagt.:
AlArenal hat gesagt.:
Ich würds aber über Lucene machen. Ist doch ziemlicher Overkill für jede einzelne Suche erneut mehrere tausend Dateien zu durchsuchen..
Nun ja - man könnte natürlich auch die Installation einer derart mächtigen Software wie Lucene für so eine eher einfache Aufgabe als Overkill bezeichnen - ist sicher eine Frage der Betrachtungsweise...

Natürlich sollte man sich geeignete Caching-Strategien überlegen, aber das sollte man m.E. erst dann tun, wenn a) das gProgramm grundsätzlich funktioniert , b) die Antwortzeiten wirklich aus Benutzersicht verbesserungsbedürftig sind und c) die Änderungsfrequenz der Dateien gering genug ist, um genügend Cache-Hits zu bekommen.
naja - zum ersten punkt:

das ist die Frage der Aufgabe. So wie es beschrieben wurde soll dies öfters geschehen und jedes mal zig tausend dateien öffnen auslesen und wieder schließen, ohne sinnvolles Cache oder sonstigem System dahinter ist unsinnig imho

zu dem anderen: nein - ich schreibe bestimmt nicht ein irgendwie funktionierendes programm, um dann zu sehen dass es auch besser geht. Man sollte sich vorher schon die richtigen Strategien überlegen und somit gleich das korrekte system zu nutzen... alles andere wäre eine immer währende Baustelle
 

AlArenal

Top Contributor
Zumal man mit Lucene doch ganz andere Möglichkeiten hat das Ganze später auszubauen... Ist selten so, dass man Spezifikationen hat, die in Stein gemeißelt und unumstößlich sind und sich niemals ändern werden. Und wenn es sie doch mal gibt, stellen sie sich meist als Trugschluss heraus.
 

Murray

Top Contributor
deathbyaclown hat gesagt.:
das ist die Frage der Aufgabe. So wie es beschrieben wurde soll dies öfters geschehen und jedes mal zig tausend dateien öffnen auslesen und wieder schließen, ohne sinnvolles Cache oder sonstigem System dahinter ist unsinnig imho
Wie oft das geschehen soll, und ob die gleichen Muster wiederholt abgefragt werden sollen, und wie oft sich die Dateien ändern können, ist - mir zumindest - unbekannt; insofern lässt sich vorab einfach nicht sagen, wie ein sinnvolles Caching aussieht.

Ob man hier mit einer "selbstgestrickten" Lösung oder einer fertigen Komponenten besser fährt, hängt von diversen Faktoren ab: verträgt sich die Lizenz der Komponente mit dem Einsatzgebiet, muss die gesamte Lösung revisionssicher sein,....


deathbyaclown hat gesagt.:
zu dem anderen: nein - ich schreibe bestimmt nicht ein irgendwie funktionierendes programm, um dann zu sehen dass es auch besser geht. Man sollte sich vorher schon die richtigen Strategien überlegen und somit gleich das korrekte system zu nutzen... alles andere wäre eine immer währende Baustelle
So meine ich das auch nicht - man muss natürlich vorher abschätzen, ob die gewählte Strategie überhaupt zum Ziel führen kann. Allerdings sollte man Optimierungen erst dann machen, wenn der Rest läuft, da die meisten Performance-Optimierungen im Lichte der Programmwartbarkeit eben eher keine Optimierungen darstellen -> " It is easier to optimize correct code than to correct optimized code."


Diese Diskussionen sprengen aber wohl langsam den Rahmen dieses Threads...
 

chuanito

Mitglied
Auf Lucene bin ich auf der Suche nach Informationen zu diesem Thema auch gestossen aber
für mich ist es klar ein Overkill.

Ich brauche keine Operatoren..keine Logik bei der Suche etc.

Ein Feld mit 6 numerischen Werten die eingegeben werden. Diese 6 Ziffern sind allesamt Unique und
werden in 90% nie zwei mal gesucht.

Die 5000-6000 dateien zu suchen mag viel Zeit beanspruchen aber das ist kein Problem, da nur max. 10 Leute
von ca. 6000 Usern diese Funktionalität haben werden und auch diese 8-10 Queries am Tag absetzen werden.
 

chuanito

Mitglied
Eine Klasse zu schreiben, die die Funktion ausführt oder gleich einen ganzen Framework am Hals zu haben und davon 10% zu gebrauchen... :noe:

Bevor ich an die Optimierung gehe, muss ich ja wissen ob ich es überhaupt optimieren "muss".
 

AlArenal

Top Contributor
chuanito hat gesagt.:
Eine Klasse zu schreiben, die die Funktion ausführt oder gleich einen ganzen Framework am Hals zu haben und davon 10% zu gebrauchen... :noe:

So gehts mir jeden Tag, wenn ich in Java code... und es sind vermutlich nichtmal 10%...
 

chuanito

Mitglied
nein ich meine...wenn ich Java entwickle und Sachen schreibe, die ich nicht schon geschrieben habe, dann versuche
ich es meistens selber zu schreiben, weil ich etwas dabei lernen will.
Handelt es sich dabei um Sachen, die den Zeitrahmen sprengen würden, dann versuche ich auf vorhandenen Code zurückzugreifen.
In diesem Fall glaube ich allerdings, dass der Aufwand nicht zu gross sein kann. Trotzdem wollte ich eure Meinungen einholen um das Problem bestmöglich anzugehen.
 

byte

Top Contributor
chuanito hat gesagt.:
nein ich meine...wenn ich Java entwickle und Sachen schreibe, die ich nicht schon geschrieben habe, dann versuche ich es meistens selber zu schreiben, weil ich etwas dabei lernen will.

Das ist halt individuell verschieden. Ich persönlich würde z.B. eher Lucene verwenden, wenn es mir dabei um den Lernfaktor gehen würde. Wenn ich aber einfach nur in kürzester Zeit ein Ergebnis haben will, ohne Ansprüche an die Laufzeit zu stellen, dann codet man es halt eben so runter.


Natürlich sollte man sich geeignete Caching-Strategien überlegen, aber das sollte man m.E. erst dann tun, wenn a) das gProgramm grundsätzlich funktioniert , b) die Antwortzeiten wirklich aus Benutzersicht verbesserungsbedürftig sind und c) die Änderungsfrequenz der Dateien gering genug ist, um genügend Cache-Hits zu bekommen.

Sorry aber das ist doch albern. Natürlich musst Du BEVOR Du losprogrammierst überlegen, welche Technologie Du einsetzen willst - also in diesem Fall ob Du es mit purem Java runtercodest oder z.B. Lucene verwendest. Es ist doch total albern, wenn Du es erst runtercodest, damit es überhaupt mal funktioniert und Du dann überlegst, es zu optimieren. Wie sollte denn in diesem Fall eine Optimierung der Laufzeit aussehen? Willst Du Datamining-Strategien selbst implementieren? Viel Spaß...
 

chuanito

Mitglied
das ist doch genau das was ich schon in einige Posts zu erklären versuche...

  • Ich versuche keine Search Engine zu programmieren...
    Ich will keine Scores für meine Resultate...
    Ich will keine logischen Operatoren bei der Suche...
    Ich will nicht mehrere Suchargumente benutzen..
    Ich will nichts cachen...

Das einzige ist eine simple Suche auf eine Texstelle in einem ASCII-File und danach den Block herausfiltern..
das ist alles...

Aber während der Zeit wo ich hier immer wieder ne Antwort geschrieben habe, habe ich schon eine 80% funktionierende
Lösung entwickelt ;-)
 

chuanito

Mitglied
Caffè Latte hat gesagt.:
Hi,

mal ne ganz andere Frage: was spricht dagegen eine neuere Java-Version zu installieren?

Caffè Latte

Eine IBM Websphere 5 Umgebung bestehend aus 12 Servern die jeweils Load Balanced sind
und auf der ca. 30 Applikationen laufen und die man nicht ohne weiteres auf 1.4-1.5 migriert.
Die Migration ist in Planung und wird voraussichtlich in 7-8 Monaten abgeschlossen sein.
 

Murray

Top Contributor
byto hat gesagt.:
Sorry aber das ist doch albern.
Vielen Dank.

byto hat gesagt.:
Natürlich musst Du BEVOR Du losprogrammierst überlegen, welche Technologie Du einsetzen willst - also in diesem Fall ob Du es mit purem Java runtercodest oder z.B. Lucene verwendest. Es ist doch total albern, wenn Du es erst runtercodest, damit es überhaupt mal funktioniert und Du dann überlegst, es zu optimieren. Wie sollte denn in diesem Fall eine Optimierung der Laufzeit aussehen? Willst Du Datamining-Strategien selbst implementieren? Viel Spaß...
Wie ich weiter oben schon versucht habe zu erklären: es geht mir nicht darum, erst zu programmieren und das als Optimierung später durch Lucene zu ersetzen - das wäre in der Tat Quatsch. Wenn man sich aber für die Eigenimplementierung entscheidet, dann sollte man eben erst später optimieren
 

Caffè Latte

Bekanntes Mitglied
chuanito hat gesagt.:
...
Eine IBM Websphere 5 Umgebung bestehend aus 12 Servern die jeweils Load Balanced sind
und auf der ca. 30 Applikationen laufen und die man nicht ohne weiteres auf 1.4-1.5 migriert. ...

Ok, überzeugt ... :roll:

Caffè Latte
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
izoards SSDP M-Search [Sony Alpha 6000 camera Remote Control] Allgemeine Java-Themen 2
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
G Dateien lesen Allgemeine Java-Themen 3
OnDemand Unterschiedliche jar Dateien zusammen führen Allgemeine Java-Themen 8
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
Master3000 Dateien zwischen verschiedenen Netzwerken senden Allgemeine Java-Themen 17
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
d.lumpi JDA eclipse dateien versenden Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
L Dateien richtig auslesen Allgemeine Java-Themen 6
L Eclipse Runnable Jar mit Dateien Allgemeine Java-Themen 8
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
MiMa Logging mit log4j2 in verschiedene Dateien? Allgemeine Java-Themen 22
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
O jar und EXE Dateien, Pfade zur Laufzeit Allgemeine Java-Themen 1
W Dateien werden nicht gelöscht - warum? Allgemeine Java-Themen 12
B Dateien / Bilder von "webapp" Ordner bekommen? Allgemeine Java-Themen 1
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
I Java als exe veröffentlichen inkl. kompletter Dateien Allgemeine Java-Themen 4
M Drucken von Dateien Allgemeine Java-Themen 10
J jar Dateien unter Windows 7 mit spezifischer jdk öffnen Allgemeine Java-Themen 2
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
N Temporäre Dateien Allgemeine Java-Themen 3
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
M Dateien schneller kopieren Allgemeine Java-Themen 1
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
K Große JSON-Dateien schnell und effizient verarbeiten Allgemeine Java-Themen 16
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
V Eclipse .class Dateien Allgemeine Java-Themen 9
B Download von dateien Allgemeine Java-Themen 2
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
MiMa Log4j in Dateien mit eigenem Namen schreiben Allgemeine Java-Themen 3
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
C Dateien in Jar aufrufen Allgemeine Java-Themen 14
X NetBeans Bilder und andere Dateien ins .jar schreiben und wieder aus .jar lesen Allgemeine Java-Themen 6
JavaWolf165 Externe .jar-Dateien in .jar-Datei intigrieren Allgemeine Java-Themen 0
X Dateien für Benutzer Sperren Allgemeine Java-Themen 4
D Dateien aus den Internet herunterladen Allgemeine Java-Themen 6
L Methoden Dateien älter als 30 Tage? Allgemeine Java-Themen 11
J .exe Dateien werden nicht gestartet obwohl Pfad richtig Allgemeine Java-Themen 6
RalleYTN Classpath Native Dateien(DLL, SO, JNILIB) Allgemeine Java-Themen 2
J Java .jar Dateien zusammenführen Allgemeine Java-Themen 1
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
F Platzsparende Alternative zu .txt-Dateien Allgemeine Java-Themen 12
X Dateien von der Jar zum Ordner kopieren. Allgemeine Java-Themen 4
Ananaskirsche Input/Output Dateien im Ordner Allgemeine Java-Themen 8
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
X Herunterladen von Dateien aus dem Internet Allgemeine Java-Themen 2
V Input/Output Sound Dateien aus Jar laden Allgemeine Java-Themen 18
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
H PDFBox akzeptiert Dateien nicht Allgemeine Java-Themen 1
B Java - einlesen von Dateien und herausschneiden von XML Dokumenten Allgemeine Java-Themen 5
A Input/Output Spätes Schreiben von Dateien der JVM Allgemeine Java-Themen 3
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
Thallius Dateien Zippen und wieder heraus lesen? Allgemeine Java-Themen 4
T Dateien zur Laufzeit in Java-Programm packen? Allgemeine Java-Themen 3
Maxim6394 Jar Dateien starten nicht Allgemeine Java-Themen 7
U Eclipse Java Programm beschädigt .tar.gz dateien beim Entpacken Allgemeine Java-Themen 7
GUI-Programmer Mp3 Dateien bearbeiten und speichern Allgemeine Java-Themen 3
S Exklusive Sperre auf Dateien: FileChannel, FileLock Allgemeine Java-Themen 0
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
OnDemand Dateien einlesen und vergleichen Allgemeine Java-Themen 1
T Ordner samt Dateien kopieren Allgemeine Java-Themen 11
R Importieren von Txt-Dateien in AbstractTableModel Allgemeine Java-Themen 0
C Dateien komprimieren und verschlüsseln Allgemeine Java-Themen 3
F Eclipse Eclipse kompiliert nicht mehr die aktuellen Dateien Allgemeine Java-Themen 2
R Java Dateien "verschlüsseln" Allgemeine Java-Themen 2
L Passwortgeschützte Dateien Allgemeine Java-Themen 6
A Datentypen Dateien umbenennen mit Dateiendungen - Dateiendungen ausgeben Allgemeine Java-Themen 2
L Reparieren beschädigter PDF Dateien Allgemeine Java-Themen 3
F Dateien ins Array lagern und Optionen zur Auswahl, Allgemeine Java-Themen 5
J XML Dateien vergleichen Allgemeine Java-Themen 9
B Umbenennen von Dateien Allgemeine Java-Themen 2
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
W Best Practice Dateien parsen Allgemeine Java-Themen 3
B Dateien verschwinden aus bin Ordner?! Allgemeine Java-Themen 5
B Dateien prüfen auf Gleichheit Allgemeine Java-Themen 5
M Java Dateien verschieben Allgemeine Java-Themen 2
R Wav-Dateien wiederholt abspielen Allgemeine Java-Themen 2
L Methoden Verarbeitung von Größen Dateien Allgemeine Java-Themen 9
B Alt-Griechisch Zeichen in Dateien Allgemeine Java-Themen 2
M JAR Dateien nur mit Compiler Level 1.6 ausführbar Allgemeine Java-Themen 8
E Zugriff auf Dateien im Filesystem überwachen Allgemeine Java-Themen 5
G .jar Dateien lassen sich nicht mehr öffnen Allgemeine Java-Themen 2
M Datentypen Jar-Dateien öffnen nicht mit Java Allgemeine Java-Themen 4
C Mit Java PDF Dateien bearbeiten. Allgemeine Java-Themen 2
B Input/Output .java-Dateien auslesen Allgemeine Java-Themen 17
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
E Vorschläge, effizientes Hashing von Dateien für vergleich Allgemeine Java-Themen 7
W Vergleich eines Datenträgers auf neue Dateien Allgemeine Java-Themen 14
C Java-Dateien in einheitlichen Zeichensatz umwandeln Allgemeine Java-Themen 10
E Dateien aus / im JAR Allgemeine Java-Themen 2
K LibreOffice Tabelle Dateien im Format .ods bearbeiten Allgemeine Java-Themen 2
L Input/Output Dateien erstellen, wenn ein JAR ausgeführt wird Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben