2009-05-27 11 views
6

Me gustaría producir texto tabulado muy formateado a partir de modelos de objetos de conjuntos de datos arbitrarios. ¿Hay una buena biblioteca para hacer esto en Java?¿Cómo formatear datos tabulares como texto en Java?

Específicamente, quiero una salida formateada como herramientas de administración de datos de línea de comandos, como la CLI para mysql. Ejemplo:

+---------+--------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+---------+--------------+------+-----+---------+-------+ 
| name | varchar(100) | YES |  | NULL |  | 
| release | year(4)  | YES |  | NULL |  | 
| studio | varchar(50) | YES |  | NULL |  | 
| review | varchar(50) | YES |  | NULL |  | 
| gross | int(11)  | YES |  | NULL |  | 
+---------+--------------+------+-----+---------+-------+ 

Un reto principal es que no voy a saber automáticamente las anchuras máximas de columna antes de empezar a atravesar los datos. Además, hay muchos casos extremos, como el manejo de longitudes de valor muy grandes y un gran número de filas y columnas.

Si tengo que construir esto por mi cuenta, me imagino que utilizaría String.format, y necesitaría analizar previamente el conjunto de datos completo antes de comenzar la salida. Sin embargo, ese es un nivel de codificación muy bajo, así que me encantaría encontrar una buena biblioteca que ya haya resuelto este problema.

Respuesta

7

Consulte TableFormatter: parece que hace lo que quiere para formatear datos tabulares. El código fuente también está disponible. Puede agregar filas y celdas a una tabla utilizando un enfoque de interfaz fluido. Un ejemplo es el siguiente:

TableFormatter tf = new SimpleTableFormatter(true) // true = show border 
     .nextRow() 
      .nextCell() 
       .addLine("Field") 
      .nextCell() 
       .addLine("Type") 

por lo que se acumulan las células en el formato correcto y ajustar los espacios en blanco en consecuencia. También le permitirá hacer una alineación básica de texto dentro de la celda (centro, parte superior, inferior)

+0

Gracias Jon, esto parece * exactamente * lo que estaba buscando! 8-] – dirtyvagabond

3

trac.inamik.com/trac/jtable_format está bajo licencia GPL, no es adecuado en algunos casos.

Otra opción (Apache 2 licencia):

http://sourceforge.net/projects/texttablefmt/

+1

Parece que la licencia de iNamik ha cambiado a licencias duales: MIT y GPL –

1

Para los interesados, I have forked TableFormatter (que es GPL licencia dual y el MIT) para que sea genéricos de usar y eliminar todas las advertencias de compilación.

Tenga en cuenta que utilizo Java 7 diamond operator por lo que para hacerlo compatible con Java 6 será necesario agregar los tipos en las declaraciones de listas.

Cuestiones relacionadas