将文件输出与“\ t”对齐

时间:2013-11-07 16:17:11

标签: perl

我有一项作业,要求我打印出一些已排序的列表,并按'\ 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

1 个答案:

答案 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";
}

你需要知道要填充多少个标签,但你可以用非常类似的方式来实现这一点。