2011-08-30 184 views
2

我试图以表格格式打印输出。perl打印表格输出

我的脚本:

use strict; 
my @heading=("FN","SN","BP","SUBBN","LgcBT"); 
my @values=("1","0","Front","Mother Board","MIU"); 
print "\n\n"; 
&HEADING; 
print "\n"; 
&VALUES; 
print "\n\n"; 

sub HEADING { 
    foreach (@heading) { 
     my $lgth1=length($_); 
     printf "%3s","| "; 
     printf "%${lgth1}s",$_; 
    } 
} 

sub VALUES { 
    foreach (@values) { 
     my $lgth2=length($_); 
     printf "%3s","| "; 
     printf "%${lgth2}s",$_; 
    } 
} 

输出:

| FN | SN | BP | **SUBBN** | LgcBT 

| 1 | 0 | Front | **Mother Board** | MIU 

我需要打印输出的方式,如果值比则标题时间越长,自动调整航向至的价值的长度。

回答

0

做到这一点的方法是预先生成一个长数组:

my @lengths; 
for (0..$#lengths) { 
    $lengths[$_] = (length($headers[$_]) > length($values[$_])) ? length($headers[$_]) : length($values[$_]) 
} 

当然,有更好的方法来产生@lengths那些更Perl的十岁上下,但恕我直言,这个例子是最简单的读书。

+0

Hello Nathan,谢谢你的代码。由于我是网络人,你可以详细说明一下我怎样才能在我现有的脚本中使用提供的代码,这是在最初的帖子....抱歉的麻烦... – Mahesh

+0

@Mahesh:在你生成'@ lengths'数组,只需在'%3s'中使用'3'而不是'$ {lgth2}'和'$ {lgth1}'。 –

+1

哦,我的上帝纳坦...这真是太神奇了...非常感谢.....它工作...问候:Mahesh – Mahesh

4

有许多模块为“漂亮的打印”文字表格;我最喜欢的是Text::ASCIITable

+0

N.B.昆汀的建议使用你的后端 –

+0

这很好理解 - 听起来像Data :: Format是一个更灵活的解决方案。 – rjh