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」データ (出発を表す) は、2 番目の「Schedule Actual Gate」列 (到着を表す) に複製されます。

Dumper($table) でテーブル全体をダンプすると、正しいデータが表示されます

ヘッダー フィールドが重複しているテーブルを適切に解析するように行メソッドを取得するにはどうすればよいですか?

4

1 に答える 1

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
);
于 2013-07-02T18:38:52.687 に答える