2010-12-19 13 views
1

guten Abend liebe Community,ein Dokument mit HTML :: TABLEEXTRACT [Perl] Parsen nur einige Labels und Werte [Zeile für Zeile]

zu holen

vor allen Dingen - ich bin sehr, sehr glücklich, dass ich diese große gefunden haben Ort. Ich mag dieses Forum sehr, da es eine großartige und unterstützende Community hat! Ich lerne viele Leute hier! Jede Frage hat einige gute Rezensenten und jeder Thread ist ein wertvoller und lehrreicher Gegenstand.

Nun, ich farily bin neu in Perl - und ziemlich neu in diesem Board hier: i bin derzeit workin heraus ein wenig Parser: Ich habe eine Tabelle

click here to see the target url- with the very simple table (some rows only)

Diese Seite analysieren möchten, hat eine Tabelle: gut ein Tisch mit Vaules und Etiketten. Wir müssen etwas bereitstellen, das die betreffende Tabelle eindeutig identifiziert. Dies kann der Inhalt der Header oder der HTML-Attribute sein. In diesem Fall gibt es nur eine Tabelle im Dokument, also müssen wir das nicht einmal tun. Aber was wäre mit dem Konstruktor, ich würde die Klasse der Tabelle zur Verfügung stellen. Wir wollen die Spalten der Tabelle nicht. Die erste Spalte dieser Tabelle besteht aus Labels und die zweite Spalte besteht aus Werten. Um die Beschriftungen und Werte gleichzeitig zu erhalten, sollten wir die Tabelle Zeile für Zeile verarbeiten.

#!/usr/bin/perl 

use strict; use warnings; 
use HTML::TableExtract; 
use YAML; 

my $te = HTML::TableExtract->new(
    attribs => { class => 'bp_ergebnis_tab_info' }, 
); 

$te->parse_file('t.html'); 
# here the file with the captured site is stored 

foreach my $table ($te->tables) { 
    foreach my $row ($table->rows) { 
     print " ", join(',', @$row), "\n"; 
    } 
} 

die Ergebnisse sehen:

[email protected]:~/perl> perl parser_perl_nrw2.pl 
Use of uninitialized value $row in join or string at parser_perl_nrw2.pl line 17. 
    Schuldaten, 
    Schule hat Schulbetrieb 
    Schulnummer,143960 

    Amtliche Bezeichnung,�Franziskusschule Kath. Hauptschule Ahaus - Sekundarstufe I - 

    Strasse,Hof zum Ahaus 6 

    Plz und Ort,48683 Ahaus 

    Telefon,02561 4291990 

    Fax,02561 42919920 

    E-Mail-Adresse,[email protected] 


    Internet,http://www.franziskusschule.de 
    ,Schule in �ffentlicher Tr�gerschaft 

WELL möchte ich die Daten erhalten, die oben dargestellt sind - aber wenn man unten sehen - es gibt einige weitere Linien - Nun kann dies wie so getan werden, von Text und Code, ... rede so. (/ I wollen to'get dieser folgenden Zeilen loswerden !!!)

Use of uninitialized value $row in join or string at parser_perl_nrw2.pl 
line 17. 
,Schülergesamtzahl,648 
Use of uninitialized value $row in join or string at parser_perl_nrw2.pl 
line 17. 
,Ganztagsunterricht,Ja (erweiterter Ganztagsbetrieb) 
Sonstiges,Teilnahme am Projekt 'Betrieb und Schule (BUS)' 
Use of uninitialized value $row in join or string at parser_perl_nrw2.pl 
line 17. 
Unterrichtsangebote, 
Use of uninitialized value $row in join or string at parser_perl_nrw2.pl 
line 17. 
Schule erteilt Unterricht in Fremdsprache(n)..., 
,Englisch 

Frage: Wie kann ich der aufpoliert Daten loswerden! Alles ist nett - aber ich möchte die unsanitisierten Daten loswerden ... das ist sehr sehr hässlich - und da ich die Daten in einer Datenbank speichern möchte - brauche ich die unsanitisierten Daten nicht ...!

Wie immer: alle und alle Hilfe wird sehr geschätzt werden - vielen Dank im Voraus!

Grüße Null

+1

Wenn Sie dieses Forum wirklich sehr schätzen, wie wäre es, wenn Sie einige Antworten auf Ihre Fragen akzeptieren? – mob

+2

mobrule, wenn Sie das Verhalten der Neulinge ändern möchten, wie wäre es, Sie werfen ihnen einen Knochen und Link auf die entsprechende Dokumentation? Sie verstehen den Jargon - wie [accept antwort] (http://stackoverflow.com/faq#howtoask) - noch nicht und sind von der Benutzeroberfläche überwältigt. – daxim

Antwort

1

Sie wollen von den nicht initialisierten Wert Warnungen loswerden?

Einige der Tabellenzellen sind leer, daher sollten Sie sie testen oder herausfiltern. Wie dies zum Beispiel:

foreach my $table ($te->tables) { 
     foreach my $row ($table->rows) { 
     my @values = grep {defined} @$row; 
     print " ", join(',', @values), "\n"; 
     } 
    } 

Sie könnten auch völlig deaktivieren Warnungen für diesen speziellen Block mit no warnings ' uninitialized', aber es ist in der Regel keine gute Praxis.

+0

hallo jira - vielen vielen dank für die antwort. GROSS !! Ich werde alle deine Ratschläge ausprobieren! WIEDER Thx! Dies ist ein sehr, sehr guter Ort zu sein !! Ich wünsche ihnen einen wunderbaren Tag! – zero

Verwandte Themen