Best Practise Parsen einer Datei mit Java

Zei7i

Grünschnabel
Hi leutz,

Ich möchte die Ausgabe eines anderen Programms parsen (Kommt per Stream rein), diese sieht auszugweise ungefähr so aus:




Code:
  generatingProcessIdentifier = 135;
  # U U-component of wind m s**-1 (grib1/2.0.2.table)  
  indicatorOfParameter = 33;
  #-READ ONLY- marsParam = 33.2;
  # Fixed height above ground height in meters  (2 octets)  (grib1/3.table)  
  indicatorOfTypeOfLevel = 105;
  level = 10;
  # Forecast product valid at reference time + P1  (P1>0)  (grib1/5.table)  
  timeRangeIndicator = 0;
  # Unknown code table entry ()  
  subCentre = 255;
  decimalScaleFactor = 0;
  dataDate = 20091126;
  
.....




Meine Frage wäre wie ich am besten vorgehen sollte, auch unter dem gewissen Aspekt der Zeiteffizienz. Soll ich es einfach per Stringoperationen parsen, oder soll ich extra einen Parsergenerator einsetzen?
Habt ihr vielleicht noch Tipps und Tricks?



Ich suche eine halbwegs elegante Lösung, einfaches Parsen per Hand kann recht schnell durcheinander und komplex werden.





MfG

Zei7i
 
Zuletzt bearbeitet:
numja, ich versuche mal mein Glück...

du sagst die Daten kommen per Stream. Aufgrund des Aufbaus würde ich das alles zeilenweise einlesen.
Jede Zeile kannst du dann einzeln splitten und verarbeiten.

mein Quelltext würde ca. so aussehen (nicht getestet und direkt hier reingetippert!):
Code:
private Map parseStream(Stream in){
  Map map = new HashMap();
  BufferedStream bis = new BufferedStream(Stream);
  String tmp;
  while( (tmp = bis.readLine()) != null){
    if(!tmp.startsWith("#")){ //Kommentare übergehen
      String[] split = tmp.split("=");
      if(split.length() == 2){  //evtl. noch andere prüfungen einbauen ;)
        map.put(split[0].trim(),split[1].trim()); //evtl. Typumwandlungen a.la Integer.parseInt() einbauen
      }
    }
  }
  return map;
}

ist bestimmt keine perfekte Lösung, aber auf die schnelle und ohne IDE...
Versuch´s mal..

Gruß, Neo
 
Hi,

Danke für Eure Antworten.

Das Manuelle Einlesen mit Stringoperationen ist die Standardlösung.

Das mit den Java-Properties ist ansich eine gute Idee, allerdings gibt es folgendes Problem:

Die Datei, die ich einlesen möchte, hat eine Größe von ca. 5-6 gb.
Daher wird das Einlesen in eine Hashmap, bzw. die Idee mit der Propertygeschichte schwierig.

Ich suche viel mehr eine Möglichkeit es relativ geschickt einzulesen, irgend ein Framework etc.


MfG

Zei7i
 
Hi,

Ich möchte die Daten zuerst in eine Objektstruktur überführen. Von dieser Datenstruktur aus sollen die Daten dann in verschiedene "Datenhaltungsformen" übermittelt werden. Also eine der möglichen Formen soll:

Die Objektstruktur wird in DO's (Datenobject) übersetzt und per Hibernate in einer Datenbank persistiert.


MfG

Zei7i
 

Neue Beiträge

Zurück