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
,