Dateinamen dynamisch Parsen

w00t

Aktives Mitglied
Hallo,

ich baue gerade eine kleine Dokumentenverwaltung (Auflistung von Dokumenten in einer JTable). Dabei bin ich nun auf folgendes Problem gestoßen:

Es werden automatisch Dateien mit bestimmten Endungen gesucht (kein Problem). Nun wird der Dateiname geparst und diese Informationen werden weggespeichert.

Die Dateien haben im großen und ganzen eine einheitliche Benennung. Das Problem ist, das:
  1. Nicht alle Felder müssen vorhanden sein
  2. Die Reihenfolge ist nicht immer die gleiche

Ich versuche das einmal an ein paar Beispielen zu verdeutlichen
Max Mustermann - Firma Mustermann - 2011 - Rechnung - bezahlt - Haushalt.doc
Max Mustermann - 2011 - Gutschrift - unbezahlt - Haushalt.doc
Max Mustermann - Firma Mustermann - Gutschrift - bezahlt - Auto.doc

<Name> - <Firma> - <Jahr> - Gutschrift/Rechnung - bezahlt/unbezahlt - Kategorie

Nun ist es so das Gutschrift/Rechnung, bezahlt/unbezahlt und Kategorie fest sind und Name und Firma immer Variabel. Das Jahr ist immer eine 4-stellige Ziffer.

Nun ist es so das die Trenner bzw. die Reihenfolge Benutzerdefiniert ist. Deshalb habe ich Platzhalter für den Benutzer eingebaut. Der Benutzer gibt also in einem Feld z.B. folgendes an:
%name% - %company% - %year% - soll Dateien finden und parsen können wo die z.B. wie folgt sind: Max Mustermann - Musterfirma - 2011.doc
oder auch
%name% - %company% - %year% - %typelist% - %payedlist% - %category%
Max Mustermann - Musterfirma - 2011 - Gutschrift - bezahlt - Auto.doc

Dies wurde dann im Programm automatisch zu einem Regex:
(.*)? - (.*)? - ([0-9]{4})
bzw
(.*)? - (.*)? - ([0-9]{4}) - (Gutschrift|Rechnung) - (bezahlt|unbezahlt) - (Auto|Haushalt|etc.)

Jetzt soll der Benutzer aber ja auch nicht bei z.B. 100 verschiedenen Reihenfolgen alles umbenennen müssen oder für alles einen Eintrag in der Liste machen. Was passiert wenn der Firmennahme eine Jahreszahl ist? Wird das dann ignoriert und der Firmenname wird zum Jahr?

Nun war mein Gedanke das der Benutzer nur Trenner angibt. Aber was ist wenn der Benutzer nicht am "-" trennt, sondern an einem Punkt?
Max Mustermann.Musterfirma.2011
Dann gibt es nicht so was wie:
Dr. Max Mustermann, weil dann am Dr. getrennt wird.

Dann war meine Idee das der Benutzer nur den Anfang bestimmt, und festgelegt ist dass das erste bzw die ersten beiden Name und Firma ist. Der Rest wird dann für jeden Teil mit den Listen verglichen. Aber das ist ja auch nicht performant, wenn man davon ausgeht das man ja nicht nur 1-10 Dokumente hat.

Habt ihr irgendwelche anderen Lösungsvorschläge für das Problem oder Tipps wie ich das mit meiner Lösung und kleinen Änderungen sinnvoll umsetzte?

Ich danke euch schon einmal für eure Mühen
 

Michael...

Top Contributor
Wenn ich das richtig verstanden habe soll nicht gezielt nach Max Mustermann gesucht werden, sondern nach Dateinamen, die einem Schema entsprechen. Bei der Vielzahl an Möglichkeiten wird das Schwierig bis unmöglich. Nach Elementen mit definierter Ausprägung (Rechnung, Gutschrift) oder nach einer Jahreszahl lässt sich suchen. Aber was unterscheidet ein Name von einer Firmenbezeichnung oder einer Kategorie - garnichts.
 

Andi_CH

Top Contributor
Am Besten schreibst du alle Möglichkeiten auf die du als Eingabe erwartest, aber es muss mehr als nur das Trennzeichen bekannt sein, wenn das nicht eindeutig ist - das wirst du schnell herausfinden, wenn du deinen "biologischen Aufteilalgorithmus" aufschreibst.

So einige schnelle Gedanken:

Am Besten: Das Trennzeichen wird ausschliesslich als Trennzeichen verwendet und es gibt restriktive Vorschriften was die User eingeben dürfen und was nicht.

Es gibt andere Kriterien (Länge der Felder, anzahl der Felder oder was vor einem Trennzeichen kommen muss oder nicht kommen darf)

Wäre es eine Möglichkeit " . " als Trennstring vorzusehen? Dann passt das mit dem "Dr. Mustermann"
Ist die Liste der Abkürzungen vor dem . endlich? Dann könnte man die gezielt ausschliessen. (Fr. Hr. Dr. ...)
 

w00t

Aktives Mitglied
Wenn ich das richtig verstanden habe soll nicht gezielt nach Max Mustermann gesucht werden, sondern nach Dateinamen, die einem Schema entsprechen. Bei der Vielzahl an Möglichkeiten wird das Schwierig bis unmöglich. Nach Elementen mit definierter Ausprägung (Rechnung, Gutschrift) oder nach einer Jahreszahl lässt sich suchen. Aber was unterscheidet ein Name von einer Firmenbezeichnung oder einer Kategorie - garnichts.

Eine Kategorie ist auch eine festgelegte Liste (die kann der Benutzer im Programm selber definieren). Also fällt das schon einmal weg.
Name und Firmenname wird im Grunde nicht unterschieden, das ist richtig. Da wäre es vielleicht möglich das so zu lassen wie es aktuell ist, also das der Benutzer schreibt:
%name% - %company% [optionalfields]
und dann wird der erste teil abgeschnitten und gesondert zu optionalfields behandelt. Aber auch da müsste ich dann einen Trenner haben und der Trenner dürfte nicht in den festgelegten Werten stehen. Und es müsste bei jedem Teil geschaut werden in welcher Liste das steht, das ist ja auch nicht sehr performant. Wenn das natürlich die einzige Möglichkeit ist, bleibt mir ja nichts anderes übrig, aber ich hoffe da hat jemand noch andere Ideen.
 

w00t

Aktives Mitglied
Am Besten schreibst du alle Möglichkeiten auf die du als Eingabe erwartest, aber es muss mehr als nur das Trennzeichen bekannt sein, wenn das nicht eindeutig ist - das wirst du schnell herausfinden, wenn du deinen "biologischen Aufteilalgorithmus" aufschreibst.

So einige schnelle Gedanken:

Am Besten: Das Trennzeichen wird ausschliesslich als Trennzeichen verwendet und es gibt restriktive Vorschriften was die User eingeben dürfen und was nicht.

Es gibt andere Kriterien (Länge der Felder, anzahl der Felder oder was vor einem Trennzeichen kommen muss oder nicht kommen darf)

Wäre es eine Möglichkeit " . " als Trennstring vorzusehen? Dann passt das mit dem "Dr. Mustermann"
Ist die Liste der Abkürzungen vor dem . endlich? Dann könnte man die gezielt ausschliessen. (Fr. Hr. Dr. ...)

Auf die Idee mit dem " . " bzw. " - " kam ich auch schon. Hab das aber erst einmal verworfen, da ich dem Benutzer ungerne vorschreiben möchte wie er seine Dateien nennen soll. Es geht ja auch um bestehende Listen von Dateien. Deshalb dachte ich ja mein erster Gedanke mit dem Schema den der Benutzer vorgibt wäre gut, aber halt leider auch nicht perfekt.

Abkürzungen endlich?
Da wäre auch das Problem mit dem Firmennamen. Zum Beispiel eine Firma mit dem Namen my.company oder my . company.
Wirkliche Freitextfelder gibt es ja nur 2 Stück. Name und Firma.
 

Michael...

Top Contributor
Wenn nur einen eingeschränkte Anzahl an Trennzeichen zulässig ist, könnte man ja überprüfen wieviele Punkte oder Minus oder... vorhanden sind und hätte so das Trennzeichen. Dann könnte man anhand der Anzahl der Segmente schon einmal überprüfen ob der Name generell in das gesuchte Schema passt.
In dieser Vorauswahl müsste man dann noch ein "bisschen" rum suchen.
Auf die Idee mit dem " . " bzw. " - " kam ich auch schon. Hab das aber erst einmal verworfen, da ich dem Benutzer ungerne vorschreiben möchte wie er seine Dateien nennen soll.
Nicht ohne Grund werden für diverse Zwecke Namenskonventionen entwickelt, an die sich die Nutzer halten sollten.
 

Andi_CH

Top Contributor
Du musst zwingend mehr Kriterien haben, sonst findest du die Felder nie - ich sage das so bestimmt weil ich mich recht lange mit Nachrichtentheorie beschäftigt habe ;-)

Der Name und der Firmenname ist das Problem. Die anderen weniger, da es Schlüsselworte sind, die allerdings eindeutig zu einer Liste gehören müssen (es dürfen aber keine gleichen Worte in unterschiedlichen Listen vorkommen.)

Wenn du gar nichts vorschreibst, wird es ein Chaos geben - die einen Trennen mit - die anderen mit . die dritten mit " " und die vierten machen CamelCase und die Fünften mischen

"DrMaxMustermannFirmaMustermann2011RechnungBezahltHaushalt.doc"
"Dr. MaxMustermann . Firma Mustermann . 2011 . Rechnung . Bezahlt . Haushalt.doc"
"Dr. MaxMustermann - Firma Mustermann-2011 - Rechnung . Bezahlt.Haushalt.doc"

Das doofe ist, dass man als Bio-Computer das immer noch erkennt, aber kaum alogrithmisch beschreiben kann.
 

w00t

Aktives Mitglied
Wenn nur einen eingeschränkte Anzahl an Trennzeichen zulässig ist, könnte man ja überprüfen wieviele Punkte oder Minus oder... vorhanden sind und hätte so das Trennzeichen. Dann könnte man anhand der Anzahl der Segmente schon einmal überprüfen ob der Name generell in das gesuchte Schema passt.
In dieser Vorauswahl müsste man dann noch ein "bisschen" rum suchen.
Folgendes Beispiel:
Dr. Max Mustermann - Musterfirma - 2011
Anzahl . = 1
Anzahl - = 2
Trennzeichen = -
Soll ich das so verstehen?
Und dann wird getrennt und alles ist gut.

Wenn ich das so richtig verstanden habe, wie ist das mit:

Dr. Max Mustermann - Muster-firma - 2011
Dann würde er
Name: Dr. Max Mustermann
Firma: Muster
Jahr: 2011
und "firma" wird dann verworfen.

Oder habe ich das von Dir falsch verstanden?



[...]
Wenn du gar nichts vorschreibst, wird es ein Chaos geben - die einen Trennen mit - die anderen mit . die dritten mit " " und die vierten machen CamelCase und die Fünften mischen

"DrMaxMustermannFirmaMustermann2011RechnungBezahltHaushalt.doc"
"Dr. MaxMustermann . Firma Mustermann . 2011 . Rechnung . Bezahlt . Haushalt.doc"
"Dr. MaxMustermann - Firma Mustermann-2011 - Rechnung . Bezahlt.Haushalt.doc"
[...]
Du würdest also sagen das der Benutzer nur ein Trennzeichen angibt und der Rest dynamisch ist?

Das in einem Dateinamen nur EIN Trennzeichen sein kann, das wird schon einmal festgelegt. Also würde das dritte Beispiel bei dir gar nicht funktionieren.

Bei dem 2. Könnte es mit " . " als Trenner klappen und bei dem ersten geht schon einmal gar nichts *g*
Es ist klar das man nicht alles dynamisch haben kann, und CamelCase fällt eh weg. Aber es gibt ja schon Probleme wenn man " - " oder " . " hat, wegen dem Firmennamen. Und was ist wenn es keinen Firmennamen gibt sondern nur das Jahr? Oder wenn der Firmenname eine vierstellige Zahl ist. Verzwickt verzwickt....


---------------
Das Problem ist ja auch, dass das alles in eine recht übersichtliche GUI passen muss.
Aktuell ist dort halt einfach nur ein TextArea wo der Benutzer Zeilenweise Schemen festlegen kann, die dann intern in eine Regex-Liste umgewandelt wird. Aber dann muss man ja auch darauf achten das die Reihenfolge stimmt, nicht das 2011 als Firma erwartet wird, und es keine Jahreszahl gibt.
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Grundsätzlich ja.
Aber wenn garnichts vorgeschrieben wird, kannst Du nie ausschließen, dass die Suche zu wenig oder zu viele Ergebnisse liefert. Wenn Trennzeichen innerhalb von Namen vorkommen können wird es immer problematisch.
 

w00t

Aktives Mitglied
Grundsätzlich ja.
Aber wenn garnichts vorgeschrieben wird, kannst Du nie ausschließen, dass die Suche zu wenig oder zu viele Ergebnisse liefert. Wenn Trennzeichen innerhalb von Namen vorkommen können wird es immer problematisch.

Ja, da stimmt wohl. Hab mir da schon Stundenlang Gedanken drüber gemacht wie es so dynamisch sein kann und trotzdem nicht viele Fehlfunde gibt. Schließlich soll der Benutzer irgendwann auch eigene Felder definieren können, aber das habe ich jetzt erst einmal ignoriert.
Eigene Felder:
Max Mustermann - Rechnung - 2500.doc
Wobei der Benutzer Festlegt das 2500 z.B. der Wert der Rechnung ist. Oder vielleicht so was wie "Office" und "Home", womit der Benutzer seine Dateien unterteilen möchte ob diese Privat fürs Büro sind oder für zu Hause (z.B. als selbstständiger hat man ja solche Fälle)
 

Michael...

Top Contributor
Oder wenn der Firmenname eine vierstellige Zahl ist. Verzwickt verzwickt....
Kenne jetzt nicht soviele Firmen mit einer vierstelligen Zahl als Firmenname - kenne ich überhaupt welche? Man könnte das Suchkriterium z.B. auf Zahlen von 1900 bis 2099 einschränken. Zahlen davor oder danach sind vermutlich nicht relevant? Und wenn sich eine Firma nach einer Jahreszahl benennt... merkwürdig.
 

w00t

Aktives Mitglied
Kenne jetzt nicht soviele Firmen mit einer vierstelligen Zahl als Firmenname - kenne ich überhaupt welche? Man könnte das Suchkriterium z.B. auf Zahlen von 1900 bis 2099 einschränken. Zahlen davor oder danach sind vermutlich nicht relevant? Und wenn sich eine Firma nach einer Jahreszahl benennt... merkwürdig.

Wären mir persöhnlich jetzt auch keine bekannt, aber man weiß ja nie. Aber gehen wir mal davon aus es wäre nicht so und so etwas gibt es nicht, wäre das nur eine Bedingung die wegfallen würde. Trotzdem hätte man noch das Problem mit den anderen (ich nenne sie mal Listenparameter). Werden die jeweils zwischen Trennern gesucht, oder legt der Benutzer dafür ein Schema an?
 

w00t

Aktives Mitglied
Hat noch irgendjemand eine Idee wie man das am logischsten Umsetzten kann, ohne für X parameter im schlimmsten Falle mehrere Listen durchgehen zu müssen?

Gehen wir davon aus ich mache das per Trenner, also " - ", dann müsste ich trotzdem für jedes Teil durch alle Listen gehen um zu schauen ob der Wert in der Liste steht.

Beispiel:
Max Mustermann - Musterfirma - 2011 - Gutschrift - bezahlt - Auto.doc

Das wären 6 Einträge. Da könnte man 2011 vielleicht noch ohne Probleme raus bekommen, aber selbst dann wären es noch 5. Das ist ja nicht gerade performant.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Dateinamen mit Zahl um eins erhöhen Allgemeine Java-Themen 16
lewbue Eclipse Eclipse Dateinamen in Hieroglyphen Allgemeine Java-Themen 4
B Stringmanipulationen beim Dateinamen Allgemeine Java-Themen 8
G Datei aus Ordner wählen, ohne den Dateinamen im Pfad angeben zu müssen Allgemeine Java-Themen 4
S Alle Dateinamen ermitteln Allgemeine Java-Themen 22
Elyt Compiler-Fehler Datei kann nicht erstellt werden. Die Syntax für den Dateinamen etc. ist falsch. Allgemeine Java-Themen 2
MiMa Illegal char im Dateinamen Allgemeine Java-Themen 14
MiMa Umlaute beim Einlesen von Dateinamen Allgemeine Java-Themen 12
R Besondere Zeichen in Dateinamen Allgemeine Java-Themen 4
I FTP Probleme mit Umlauten in Dateinamen Allgemeine Java-Themen 5
9 Dateinamen erfassen und vergleichen Allgemeine Java-Themen 6
M Charset Encoding für Dateinamen Allgemeine Java-Themen 4
J Dateinamen beim Start auslesen Allgemeine Java-Themen 10
S Problem mit / im Dateinamen Allgemeine Java-Themen 3
G Syntax für den Dateinamen Allgemeine Java-Themen 1
M Dateinamen ändern Allgemeine Java-Themen 3
T Konvertieren zu gültigen Dateinamen Allgemeine Java-Themen 10
G Linux Dateinamen Charset Probleme Allgemeine Java-Themen 8
C Dateinamen auslesen? Allgemeine Java-Themen 23
F Alle Files im Ordner nach Dateinamen durchsuchen Allgemeine Java-Themen 28
P Dateinamen mit regulärem Ausdruck testen Allgemeine Java-Themen 9
P Dateinamen testen? Schreibrechte auf Verzeichnis testen? Allgemeine Java-Themen 8
berserkerdq2 Jemand einen Tipp wie man ein Javafx-Hintergrund "dynamisch" macht Allgemeine Java-Themen 3
E RMI FWH: RMI- Wie erstelle ich stubs dynamisch, bzw. unterdrücke eine Statisch-Warnung? Allgemeine Java-Themen 0
S Maven Jars dynamisch laden / Plugin-Struktur erstellen Allgemeine Java-Themen 14
T Statisch und dynamisch Allgemeine Java-Themen 1
MiMa Variableninhalte dynamisch abfragen Allgemeine Java-Themen 12
D Methode dynamisch aufrufen Allgemeine Java-Themen 2
S Externe Eclipse Projekte dynamisch einbinden Allgemeine Java-Themen 3
Thallius Externe .jar dynamisch einbinden Allgemeine Java-Themen 5
C Erste Schritte Baumstruktur (dynamisch) Allgemeine Java-Themen 9
F JTree: Nodes dynamisch anlegen via LinkedHashMap Allgemeine Java-Themen 2
B Reflection, invoke dynamisch befüllen Allgemeine Java-Themen 3
M Klassen Klasse Dynamisch laden und Konstruktor aufrufen Allgemeine Java-Themen 1
J rxtxserial.dll für 32 oder 64bit dynamisch einbinden Allgemeine Java-Themen 9
F Dynamisch ein Objekt einer bestimmten Subklasse erstellen Allgemeine Java-Themen 7
T Classpath Klassen dynamisch erstellen Allgemeine Java-Themen 4
F Schlüsselworte Einstellungen dynamisch deserialisieren Allgemeine Java-Themen 5
S LaTeX Code in dynamisch erzeugten PDF's Allgemeine Java-Themen 8
X Dynamisch Konstruktor aufrufen Allgemeine Java-Themen 12
hdi Ressourcen dynamisch zur Laufzeit laden Allgemeine Java-Themen 15
A Klassen dynamisch aus jar-datei laden Allgemeine Java-Themen 5
J instanceof vermeiden und stattdessen dynamisch binden Allgemeine Java-Themen 6
M Konstruktoraufruf dynamisch auswerten und SQL bauen Allgemeine Java-Themen 10
E Variable dynamisch ausgeben Allgemeine Java-Themen 5
Tandibur pattern dynamisch vorkompilieren Allgemeine Java-Themen 9
T Objekt dynamisch neu erstellen/ austauschen Allgemeine Java-Themen 9
T Dynamisch getypte Klasseninstanz? Allgemeine Java-Themen 6
H getText(); bei dynamisch generierten JTextFiled Allgemeine Java-Themen 2
F Wie erfahre ich dynamisch den namen eines aktuellen Objektes Allgemeine Java-Themen 2
S Asymmetrisches Array dynamisch erzeugen Allgemeine Java-Themen 4
T Objekte dynamisch über eine Methode erzeugen Allgemeine Java-Themen 10
R Object Dynamisch erzeugen (Reflection API) Allgemeine Java-Themen 22
P RTF dynamisch machen (IText, Swing) Allgemeine Java-Themen 4
B Listener dynamisch setzen Allgemeine Java-Themen 6
P Klasse Dynamisch laden und zurückgeben Allgemeine Java-Themen 17
P Array Dynamisch vergrößern Allgemeine Java-Themen 7
B objekt einer klasse dynamisch erzeugen Allgemeine Java-Themen 6
G Objekt dynamisch erstellen und Inhalte kopieren Allgemeine Java-Themen 6
C Dynamisch Objekte unterschiedlicher Typen erzeugen Allgemeine Java-Themen 6
D Klassen dynamisch laden Allgemeine Java-Themen 5
E Arrays -> dynamisch Allgemeine Java-Themen 21
K Methoden dynamisch erstellen Allgemeine Java-Themen 12
P Dynamisch casten - möglich? wie? Allgemeine Java-Themen 5
T Klassen dynamisch ausführen Allgemeine Java-Themen 3
N Graphische Oberfläche dynamisch erweitern möglich? Allgemeine Java-Themen 4
B Absolute Paf einer Klasse in dieser dynamisch auslesen? Allgemeine Java-Themen 5
K Klasse dynamisch casten Allgemeine Java-Themen 14
Reeny Dynamisch Klassen kompilieren Allgemeine Java-Themen 5
G JDO Dynamisch ? Allgemeine Java-Themen 2
H Objekte m. versch. Interf. dynamisch erzeugen Allgemeine Java-Themen 11
E Klasse dynamisch über main-Methode aufrufen Allgemeine Java-Themen 9
D Strings dynamisch füllen Allgemeine Java-Themen 5
A Dynamisch Attribute hinzufügen Allgemeine Java-Themen 3
K Inhalte Parsen von Website Allgemeine Java-Themen 15
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
O JSON in Integer parsen Allgemeine Java-Themen 5
S Ini Text aus String parsen Allgemeine Java-Themen 1
OnDemand Datenbankdatei parsen Allgemeine Java-Themen 2
N svg(xml) parsen und manipulieren? Allgemeine Java-Themen 3
OnDemand CSV parsen mehrere Zeilen Allgemeine Java-Themen 22
2 mehrere Json Werte Parsen Allgemeine Java-Themen 3
G JSON parsen Allgemeine Java-Themen 3
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
looparda Datei parsen Allgemeine Java-Themen 1
T Jsoup: Mehrere Links nacheinander parsen Allgemeine Java-Themen 11
C Benutzereingabe von EXCEL-Funktionen parsen Allgemeine Java-Themen 4
B Such-String parsen mit Klammern Allgemeine Java-Themen 2
L Windows CMD werte Parsen. Allgemeine Java-Themen 2
B XML parsen Allgemeine Java-Themen 13
H Bestimmten Wert aus String parsen Allgemeine Java-Themen 7
0 Parsen Allgemeine Java-Themen 7
W Best Practice Dateien parsen Allgemeine Java-Themen 3
X Tags "parsen" Allgemeine Java-Themen 8
A Parsen mit java_cup - Shift/Reduce Problem Allgemeine Java-Themen 12
C Roboter, Befehle parsen Allgemeine Java-Themen 12
M Informationen aus komplexen String parsen Allgemeine Java-Themen 13
F JavaMail - Lokale eMail-Datei einlesen und parsen? Allgemeine Java-Themen 9
T String in Date parsen (*ohne* bekanntes Format) Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben