1

我正在尝试使用 TableExtract 解析一个表,其中一些标题具有相同的名称,但数据不同。rows 方法返回两组标题的第一个标题的值。

my @headers = qw(Flight Rating Airline Sched Actual Gate Sched Actual Gate Status Equip Track);
my $te = HTML::TableExtract->new(
headers => \@headers);
$te->parse_file($myfile);
my ($table) = $te->tables;

我打印这样的数据:

for my $row ($te->rows ) {
 foreach (@$row) {
       $_ =~ s/\n//g;
       $_ =~ s/\r//g;
     }
print OUT join("\t", @$row),"\n";
}

结果是这样的:

AA 1251     American Airlines   9:30 PM 10:22 PM    T-CC37  9:30 PM 10:22 PM    T-CC37  Landed 68 min   M80 

应该是这样的:

AA 1251     American Airlines   9:30 PM 10:22 PM    T-CC37  11:00 PM    12:08 AM    T-C77   Landed 68 min   M80 

第一个“Schedule Actual Gate”数据(代表 Departure)在第二个“Schedule Actual Gate”列(代表 Arrival)中重复。

当我使用 Dumper($table) 转储整个表时,我可以看到正确的数据

如何让 rows 方法正确解析具有重复标题字段的表?

4

1 回答 1

1

我找到了答案:必须在 HTML::TableExtract 构造函数中添加“slice_columns=> 0”属性。

我不完全确定为什么这是必要的。CPAN 的 TableExtract 的帮助说“除非 slice_columns 设置为 0,否则不在提供的标题之一下方的列将被忽略。默认情况下,列将重新排列为与您提供的标题相同的顺序(请参阅 automap 参数了解更多信息)除非 slice_columns 为 0。”

在我的表格中,每一列在提供的标题下。在 header 不唯一的情况下必须有交互,将 slice_columns 设置为 0 可以避免该问题。

my $te = HTML::TableExtract->new(
headers => \@headers,
slice_columns=> 0
);
于 2013-07-02T18:38:52.687 回答