Parsen großer Dateien mit Groovy

Beim Parsen großer Dateien muss man in jeder Programmiersprache auf den Hauptspeicher achten. So ist es auch bei Groovy. Es ist ein Leichtes mit der Methode eachLine und einem Closure durch eine Datei zu iterieren. Doch dafür wird die Datei komplett in den Hauptspeicher geladen. Das führt bei größeren Dateien je nach Hauptspeicherausbau des Rechners schnell zu einer Exception.

Besser ist es dann mit der Methode withReader zu arbeiten. Das nachfolgende Code Beispiel sucht in einer Logdatei nach einem bestimmten Bereich, der mit BEGIN_SECTION beginnt und mit END_SECTION endet. Erfolgreich getestet habe ich es mit 150 MB großen awstats Logs.

def file=new File("bigData.log")
def sectionData=[]

def startSection=false;
file.withReader{ r ->
   for (def line; (line = r.readLine()) != null; ) {
      if (line.startsWith("BEGIN_SECTION")) {
         startSection=true
         continue
      }
      if (line.startsWith("END_SECTION")) break

      if (startSection) {
         sectionData.add(line.trim().split())
      }
   }
}

Links:

stackoverflow.com Groovy: Reading a range of lines from file

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: