perl打印表格输出
问题描述:
我试图以表格格式打印输出。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
我需要打印输出的方式,如果值比则标题时间越长,自动调整航向至的价值的长度。
答
做到这一点的方法是预先生成一个长数组:
my @lengths;
for (0..$#lengths) {
$lengths[$_] = (length($headers[$_]) > length($values[$_])) ? length($headers[$_]) : length($values[$_])
}
当然,有更好的方法来产生@lengths
那些更Perl的十岁上下,但恕我直言,这个例子是最简单的读书。
答
有许多模块为“漂亮的打印”文字表格;我最喜欢的是Text::ASCIITable。
+0
N.B.昆汀的建议使用你的后端 –
+0
这很好理解 - 听起来像Data :: Format是一个更灵活的解决方案。 – rjh
Hello Nathan,谢谢你的代码。由于我是网络人,你可以详细说明一下我怎样才能在我现有的脚本中使用提供的代码,这是在最初的帖子....抱歉的麻烦... – Mahesh
@Mahesh:在你生成'@ lengths'数组,只需在'%3s'中使用'3'而不是'$ {lgth2}'和'$ {lgth1}'。 –
哦,我的上帝纳坦...这真是太神奇了...非常感谢.....它工作...问候:Mahesh – Mahesh