Как использовать метод строк Perl TableExtract при наличии дублирующих полей заголовка

Я пытаюсь использовать TableExtract для анализа таблицы, в которой некоторые заголовки имеют одинаковые имена, но разные данные. Метод row возвращает значения для первых заголовков для обоих наборов заголовков.

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 

Первые данные "Расписание фактических ворот" (представляющие вылет) дублируются во вторых столбцах "Расписание фактических ворот" (представляющих прибытие).

Я могу видеть правильные данные, когда я выгружаю всю таблицу с помощью Dumper($table)

Как я могу получить метод строк, чтобы правильно проанализировать таблицы с дубликатами полей заголовка?

1 ответ

Решение

Я нашел ответ: необходимо добавить атрибут "slice_columns=> 0" в конструктор HTML::TableExtract.

Я не совсем уверен, почему это необходимо. Справка для TableExtract в CPAN гласит: "Столбцы, которые не находятся под одним из предоставленных заголовков, будут игнорироваться, если для slice_columns не установлено значение 0. По умолчанию столбцы будут переставлены в том же порядке, что и предоставленные вами заголовки (см. Параметр automap для получения дополнительной информации), если slice_columns не равна 0."

В моей таблице каждый столбец находится под предоставленным заголовком. Должно быть взаимодействие в случае, когда заголовки не являются уникальными, и установка slice_columns в 0 устраняет проблему.

my $te = HTML::TableExtract->new(
headers => \@headers,
slice_columns=> 0
);
Другие вопросы по тегам