Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to format tabular data as text in Java?

I would like to produce nicely formatted tabular text from arbitrary dataset object models. Is there a good library to do this in Java?

Specifically, I want output that is formatted like command line data management tools such as the CLI for mysql. Example:

+---------+--------------+------+-----+---------+-------+
| 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    |       |
+---------+--------------+------+-----+---------+-------+

One main challenge is that I won't automatically know the maximum column widths before I start traversing the data. Also, there are plenty of edge cases, such as dealing with very large value lengths and large numbers of rows and columns.

If I have to build this myself, I imagine I would make use of String.format, and I'd need to pre-analyze the full dataset before starting the output. That's a very low level of coding though, so I'd love to find a good library that has already solved this problem.

like image 682
dirtyvagabond Avatar asked May 27 '09 03:05

dirtyvagabond


2 Answers

Check out TableFormatter: it appears to do what you want for formatting tabular data. Source code is also available. You can append rows and cells to a table using a fluent interface approach. An example follows:

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

So it will build up the cells in the correct format and adjust whitespace accordingly. It also will allow you to do basic alignment of text within the cell (center, top, bottom)

like image 74
Jon Avatar answered Nov 03 '22 08:11

Jon


trac.inamik.com/trac/jtable_format is under GPL license, not suitable in some cases.

Another option (Apache 2 license):

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

like image 33
Vitaliy Avatar answered Nov 03 '22 09:11

Vitaliy