Version 32 of tabulate

Updated 2017-09-16 14:35:52 by dbohdan

Tabulate is a command line utility that converts standard input into pretty-printed tables. It is also a Tcl module that does the same with lists of lists. It was inspired by https://github.com/joepvd/table . Tabulate works in Tcl 8.5+ and Jim Tcl.

It is currently developed as part of the Sqawk repository.

Download the latest version: curl https://raw.githubusercontent.com/dbohdan/sqawk/master/lib/tabulate.tcl > tabulate.tcl

Use example

Command line

command line options:

flagDescriptionExample
-FSField Separator-FS ,
$ ps | jimsh ./tabulate.tcl   
┌─────┬─────┬────────┬─────┐
│ PID │ TTY │  TIME  │ CMD │
├─────┼─────┼────────┼─────┤
│20583│pts/3│00:00:01│ zsh │
├─────┼─────┼────────┼─────┤
│23301│pts/3│00:00:00│  ne │
├─────┼─────┼────────┼─────┤
│28007│pts/3│00:00:00│  ps │
├─────┼─────┼────────┼─────┤
│28008│pts/3│00:00:00│jimsh│
└─────┴─────┴────────┴─────┘

tclsh

% source tabulate.tcl
% ::tabulate::tabulate -data {{Hello World} {11 101}}
┌─────┬─────┐
│Hello│World│
├─────┼─────┤
│ 11  │ 101 │
└─────┴─────┘

::tabulate::options

Tabulate's code includes a DSL for processing named arguments stored in args.

Use example

proc ::tabulate::tabulate args {
    options::process $args \
        store -data in data \
        store -style in style default $::tabulate::style::default \
        store -alignments or -align in align default {} \
        store -margins in margins default 0

    # ...
}

Discussion

JM 2015-08-03: I am probably doing something wrong:

 % info tclversion
 8.6
 % info patchlevel
 8.6.4
 % source tabulate.tcl
 % ::tabulate::tabulate -data {{Hello World!}}
 wrong # args: should be "dict exists dictionary key ?key ...?"

dbohdan 2015-08-03: I cannot reproduce that on my system by just following your transcript. Could you file an issue at https://github.com/dbohdan/sqawk/issues ?

JM 2015-08-03: never mind, I found the error on my side...there were spaces after the "\" line continuations, hence breaking the command. Somehow I got that from the copy-paste from the source.

 +------------------------------+
 ¦Thanks¦for¦sharing¦      ¦    ¦
 +------+---+-------+------+----¦
 ¦ This ¦ is¦   a   ¦second¦line¦
 +------------------------------+

APN 2015-11-20: Neat and useful. One small caveat - you have to remember to use -encoding utf-8 with the source command since the style::default variable embeds graphics as raw UTF-8 characters. For cases where you don't have control of the source command used to pull in the tabulate.tcl file (for example with critcl), below is the equivalent using escape sequences.

    variable default {
        top {
            left \U250C
            padding \U2500
            separator \U252C
            right \U2510
        }
        separator {
            left \U251C
            padding \U2500
            separator \U253C
            right \U2524
        }
        row {
            left \U2502
            padding { }
            separator \U2502
            right \U2502
        }
        bottom {
            left \U2514
            padding \U2500
            separator \U2534
            right \U2518
        }
    }

Code

See https://github.com/dbohdan/sqawk/blob/master/lib/tabulate.tcl .

See also