10 sept 2012

Parseando archivos automáticamente para portar en aplicaciones

Buenas a todos, tanto la gente que desarrolla software, como los usuarios posteriores nos encontramos a menudo con la necesidad de cambiar de un formato a otro los archivos que generan unas herramientas para poder cargarlos en otras posteriormente. Por ejemplo, nuestra herramienta Anubis, permite exportar e importar información en formato XML, y puede ser interesante tras una auditoría exportar este archivo a otro formato, para cargar en otra herramienta un listado de máquinas recuperado con Anubis por una transferencia de zona o al revés, cargar un listado de máquinas en Anubis a través de un XML.

Para estos procesos de conversión hay gente que pica sus propios scripts y aplicaciones, pero en el mercado hay algunas herramientas gratuitas y muy potentes que nos pueden ser de mucha utilidad para ello.

Mi preferida es Kettle, de Pentaho: http://kettle.pentaho.com/

Se trata de un ETL, siglas de “Extract, Transform and Load”, citando a wikipedia: un ETL es el proceso que permite a las organizaciones mover datos desde múltiples fuentes, reformatearlos y limpiarlos, y cargarlos en otra base de datos, data mart, o data warehouse para analizar, o en otro sistema operacional para apoyar un proceso de negocio.

Hoy veremos cómo convertir una tabla con un listado de máquinas que tenemos en Excel a XML utilizando este ETL. Probablemente sea una de las conversiones más comunes que se realizan.

En primer lugar abriremos nuestro Excel y lo guardaremos en formato CSV (archivo de texto plano con las columnas separadas por el carácter “;”):

clip_image002

A continuación, tras descargarnos Kettle ejecutaremos el archivo Spoon.bat:

clip_image004

Después clicaremos en Transformaciones-> botón derecho-> Nuevo

clip_image006

Seleccionamos “Entrada fichero de texto” y lo arrastraremos a la ventana de la derecha:

clip_image008

clip_image010

Ahora hacemos lo mismo con “Salida XML”:

clip_image012

Ahora con shift, manteniéndolo pulsado, arrastramos una flecha desde “Entrada Fichero de texto” hasta “Salida XML”. De esta manera ya tendremos configurado el formato origen y destino de la conversión:

clip_image014

Pulsaremos doble clic en “Entrada Fichero de texto”:

clip_image016

Ahora le proporcionaremos un nombre, adjuntaremos el archivo CSV que hemos creado anteriormente y pulsaremos en añadir.

Ahora iremos a la pestaña Contenido:

clip_image018

En esta pantalla comprobaremos que el tipo de fichero sea CSV, que el separador de campos sea “;”, que es nuestro delimitador y que solo tengamos una línea de cabecera (si es así realmente como está en nuestra Excel claro).

Ahora iremos a la pestaña campos:

clip_image020

Pulsamos en “Traer Campos”:

clip_image022

Comprobaremos que todos los tipos de columna tienen el formato que tienen que tener, en nuestro caso, todas son String.

Pulsamos en “preview rows” para ver que todo está correcto y cerramos la ventana.

A continuación abriremos “Salida XML”:

clip_image024

Indicaremos en “Examinar” la ruta donde queremos guardar el XML con la salida.

Ahora iremos a la pestaña campos:

clip_image026

Pulsamos en Obtener Campos:

clip_image028

Pulsaremos en “Vale” y realizaremos la transformación pulsando en “Play”:

clip_image030

Finalmente pulsaremos sobre “Ejecutar” y realizará la conversión a XML.

¿Sencillo no? Ya tenemos nuestro fichero XML.

La herramienta como veis es muy potente y permite realizar muchas configuraciones, modificando los campos de salida por ejemplo, o añadiéndole nueva información durante la conversión o de distintas fuentes.

Un saludo!

2 comentarios:

  1. [...] La semana tuve el placer de arrancarla hablando de Kettle de Pentaho, con la que os enseñé a parsear archivos para poder portarlos entre herramientas de auditoría, cómo por ejemplo, Anubis: Parseando archivos automáticamente para portar en aplicaciones [...]

    ResponderEliminar
  2. buenas un archivo csv se puede transformar al archivo excel atrevas de la herramienta de pentaho? me podrían ayudar muchas gracias

    ResponderEliminar