Variableninhalte dynamisch abfragen

MiMa

Top Contributor
Hallo,
ich bräuchte mal einen Gedankenanstoss, wie man Inhalte einer Variablen dynamisch abfragen kann. Hier mal eine Beschreibung
Code:
inhalt enthält den zu untersuchenden String
Wenn der Inhalt LieferantenXX enthält dann (switch Anweisung)
     "Lieferant A" Dann rufe die Funktion Lieferanten mit Parameter A auf
     "Lieferant B" Dann rufe die Funktion Lieferanten mit Parameter B auf
     "Lieferant C" Dann rufe die Funktion Lieferanten mit Parameter C auf
     ...
     ...

Ich könnte das Problemlos mit einer Switch Anweisung lösen, möchte aber nicht immer den Quellcode bearbeiten, wenn weitere Lieferanten hinein kommen.

Ich hatte auch schon daran gedacht eine Lieferantenliste im Textformat zu speichern, die komma getrennt die Lieferanten enthalten. Diese könnte ich dann erweitern, ohne den Quellcode zu verändern. Da mir das aber als Steinzeit Zeitalter vorkommt, wollte ich mal nachfragen, wie man das elegant löst.
Danke
M.
 

Make-Grafik

Mitglied
Code:
Lieferanten mit Parameter A
Lieferanten mit Parameter B
Lieferanten mit Parameter C


Wichtiger ist zu wissen welcher Datentyp der Parameter deiner Lieferanten Methode besitzt. Ist diese ein String? Wenn ja kannst du die Stelle einfach parsen und das dann übergeben. Ansonsten kommst du an Kontrollstrukturen nicht drum herum. (Irgendwo musst du dann doch die Unterscheidung machen)

Ich vermute aber einfach mal dass du einen komplett ineffektiven Ansatz für dein Problem gewählt hast. Fragen sollten allgemein so gestellt werden, dass sie dir nicht bei der Umsetzung eines Lösungsweges helfen, sondern das finden einer Lösung zu dem Problem. Da fügst du dann dein Lösungsvorschlag hinzu sodass die Option besteht, dass weitere Lösungswege offen bleiben. Es sei denn es ist wirklich zwingend notwendig diesen Lösungsweg zu wählen. Nur mal als Randbemerkung.
 

mrBrown

Super-Moderator
Mitarbeiter
Was ist denn der Unterschied zwischen Parameter A, B und C und zwischen den Lieferanten A,B,C?

Vermutlich passen entweder Polymorphie oder Map
 

mrBrown

Super-Moderator
Mitarbeiter
Und was sind die Parameter?

inhalt ist ein von dir irgendwo eingegebener String mit dem Liferanten-Namen?
 

MiMa

Top Contributor
Ich nehme mal ein anderes Beispiel.
Es werden Dateiinhalte in eine String Variable gespeichert, die es zu untersuchen gilt.
Dabei versuche ich zu bestimmen, um welchen Dateiinhalt es geht.
Ein eBook enthält eine Markante Informationen, die zu einem elektronischen Printmedium gehören.
Eine Rechnung enthält wiederum andere Informationen, usw.

Der grobe Ablauf des Programmes ist wie folgt
Code:
Start
Array mit Liste allen Dateien aus einem Verzeichnis
Holt eine Datei aus der Liste
Prüft den Dokumentenuntertyp über das MIME Verfahren (pdf, epub, ...)
Bestimmung des Dokumenteninhaltes über die Klasse PDF(derzeit statisch)
     ebook, wenn Inhalt den String "ISBN"  enthält, dann
           wird die ISBN entnommen und auf Gültigkeit geprüft, weitere Verarbeitung als eBook
     Rechnung, wenn Inhalt die Strings "Rechnung" && "Betrag" enthalten, dann
          weitere Verarbeitung als Rechnung
     .....
          .....

Der Java Code sieht derzeit so aus.

Java:
...
...
// Dateiverarbeitung durch DateiUnterTyp
  switch (dateiObjekt.getDateiUnterTyp()) {
  case "pdf":
  System.out.println("Die Datei ist ein PDF");
  // Erstellen eines PDF Dateiobjektes mit den Startparametern
  PDF pdfDatei = new PDF(dQuelle, dZiel, dOcr, dBild,
  dOhneDokumentart, dLoeschen, dEinstellung);
  
  // Dateinhalt einlesen
  pdfDatei.setDateiInhalt(Datei.sucheDateiInhalt(dateiObjekt.getDatei()));
  
  // Prüfen des Inhaltes auf mögliche Dokumentinhalte
  PDF.erkennePdf(pdfDatei);
  ...
  ...

Java:
// Klasse PDF
public static void erkennePdf(PDF pdfDatei) throws IOException, TikaException, ParserConfigurationException, SAXException, SQLException, ParseException
  {
  // Prüft den Inhalt auf ein Buch
  Buch.pruefeAufBuch(pdfDatei);

  // Prüft den Inhalt auf Rechnung
  Rechnung.pruefeAufRechnung(pdfDatei);
  ...
  ...
  } // erkennePdf

Java:
// Klasse Buch
public static void pruefeAufBuch(PDF pdfDatei)
  throws ParseException, IOException, FileNotFoundException, TikaException
  {
  if (pdfDatei.getDateiInhalt().contains("ISBN")
  && pdfDatei.getDateiInhalt().contains("978"))
  {
  System.out.println("Es wurde ein deutsches eBuch erkannt");
  
  System.out.println("\nDie Textlänge hat " + pdfDatei.getDateiInhalt().length() + " Zeichen");
  // Prüft den Inhalt auf eine plausible ISBN und ermittelt alle Daten zum Buch
  // BuchInhalt.erkenneBuch(datei, textInhalt);
  // Metadaten von DNB abfragen
  // Metadaten in PDF einbetten
  // eBook umbenennen und verschieben
  // Metadaten und Pfade in MYSQL Datenbank schreiben
  } // prueft Buchinhalte
  } // pruefeAufBuch

Überlegt habe ich mir, die Dokumentartbestimmung in eine komma basierende Textdatei aus zu lagern. Dann ist mir noch eingefallen, das man es vielleicht in eine strukturierte XML Datei abspeichert. Da es sich um ein Programm ohne GUI handelt und auf einem Dateiserver laufen soll, werden Dateien ohne erfolgreiche Dokumentartbestimmung in einem gesonderten Verzeichniss auffangen. Diese Dateien sollen dann über eine Clientanwendung in eine Dokumentartbestimmung eingefügt werden.
 

mrBrown

Super-Moderator
Mitarbeiter
Chain of Responsibility ;)

Zumindest so in der Art. Jeweils pro Datei-Typ eine Klasse, die diesen erkennt, und dann für jeden Inhalt eine Klasse, die damit umgehen kann.


Klingt aber schon recht anders, als das Lieferanten-Beispiel ;)
 

MiMa

Top Contributor
Danke, werde mir das Design Pattern ansehen.
Wäre also die XML-Methode die bessere Wahl oder vielleicht auf eine mySQL Datenbank zugreifen. Da das Programm sowieso eine mySQL Datenbank für die Verwaltung der Datein verwendet, könnte man Programmeinstellungen und Dateidefinitionen auch darüber abwickeln?
 

mrBrown

Super-Moderator
Mitarbeiter
Was willst du da denn extern speichern?

Das Erkennen, was für eine Datei es ist, ist Programmlogik, die kann man schlecht auslagern (außer man nutzt irgendeine Schriftsprache dafür, würd ich aber nicht).
 

MiMa

Top Contributor
In der Datenbank wird der Dateipfad, und alle Metadaten des PDFs gespeichert. Bei Rechnungen werden andere Metadaten gespeichert. Die Clients sollen später Platformübergreifend die Dateimanager ersetzen. Es ist einfacher und schneller Dateien über eine Datenbank zu filtern als das ständige zugreifen durch das Dateisystem.

Das erkennen der Datei ist klar, aber das erkennen um welchen Inhalt es geht, kann ein Programm kaum alleine entscheiden, dafür benötigt man schon ein paar Anhaltspunkte, und die würde ich als Dokumentart bezeichnen. Dafür müssten ein paar Angaben für jede Dokumentart gespeichert werden, damit das Programm diese zuordnen kann, wie ein Buch eine ISBN Nummer besitzt.
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Das erkennen der Datei ist klar, aber das erkennen um welchen Inhalt es geht, kann ein Programm kaum alleine entscheiden, dafür benötigt man schon ein paar Anhaltspunkte, und die würde ich als Dokumentart bezeichnen. Dafür müssten ein paar Angaben für jede Dokumentart gespeichert werden, damit das Programm diese zuordnen kann, wie ein Buch eine ISBN Nummer besitzt.
Genau diese Angaben kann man kaum speichern, weil die viel zu Dokumentspezifisch werden dürften.
Selbst das Erkennen des Buches anhand von "ISBN" wird komplexer werden, als nur ein contains("ISBN"), damit würde auch dieser Thread hier als Buch erkannt werden. Und eben diese notwendige Logik kann man nicht in simplen Regeln fassen (oder landet dann wieder bei Scriptsprachen)
 

MiMa

Top Contributor
Ja natürlich, einfach nur nach ISBN schauen und du bist dann ein Buch ist nicht gerade die tollste Lösung. Ich habe schon viele Lösungen probiert welche mich aber nicht besonders befriedigt haben. Das war auch der Grund mal nach anderen Meinungen zu fragen.
Dezeit ist es so, wenn ich das Schlüsselwort ISBN im Dateiinhalt gefunden habe, werden alle ISBN Nummern herausgezogen und auch auf Echtheit geprüft. Die ISBN Nummern die übrig bleiben werden zur DNB Datenbank gesendet und die zurückgelieferten Metadaten werden mit dem Inhalt gegen geprüft. So erkenne ich dann das richtige Buch. Es kann ja auch vorkommen das man eine Datei hat die ein Magazin ist die mehre ISBN Nummern von Büchern enthält.
 

MiMa

Top Contributor
Ich habe noch ein bischen Recherchiert und man könnte ein paar Regeln für Dokumentarten defineren und dazu dass Framework Lucene benutzen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
W Dateinamen dynamisch Parsen Allgemeine Java-Themen 12
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
ReinerCoder Case statt if else Abfragen?! Allgemeine Java-Themen 8
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
VfL_Freak KeyEvent.VK_TAB im KeyListener abfragen Allgemeine Java-Themen 13
cool_brivk24 Variablen abfragen von Boolean von anderer Klasse Allgemeine Java-Themen 12
B Generelle Frage bei einer Webanwendung / Reduzierung von DB Abfragen Allgemeine Java-Themen 1
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
D TextBox Abfragen Allgemeine Java-Themen 2
kodela aktuelle Position des Hauptfensters abfragen Allgemeine Java-Themen 12
J Tonhöhe & Lautstärke abfragen? Allgemeine Java-Themen 3
K USB infos unter Linux abfragen? Allgemeine Java-Themen 2
P Threads Parallelisierte DB-Abfragen mit variabler Anzahl an Threads Allgemeine Java-Themen 4
A Erste Schritte If Abfragen + Scanner Allgemeine Java-Themen 7
Z AD Abfragen mit Java! Allgemeine Java-Themen 3
L Abfragen ob Threads fertig Allgemeine Java-Themen 3
chuxXo BasicPlayer - Beendigung Abfragen (Allgemein) Allgemeine Java-Themen 21
P Name der Parent Klasse abfragen Allgemeine Java-Themen 8
H In windowClosing() abfragen, ob STRG gedrückt wurde Allgemeine Java-Themen 8
M Aktuelle Systemzeit und Datum abfragen Allgemeine Java-Themen 2
M CapsLock abfragen wenn Fenster wieder aktiviert wird Allgemeine Java-Themen 5
P Variablen Werte der Objektvariablen mit getFields() abfragen Allgemeine Java-Themen 2
P Klassen Template-Klasse für Datenbank-Abfragen erstellen Allgemeine Java-Themen 2
J XML Inhalt von Web abfragen Allgemeine Java-Themen 6
D Von mehreren Objekten eine Eigenschaft abfragen Allgemeine Java-Themen 11
S HTTP Filmgenre aus dem Internet abfragen! Allgemeine Java-Themen 6
M Zahl aktiver Threads einer Gruppe verlässlich abfragen Allgemeine Java-Themen 3
R Was ist hier falsch? Abfragen Allgemeine Java-Themen 3
E Unique Ids abfragen? Allgemeine Java-Themen 5
Airwolf89 Wahrheitstabelle abfragen Allgemeine Java-Themen 3
M ständiges abfragen einer .txt Allgemeine Java-Themen 2
S Zeitserver Abfragen und in Date speichern Allgemeine Java-Themen 5
V Hostname abfragen gelingt nicht immer Allgemeine Java-Themen 2
H Windows abfragen Allgemeine Java-Themen 2
M Enter Taste in Konsole abfragen Allgemeine Java-Themen 2
N IP-Adresse Eingabe abfragen? Allgemeine Java-Themen 4
J Mit Scanner-Klasse eine Datei zeilenweise einlesen und nur bestimmte Zeichen abfragen Allgemeine Java-Themen 11
C Batchdatei ausführen und Ergebnisse abfragen Allgemeine Java-Themen 8
M Vermeiden von instanceof Abfragen Allgemeine Java-Themen 3
M SQL-Installation abfragen Allgemeine Java-Themen 14
Z Wetterdaten abfragen Allgemeine Java-Themen 5
J Zweiter Prozess der alle x Sekunden etwas abfragen soll Allgemeine Java-Themen 2
R Zugriffsrechte abfragen Allgemeine Java-Themen 2
R boolean im Bean abfragen Allgemeine Java-Themen 18
G Checkboxen abfragen,Auswahl sichern, JTable laden Allgemeine Java-Themen 2
G Mausbewegung abfragen? Allgemeine Java-Themen 2
C Binärbereich einer Variablen abfragen Allgemeine Java-Themen 8
S Datenbank Abfragen mit großen Datenmengen Allgemeine Java-Themen 22
H Mit Java Desktop abmessungen height/width abfragen Allgemeine Java-Themen 20
H Sekunden messen wie lange h.ibernate/jdbc abfragen brauchen Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben