Groovy Arrays in Groovy

scorpionesc

Mitglied
Hallo zusammen,

ich habe wieder ein Groovy-Problem und brauche fachmännische Unterstützung. Die fachmännische Unterstützung habe ich hier schonmal bekommen, daher versuche ich es auf's Neue.

Mein Problem:

Ich habe in einer Datei (dir.log) einen Dateinamen, der bspw. so aussieht: 101320942_0003750004_20110530160314423_12201105270000652_3.jpg

Da jeder Bereich in diesem Dateinamen eine Bedeutung hat, muss ich diese splitten.

Ich brauche folgende Splittung:
- Die ersten beiden Bereiche aus dem Dateinamen (101320942, 0003750004)
- Den gesamten Dateinamen als String
- Den Dateinamen ohne Extension
- Die Extension

Diese Werte sollen in einem Template weiterverarbeitet werden.

Die ersten beiden Punkte kann ich bisher umsetzen (Splittung des Names mit "_" und den Dateinamen als String).

Probleme habe ich bei der zweiten Splittung. M. E. müsste ich hier eine zweite Splittung mit "." vornehmen oder?

Mein Code sieht so aus:

Java:
import groovy.text.*
import java.io.*

//Einlesen der Datei und Erzeugung "String"
new File('D:\\Skripte\\...\\dir.log').eachLine {
   string = it
}

//Splittung "_"
underlineArray = string.split("_")

//Splittung "."
dotArray = string.split(".")

//Hier wird mein Template gefüllt
def templateFile = new File(".\\mydata2.template")
def data = [
                'kunde' : dotArray[0],
                'nummer' : dotArray[1],
                'dateiname' : string,
                'datei' : dotArray[0],
                'extension' : dotArray[1],
                ]

def engine = new SimpleTemplateEngine()
def template = engine.createTemplate(templateFile)
def writable = template.make(data)

new File('D:\\Skripte\\...\\neu.xml') << writable

Meine FM lautet:

java.lang.ArrayIndexOutOfBoundsException: 0
at doit.run(doit.groovy:20)

Wisst ihr was ich falsch mache?

Ohne die zweite "Punkt-Splittung" funktioniert das Skript super. Mit leider nicht.

Vielen Dank für Eure Unterstützung.

Björn
 

scorpionesc

Mitglied
Marco, genau daran lag es.

Vielen Dank für den Tipp. Bin jetzt schon ein ganzes Stück weiter. Jetzt stehe ich vor einem neuen Problem, aber ich versuche es erstmal selbst.... ;(

Gruß Björn
 
B

bygones

Gast
Ohne von Groovy Ahnung zu haben: Wenn das "." auch als regular expression aufgefasst wird (wie in Pattern (Java Platform SE 6) ) dann steht der "." für WIldcard (jedes Zeichen) und müßte entweder als "\." oder sogar als "\\\." maskiert werden.
was in Java gültig ist, sit auch in Groovy gültig...

[groovy]
new File('D:\\Skripte\\...\\dir.log').eachLine {
string = it
}
[/groovy]
ist das n tippfehler ? hier weisst du immer die aktuelle Zeile string zu... du hast also immer eine Zeile ... ist das richtig ?
 

scorpionesc

Mitglied
was in Java gültig ist, sit auch in Groovy gültig...

[groovy]
new File('D:\\Skripte\\...\\dir.log').eachLine {
string = it
}
[/groovy]
ist das n tippfehler ? hier weisst du immer die aktuelle Zeile string zu... du hast also immer eine Zeile ... ist das richtig ?

@bygones: Genau das ist jetzt mein zweites Problem. Habe ich noch nicht gefixt bekommen. Ich habe in meiner Datei mehrere Dateinamen stehen. Also müsste ich das irgendwie in eine Schleife kriegen.

Hast du hier eine Idee?

Danke und Gruß Björn
 
B

bygones

Gast
du kannst doch direkt in der closure arbeiten:

[groovy]
new File('D:\\Skripte\\...\\dir.log').eachLine {
underlineArray = it.split("_")
// nun hier weiterarbeiten...
}
[/groovy]
 

Ähnliche Java Themen

Neue Themen


Oben