2011-08-30 236 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