Re: How to format CLI tabular data?
| From: | Jim Lucas | Date: | Tue, 09 Oct 2007 07:05:36 +0000 |
| Subject: | Re: How to format CLI tabular data? | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-262948@lists.php.net to get a copy of this message | ||
Daevid Vincent wrote:
I write many CLI scripts in PHP to clean up DB records, etc via crontab scripts. Often though, I implement command line switches to 'debug' or see various data as a precaution before actually purging. Perl has some neat tools built in to format tabular data: http://www.usenix.org/publications/perl/perl08.html Does PHP have any tools like this? I'd prefer not to pull in some PEAR package or other bloat, but I'll take what I can get if it actually works well. I was hoping there are some tips/tricks to show simple tabular data: i.e.: # foo.php --showgroups ==================================Try this out <plaintext><?php $data[] = array('one', 'two', 'three'); $data[] = array('oneoneone', 'two', 'three'); $data[] = array('oneone', 'two', 'threeone'); $data[] = array('one', 'onetwo', 'three'); $data[] = array('one', 'two', 'oneoneonethree'); $data[] = array('one', 'two', 'three'); function displayFixedWidth($data) {Groups==================================Name: Expires: Date:-------- ------------ -----------groupA 3 hours 2007-10-08 groupBeta 10 hours 2007-11-10 groupC 1 week 2007-12-31notice basic things like alignment, length of data (as in 'tabs' won't work), etc.
$seperation = 3; $seperator = '=';$columnWidths = array(); foreach($data AS $header=>$row) {
foreach($row AS $column => $value) {
$columnWidths[$column] = max(strlen($value), @$columnWidths[$column]);
}
}
$totalWidth = 0;
foreach($columnWidths AS $length) {
$totalWidth += ($length+$seperation);} echo str_pad('', ($totalWidth+count($columnWidths)), $seperator)."\n"; foreach($columnWidths AS $header => $length) {
echo ' '.str_pad($header, ($length+$seperation), ' ');} echo "\n".str_pad('', ($totalWidth+count($columnWidths)), $seperator)."\n"; foreach($data AS $header=>$row) {
foreach($row AS $column => $value) {
echo ' '.str_pad($value, ($columnWidths[$column]+$seperation));
}
echo "\n";
}
echo str_pad('', ($totalWidth+count($columnWidths)), $seperator)."\n";
}
displayFixedWidth($data);
--
Jim Lucas
"Perseverance is not a long race;
it is many short races one after the other"
Walter Elliot
"Some men are born to greatness, some achieve greatness,
and some have greatness thrust upon them."
Twelfth Night, Act II, Scene V
by William Shakespeare