我正在尝试以表格格式显示输出,但遇到了一些麻烦。
我有一些变量包含以空格分隔的字符串,例如:
$var1 = "1 1003 33 40 9948";
$var2 = "2";
我希望桌子看起来像这样:
我想显示表格,如下所示:
Column1 Column2
======= =======
1 2
1003
33
40
9948
我希望var1的内容为每个值包装。
我能够显示标题没问题。我一直在尝试使用perl的格式:
^|||||~~^|||||~~^|||||~~^|||||~~^|||||~~
$var1 $var2 $var3 $var4 $var4
.
......但效果不佳。
这个数字没有排列正确,我试图填充以便我强迫它们换行,但它们排列不均匀。该表的内容通过foreach循环显示:
Column1 Column2
======= =======
1 2
1003
33
40
9948
我希望我能清楚自己要做的事情!
答案 0 :(得分:0)
一般来说,我没有发现Perl的模式非常可靠。它们对于一些事情非常有用,但通常需要比看起来更多的工作。
之前的答案显示了更标准的右对齐(对数字有意义),但您似乎想要一个居中的对齐。但是,我不明白您使用^|||||
代替@|||||
的原因。如果需要,前者将尝试在多行上包装文本;那不是你想要的。您应该使用@|||||
代替。
此外,没有必要使用
^|||||~~^|||||~~^|||||~~^|||||~~^|||||~~
因为第一个~~
将允许模式无限重复。
那就是说,我认为通过自己生成文本而不是依赖Perl的格式,你可以更好地控制这个过程。
sub centerText {
my ($text, $width) = @_;
my $pad = ( length($text) < $width )
? ' ' x int(($width - length($text)) / 2)
: '';
return "$pad$text";
}
然后你只需使用:
printf "%-7s %-7s\n", 'Column1', 'Column2';
printf "%-7s %-7s\n", '=======', '=======';
printf "%-7s %-7s\n", centerText($val1[1], 7), centerText($val2[1], 7);
或某些。
那有道理吗?