FixedLengthSlurper
In addition to Groovy’s XmlSlurper and JsonSlurper, Platform 6 provides a FixedLengthSlurper, which is created with the format specification of your file and returns a map of named properties with the parsed data.
The arguments to the FixedLengthSlurper’s constructor are the size of the field, the name to assign to the field, and an optional closure to format the object. Any number of these formatting parameters can be passed. If no formatting closure is provided, the data is just returned as a String.
import com.amalto.b2box.groovy.dsl.FixedLengthSlurper import java.text.SimpleDateFormat def dateTime = new SimpleDateFormat('yyyyMMddahhmm') def date = new SimpleDateFormat('yyyyMMdd') def parser = new FixedLengthSlurper( 13, 'dateTime', { dateTime.parse(it) }, 4, 'type', 8, 'processDate', { date.parse(it) }, 9, 'numberRecords', { new Integer(it) }, 11, 'amount', { String str -> new BigDecimal(str[0..str.size() - 3] + '.' + str[str.size() - 3, str.size() - 1]) }, 1, 'typeCode' ) List values = [] new File('./data/ppld.txt').eachLine { String line -> if (!line.startsWith('0000') && !line.startsWith('9999')) values << parser.parseText(line) }
In this example, the dateTime
, and processDate
properties are stored as Date objects, the numberRecords
an Integer, and the type
and typeCode
properties are Strings.
The amount
property gets a little extra parsing.
The file stores ‘10044’, but that needs to translate into ‘100.44’, so the closure will break apart the string into the integer and decimal values before creating the BigDecimal object.