Newsgroup: it.comp.lang.perl
Titolo: estrapolare dati da tabella html

Salve,
      vorrei sapere se con una RE si puň estrapolare dei dati da delle righe 
di codice html. In questo caso riporto come possono presentarsi le righe 
nella pagina..su un rigo solo oppure in
un blocco:
<html>
<body>
<center>
<table>
<tr>
<td>
<pre><a href="...path...">perl</a><b>1984</b><font 
color="#00AA00">0,00</font>00:00:00 1,0000 1.0 2,0000 2.0 9.9
</td>
</tr>
<tr><td><pre><a href="...path...">php</a><b>2000</b> <font>wow2000</font> 
17:39:59 13.500,0000             0.0 13.445,0000      0.0 16.236 </td></tr>
...etc...
</table>
</center>
</body>
</html>
prendendo in esama queste riga di TR(html) mi piacerebbe estrapolare:
la parola perl, il valore 1984 (text) tra il tag B(html), il valore 0,00 tra 
il tag FONT(html)gli altri valori che sono separati da spazio (uno o piů 
spazi...o magari sono tabs č uguale)
credete che sia possibile o devo rivolgermi a qualche modulo cpan?
Grazie 

Ho provato questo codice mami da use of uninitialized $_ value nel mezzo 
della foreach:
#!/usr/bin/perl -w
use strict;
use warnings;
open my $fh1, "<", "table.htm" or die "$!\n";
my @righe = <$fh1>;
close $fh1;
foreach my $riga (@righe)
{
    $riga = 
m/\<tr.+?\<a.+?\>(.+?)\<\/a.+?b\>(.+?)\<\/b.+?font\>(.+?)\<\/f.+?\<\/tr\>/im;
}

cmq ecco il file modello da cui dovrei estrapolare i valori dalle righe 
html: 
http://theartofweb.net/quotes/table.htm
in pratica per ogni riga vorrei creare un hash strutturato cosě:
$quote{riga1}{Titolo} = ""
$quote{riga1}{Prezzo} = ""
$quote{riga1}{Var} = ""
$quote{riga1}{Ora} = ""
$quote{riga1}{Denaro} = ""
$quote{riga1}{QtaDenaro} = ""
$quote{riga1}{Lettera} = ""
$quote{riga1}{QtaLettera} = ""
$quote{riga1}{ncontr} = ""
...etc...


Questo HTML č veramente orribile! Fano tabelle senza usare td. E in effeto, nel 
mio Firefox, la tabella non e
Io lo farrebbe con un parser HTML e XPath. Conosco bene HTML::TreeBuilder::XPath 
;--) quindi:
#!/usr/bin/perl
use strict;
use warnings;
use YAML::XS; # oppure YAML, o YAML::Syck, o Data::Dumper...
use HTML::TreeBuilder::XPath;
my $tree= HTML::TreeBuilder::XPath->new;
#$tree->parse_file( "mypage.html");
$tree->parse_file( "extract_table.html");
my $results=[];
my @pre= $tree->findnodes( '//tr/td/pre');
foreach my $pre (@pre)
   { push @$results, { a => $pre->findvalue( './a[1]'),
                       b => $pre->findvalue( './b[1]'),
                       f => $pre->findvalue( './font[1]'),
                       # forze dovrai fare un grep per rimovere il primo
                       # elemento vuoto
                       v => [ split /\s+/, $pre->{_content}->[-1] ],
                     };
   }
print Dump $results;
-- 
mirod

 ha scritto nel messaggio 
news:49b78b04$0$702$5fc...@news.tiscali.it...


 ha scritto nel messaggio 
news:49b79a02$0$844$4faf...@reader5.news.tin.it...


ok diciamo che ho risolto cosě...tutttavia non riesco a trovare un modo per 
estrapolare i numeri finali divisa da uno o piů spazi:
#!/usr/bin/perl -w
use strict;
use warnings;
my @html = <DATA>;
foreach (@html)
{
    if ( m/<tr[^>]*><td[^>]*>(.*?)<\/td><\/tr>/i )
    {
        if ( m/<a[^>]*>(.*?)<\/a>/) { print $1 }
        if ( m/<b[^>]*>(.*?)<\/b>/) { print $1 }
        if ( m/<font[^>]*>(.*?)<\/font>/) { print $1 }
    }
}
__DATA__
<html>
<body>
<table border="1">
<tr bgcolor="#fff"><td>tuccio</td></tr>
<tr><td>marameo</td></tr>
<tr><td><pre><a href="">mibtel</a>    <b>11.047,0000</b>  <font 
color="#AA0000">  -1,15</font>   10:01:57 13.350,0000        8 13.360,0000 
9    0.0 </td></tr>
</table>
</body>
</html>