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