【发布时间】:2009-11-16 09:43:42
【问题描述】:
假设两行文本除了标点符号外逐字对应。如何使它们垂直对齐?
例如:
$line1 = "其实我是英国人"; $line2 = "Je suis anglais , en fait";我希望输出是这样的:
我其实是英国人 Je suis anglais, 既成事实。根据我从之前发布在 SO 上的问题的答案和 Learning Perl 的“使用 printf 格式化输出”部分中学到的知识,我提出了以下代码。
use strict;
use warnings;
my $line1 = "I am English in fact";
my $line2 = "Je suis anglais , en fait.";
my @array1 = split " ", $line1;
my @array2= split " ", $line2;
printf "%-9s" x @array1, @array1;
print "\n";
printf "%-9s" x @array2, @array2;
print "\n";
不满意。输出是这样的:
我其实是英国人 Je suis anglais, 既成事实。有人可以给我一些提示和建议来解决这个问题吗?
谢谢:)
更新
@ysth 让我走上了正确的道路!再次感谢:) 因为我知道我自己的日期是什么样的,对于这个示例,我所要做的就是添加以下代码行:
for ( my $i = 0; $i < @Array1 && $i < @Array2; ++$i ) {
if ( $Array2[$i] =~ /,/ ) {
splice( @Array1, $i, 0, '');
}
}
Learning Perl 简要提到了 splice 函数可用于删除或添加数组中间的项目。现在谢谢,我再次扩大了我的 Perl 知识储备:)
【问题讨论】:
-
如果这是家庭作业,您应该将其添加为标签。
-
@voyager,没有冒犯,但是是什么让你认为这是作业?它看起来像家庭作业吗?我不确定。但是不,这绝对不是功课。
-
完全跑题了,但是这种翻译方法是一个坏主意。语言很少能一字不差地相互匹配。
-
@Telemachus,好吧,我承认翻译这不是一个好主意。但我也在使用修改过的 Lingua::Han::PinYin 模块,它可以自动检索汉字的拼音(发音)。我需要做一些垂直对齐。
-
@Mike:太棒了,我把你的例子也照搬了。
标签: perl text-alignment