Existen en Java muchos artÃculos sobre las últimas tecnologÃas y sobre complicadas librerÃas. A veces nos dejamos llevar por las tendencÃas y utilizamos frameworks o librerÃas que para proporcionarnos una pequeña funcionalidad tienen una utilización muy complicada y suceptible a errores.
Hoy quiero hablar sobre una sencilla libreria que considero muy útil: flatpack. Esta librerÃa permite extraer información de ficheros planos donde la información viene separada por delimitadores o por una longitud fija. Tiene capacidad para manejar ficheros CSV, EXCEL CSV, etc… En un fichero xml se proporciona de una manera sencilla y desacoplada del código el mapeo de datos.
EJEMPLO DE UTILIZACION
Nada mejor que un ejemplo para ver lo sencillo y facil que hace flatpack el parseo de fichero planos. Vamos a realizar el parseo de un fichero con estructura cabecera lineas muy común.
C0008382022092009053768Â IPSUMÂ Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â FRANCISCO JAVIER PEREZ PEREZ
AVDA. GASPAR
L000100040000010012     RON BARCELO ANEJO 0.70       .   +00002+0000024
L000200040001510012     CUTTY SARK 0.70              .   +00003+0000036
C0008382122092009053768 LOREM Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â FRANCISCO JAVIER PEREZ PEREZÂ Â
AVDA. GASPAR
L000100040003140006     GINEBRA MASTER'S 0,70        .   +00005+0000030
C0008382222092009053768 SIT AMED Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â FRANCISCO JAVIER PEREZ PEREZÂ Â
AVDA. GASPAR
L000100040006010006     JACK DANIEL'S   0,70L       .   +00002+0000012 Â
Este es el fichero que deseamos procesar para ello genermos el siguiente xml:
<PZMAP>
<RECORD id="cabecera" startPosition="1" endPosition="1" indicator="C">
<COLUMN name="cab" length="1" />
<COLUMN name="ident" length="8" />
 <COLUMN name="fecha" length="8" />
<COLUMN name="dataformat" length="6" />
<COLUMN name="nombre" length="35" />
<COLUMN name="nombreComercial" length="35" />
<COLUMN name="direccion" length="35" />
<COLUMN name="ciudad length="25" />
<COLUMN name="zipcode" length="5" />
<COLUMN name="comentario" length="60" />
<COLUMN name="supedido" length="10" />
<COLUMN name="fecha2" length="10" />
<COLUMN name="flag" length="1" />
<COLUMN name="identicket" length="13" />
</RECORD>
<COLUMN name="line" length="1" />
<COLUMN name="lineNumber" length="4" />
<COLUMN name="familia" length="4" />
<COLUMN name="articulo" length="6" />
<COLUMN name="formato" length="4" />
<COLUMN name="tipoDoc" length="2" />
<COLUMN name="param" length="4" />
<COLUMN name="desArticulo" length="35" />
<COLUMN name="sign" length="1" />
<COLUMN name="cantidad" length="5" />
</PZMAP>
Nota: Es importe que el fichero xml vengan indicados todos los campos que pueden venir en el fichero plano aunque después no los vayamos a procesar.
Ahora el código donde se ve los sencillo que es realmene parsear este fichero:
Parser pzparser = DefaultParserFactory.getInstance().newFixedLengthParser(fichero xml, fichero a procesar);
pzparser.setIgnoreParseWarnings(true);
pzparser.setIgnoreExtraColumns(true);
DataSet ds = pzparser.parse();
while(ds.next()){
try{
if (ds.isRecordID(“cabecera”)) {
ds.getString(“nombreComercial”);
…….
}
else {
String line = ds.getString(“line”);
if (StringUtils.isNotEmpty(line) && “L”.equals(line)){
ds.getString(“familia”);
………
}
}
INSTALACION
Se necesita los siguientes jars:
- flatpack-3.1.1.jar
- slf4j-api-1.5.8.jar
- slf4j-log4j12-1.5.8.jar
Y ya podemos procesar nuestro fichero plano. Este es un pequeño ejemplo de las posibidades que nos ofrece flatpack en una tarea todavÃa muy común hoy en dÃa…