我有一项作业,要求我打印出一些已排序的列表,并按'\ t'分隔字段。我已经完成了作业,但我似乎无法将所有字段与标签字符对齐。一些输出在下面,超过一定长度的名称会破坏字段。我怎么还能使用'\ t'并且只通过那么多空间来对齐所有东西?
open(DOB, ">dob.txt") || die "cannot open $!";
# Output name and DOB, sorted by month
foreach my $key (sort {$month{$a} <=> $month{$b}} keys %month)
{
my @fullName = split(/ /, $namelist{$key});
print DOB "$fullName[1], $fullName[0]\t$doblist{$key}\n";
}
close(DOB);
当前输出:
Santiago, Jose 1/5/58
Pinhead, Zippy 1/1/67
Neal, Jesse 2/3/36
Gutierrez, Paco 2/28/53
Sailor, Popeye 3/19/35
Corder, Norma 3/28/45
Kirstin, Lesley 4/22/62
Fardbarkle, Fred 4/12/23
答案 0 :(得分:2)
您需要知道有多少空格等同于一个标签。然后,您可以计算出每个条目覆盖的标签数量。
如果制表符占用4个空格,则以下代码有效:
$TAB_SPACE = 4;
$NUM_TABS = 4;
foreach my $key (sort {$month{$a} <=> $month{$b}} keys %month) {
my @fullName = split(/ /, $namelist{$key});
my $name = "$fullName[1], $fullName[0]";
# This rounds down, but that just means you need a partial tab
my $covered_tabs = int(length($name) / $TAB_SPACE);
print $name . ("\t" x ($NUM_TABS - $covered_tabs)) . $doblist{$key}\n";
}
你需要知道要填充多少个标签,但你可以用非常类似的方式来实现这一点。