2013-05-24 1 views
1

У меня есть несколько страниц HTML, расположенных на сервере, и каждая страница имеет другой формат. Однако каждая страница содержит таблицу с некоторыми значениями заголовка и строки.Как получить значения ячейки таблицы HTML, соответствующие заголовку с использованием Perl

Теперь я хочу прочитать заголовок и связать его значения ячейки с ним. Я новичок в Perl и нелегко это сделать.

Вот пример HTML:

<Table Border=1 width="100%"> 
    <tr> 
    <td colspan=12 align="Center" nowrap ><B>Detailed Information for Check # 6392933</B></td> 
    </tr> 
    <tr> 
    <td><b>PO Number</b></td> 
    <td><b>Invoice Number</b></td> 
    <td><b>DC Number</b></td> 
    <td><b>Store Number</b></td> 
    <td><b>Division</b></td> 
    <td><b>Invoice Amount</b></td> 
    </tr> 
    <tr> 
    <td>0000000000</td> 
    <td>000000118608965</td> 
    <td>0</td> 
    <td>1860</td> 
    <td>1</td> 
    <td>$-21.02</td> 
    </tr> 
    <tr> 
    <td>0000000000</td> 
    <td>000000122865088</td> 
    <td>0</td> 
    <td>2286</td> 
    <td>1</td> 
    <td>$-42.04</td> 
    </tr> 
</Table> 

Теперь я хочу, чтобы создать структуру Perl, где все значения ячеек должны быть сохранены его значениями заголовка и должны напечатать что-нибудь, как показано ниже:

PO Number = 0000000000, 0000000000 
Invoice Number=000000118608965, 000000122865088 
DC number= 0, 0 and so on. 

Я пробовал искать и делать все из Интернета, но ничего не работает, я только что получил значение ячейки в переменной, но это не помогает, потому что он принимает все значения в значение ячейки.

#!/usr/bin/Perl -w 

$file = "/Path/to/file"; 
use Encode; 
$da = `cat "$file"`; 
my $data = decode_utf8($da); 

use HTML::Parser; 
use HTML::TableContentParser; 

$tcp = HTML::TableContentParser->new; 
$tables = $tcp->parse($data); 

for $t (@$tables) { 
    for $r (@{ $t->{rows} }) { 
     print "Row: "; 
     for $c (@{ $r->{cells} }) { 
      $col = $c->{data}; 
      print $col; 
     } 
     print "\n"; 
    } 
} 

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

+0

'использование данных :: Самосвал; print Dumper $ tables; 'перед тем, как цикл' for' должен обеспечить более глубокое понимание. –

ответ

1

HTML::TableExtract был создан для извлечения информации из таблиц HTML. Используйте его следующим образом:

#!/usr/bin/perl 
use warnings; 
use strict; 

use HTML::TableExtract; 

my $file = 'input.html'; 

my $te = 'HTML::TableExtract'->new; 
$te->parse_file($file); 
my $t = $te->first_table_found; 

my @columns; 
my $first = 1; 
for my $row ($t->rows) { 
    $first = 0, next if $first; 
    push @{ $columns[$_] }, $row->[$_] for 0 .. $#$row; 
} 

for my $column (@columns) { 
    print "$column->[0] = ", join(', ', @{ $column }[1 .. $#$column]), "\n"; 
} 

Выход:

PO Number = 0000000000, 0000000000 
Invoice Number = 000000118608965, 000000122865088 
DC Number = 0, 0 
Store Number = 1860, 2286 
Division = 1, 1 
Invoice Amount = $-21.02, $-42.04 
+0

спасибо, это очень помогает – Vicks

0

Я лично с помощью Split в этих случаях. Разделить массив (будет разделителем), а затем еще один раскол.