当存在重复的标题字段时,如何使用Perl TableExtract rows方法

时间:2013-06-28 22:54:58

标签: perl html-parsing html-tableextract

我正在尝试使用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方法正确解析具有重复标题字段的表?

1 个答案:

答案 0 :(得分:1)

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

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

在我的表格中,每个列 都在提供的标题下。在标题不唯一的情况下必须存在交互,并且将slice_columns设置为0可以避免此问题。

my $te = HTML::TableExtract->new(
headers => \@headers,
slice_columns=> 0
);