HTML::TableExtract - передача выражения для заголовков

У меня есть подпрограмма, которая вызывается через другой скрипт для чтения файла HTML. Ниже приведен код.

sub read_html
{
    $data=`cat "$_[0]"`;
    use HTML::TableExtract;
    print "CALLING read_html to read $_[0]\n";
    #my $self = shift;
    print "$_[1]";
    $te = HTML::TableExtract->new( headers => [($_[1])] );
    $te->parse($data);
    my $line_cnt=0;
    # Examine all matching tables
    foreach $ts ($te->tables)
    {
        if ($ts->rows ne "")
        {
            foreach $row ($ts->rows)
            {
                foreach (@$row) { $_='' unless defined $_; }
                print @$row;
                if (@$row[0] ne ' '  and @$row[0] ne ''  and
                    @$row[0] ne "\n" and @$row[0] ne "\t")
                {
                    $line_cnt++;
                }
            }
        }
        return $line_cnt;
    }
}

Когда я запускаю приведенный выше скрипт, он не показывает мне данные таблицы HTML, когда заголовок передается как переменная.

$te = HTML::TableExtract->new( headers => [($_[1])] );

Однако, если я заменю выражение $_[1] с жестко закодированными значениями, как показано ниже, он возвращает все значения столбца под указанными заголовками

$te = HTML::TableExtract->new(
    headers => [("PO Number",
                 "Invoice Number",
                 "DC Number",
                 "Store Number",
                 "Invoice Amount",
                 "Discount",
                 "Amount Paid")] );

Я называю подпрограмму как read_html($file, $headers) где $file это имя файла и $headers содержит значения заголовка, разделенные запятой.

Любая помощь будет принята с благодарностью.

1 ответ

Я называю подпрограмму read_html($file, $headers), где $ file - это имя файла, а $ headers - в качестве значений заголовков, разделенных запятой.

Параметр заголовков HTML::TableExtract->new ожидает ссылку на массив строк, где каждая строка является отдельным заголовком. Похоже, вы вместо этого передаете ему ссылку на массив, содержащий одну строку, содержащую запятые.

my @headers = split m(\s*,\s*), $_[1];
$te = HTML::TableExtract->new( headers => \@headers );

Если это не правильно, то ваш вопрос должен быть более конкретным в отношении того, как вы звоните read_html,

Другие вопросы по тегам