Front page | perl.modules |
Postings from May 2008
[RFC] Pretty::Table
From:
Shan Leiguang
Date:
May 6, 2008 05:58
Subject:
[RFC] Pretty::Table
Hello all
I've written a new module called Pretty::Table that I'm planning to
put on CPAN. Take a look at the documentation and tell me what you think.
NAME
Pretty::Table - to print pretty text table
--------------------------------------------------------------------------------
Example
use Pretty::Table;
my $pt = Pretty::Table->new(
data_type => 'row', #row mode
data_format => 'ucfirst', #upper char
if_multi_lines => 1, #enable multi-lines mode
max_col_length => 10, #set max_col_length to 10
);
my $dr = [
['id','name','sex','age','email'],
['01','tommy','male',27],
['02','jarry','male',26],
['03','shanleiguang',26,'shanleiguang@gmail.com'],
];
$pt->set_data_ref($dr);
$pt->set_title('Contacts');
$pt->set_align('left');
$pt->set_data_format('ucfirst');
$pt->insert(['05','jackie','male',27,'jakie@somedoain.com']);
$pt->insert(['04','marry','female',26], 4);
print $pt->output();
$pt->set_data_type('col');
$pt->set_deco_cross('*');
$pt->set_if_has_title(0);
print $pt->output();
--------------------------------------------------------------------------------
Example Output
+---------------------------------------------+
| Contacts |
+----+------------+--------+-----+------------+
| id | name | sex | age | email |
+----+------------+--------+-----+------------+
| 01 | tommy | male | 27 | |
+----+------------+--------+-----+------------+
| 02 | jarry | male | 26 | |
+----+------------+--------+-----+------------+
| 03 | shanleigua | male | 26 | shanleigua |
| | ng | | | ng@gmail.c |
| | | | | om |
+----+------------+--------+-----+------------+
| 04 | marry | female | 26 | |
+----+------------+--------+-----+------------+
*-------*-------*-------*------------*--------*
| id | 01 | 02 | 03 | 04 |
*-------*-------*-------*------------*--------*
| name | tommy | jarry | shanleigua | marry |
| | | | ng | |
*-------*-------*-------*------------*--------*
| sex | male | male | male | female |
*-------*-------*-------*------------*--------*
| age | 27 | 26 | 26 | 26 |
*-------*-------*-------*------------*--------*
| email | | | shanleigua | |
| | | | ng@gmail.c | |
| | | | om | |
*-------*-------*-------*------------*--------*
Methods
Pretty::Table->set_data_type(<'row'|'col'])
my $dr = [
['id','name','sex','age'], #be a 'row' or a 'col'
[...],
];
Pretty::Table->set_data_format(<'normal'|'uc'|'lc'|'ucfirst')
normal - default, not format
uc - upper character
lc - lower character
ucfirst - upper first character
Pretty::Table->set_data_ref(<$dr)
$dr is a 2D ArrayRef
my $dr = [
['id','name','sex','age'], #be a 'row' or a 'col'
[...],
];
Pretty::Table->set_if_has_title(<1|0)
if has table header title, default is 1
Pretty::Table->set_title(<$title)
default is __PACKAGE__ (Pretty::Table)
Pretty::Table->set_indent(<$indent)
default is 2
Pretty::Table->set_align(<'left'|'center'|'right')
default is 'left'
Pretty::Table->set_margin_left(<$margin_left)
default is 1, no need to change
=item C<Pretty::Table-E<gt>set_margin_right(<$margin_right>)
default is 1, no need to change
Pretty::Table->set_deco_horizontal(<$deco_h)
default is '|', no need to change
Pretty::Table->set_deco_vertical(<$deco_v)
default is '-', no need to change
Pretty::Table->set_deco_cross(<$deco_c)
default is '+', '*' is also pretty
Pretty::Table->set_empty_fill(<$empty_fill)
default is ' '(space), no need to change
Pretty::Table->set_if_multi_lines(<1|0)
default is 1, enable multi-lines mode
Pretty::Table->set_max_col_length(<$max_col_length)
default is 40, 'if_multi_lines' must enabled
--------------------------------------------------------------------------------
AUTHOR Shan LeiGuang shanleiguang@gmail.com
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Gmail : shanleiguang@gmail.com
MSN : shanleiguang@live.com
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
[RFC] Pretty::Table
by Shan Leiguang