Thread aus HTML auslesen (24 answers)
Opened by rioc at 2008-04-11 15:24

rioc
 2008-04-21 13:12
#108624 #108624
User since
2008-04-11
15 Artikel
BenutzerIn
[default_avatar]
dass ich den "or die" befehl vergessen habe ist ein flüchtigkeitsfehler, mache ich in der Regel immer...

hab noch das mit dem "print" auf mehrere Zeilen verteilt versucht, jedoch funzt das bei mir so net... vielleicht weil es auf einer HP-UX kiste läuft?

den "Readline() on closed filehandle" bin ich so losgeworden, jedoch tauchen die "
Code: (dl )
Use of uninitialized value in split" und "Use of uninitialized value in concatenation (.) or string
" immernoch auf...

Hier mal die Initialisation des Scripts:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/opt/perl5/bin/perl -w
# die $path -variable repraesentiert den Pfad zu den collect-files

$htmlbasepath="/";
$htmlpath=$htmlbasepath . "cfg2html/server/";

#$basepath="/web/html/";
$basepath="/home/rioc/Desktop/perl_test/";
$path=$basepath . "cfg2html/server/";


opendir(DIRHANDLE, $path) or die "Directory not available";

while ( defined ($filename = readdir(DIRHANDLE)))
{
        @list=(@list,$filename);
}
@list=sort (@list);
@machinelist = grep {/.html/} @list;

@allmachines=();

foreach $machine (@machinelist)
{
$machine =~ s///;
@allmachines=(@allmachines,$machine);
}



@domains=();

foreach $machine (@allmachines)
{
        $ok=0;
        @splitpieces = split /\./, $machine;
        if ($splitpieces[1])
        {
        $dmn=$splitpieces[1]
        }
        else
        {
        $dmn="unknown";
        $splitpieces[1]="unknown";
        }       
        foreach $try (@domains)
        {
                if ($try eq $dmn) {$ok=1};
        };
        if ($ok ne 1) {@domains=(@domains,$dmn)};
        $ok=0;

        $machine = join '.', @splitpieces;
};

@domains=sort(@domains);
@data=();
foreach $domain (@domains)
{
        @$domain=();
        foreach $machine (@allmachines)
        {
                @namepartsplit= split /\./, $machine;
                if ( $namepartsplit[1] eq $domain )
                {
                        @$domain=(@$domain,$machine);
                };
        };
@data=(@data,"start:$domain",@$domain,"end:$domain",);
};


und hier den Teil der die Infos aus dem HTML entnimmt:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
foreach $line (@data)
{
        if  ($line =~ /start:/)
        {
                @stst = (split /\:/, $line);
                print "<font size=+2>$stst[1]</font size>\n",
                print "<table cols=7 BORDER=1 cellpadding=1 cellspacing=1>\n",
                print "<tr>\n",
                print   "<td width=150 align=right><b>Hostname</b></td>\n",
                print   "<td width=120 align=right><b>IP-Adresse</b></td>\n",
                print   "<td width=150 align=right><b>Model</b></td>\n",
                print   "<td width=80 align=right><b>uptime (d)</b></td>\n",
                print   "<td width=60 align=right><b>OS</b></td>\n",
                print   "<td width=100 align=right><b>Last Update</b></td>\n",
                print   "<td width=50 align=right><b>SN</b></td>\n",
                print "</tr>";
        }
        elsif ($line =~ /end:/)
        {
                print "</table>\n";
                print "<br><br>\n";
        }
        else 
        {
                print "<tr>";
                $file=$path . $line;
                if (-f $file)
                {
                open(TEMP,$file)or die "Can't open $file: $!";
                }
                else
                {
                @myunkn= split /\./, $file,3;
                $myunknown=$myunkn[0] . "." . $myunkn[1];               
                open(TEMP,$myunknown) or die "Can't open $file: $!";
                $file=$myunknown;
                }
                
                @lines=<TEMP>;
                
                @Host=grep {/Host:/} @lines;
                @AHost=split (/ /,$Host[0]);
                $filepath=$htmlpath . $line;

                @Domain=grep {/DNS domain name:/} @lines;
                @ADomain=split (/    /,$Domain[0]);


                print "<td width=150 align=right><a href=$filepath>$AHost[1] . $ADomain</a></td>\n";

                @IP=grep {/IPAdress:/} @lines;
                print "<td width=150 align=right>";
                foreach $run (@IP)
                {
                        @AIP=split (/   /,$run);
                        print $AIP[1] . "<br>";
                }
                print "</td>\n";
                
                @Model=grep {/Model:/} @lines;
                @AModel=split (/        /,$Model[0]);
                print "<td width=150 align=right>$AModel[1]</td>\n";

[...]
... hier wären weitere greps im gleichen Stil verfasst ...
[...]           

                @SN=grep {/serialNumber/} @lines;
                @ASN=split (/=/,$SN[0]);
                print "<td width=150 align=right>$ASN[1]</td>\n";               
                
                print "</tr>";
        };


das problem ist: 2 der Gesuchten Infos werden gefunden (SerialNumber & Host, beispielsweise), jedoch kommt beim rest die "Use of uninitialized value in split" Meldung, obwohl der split-Parameter richtig ist...


freundliche Grüsse
rioc

View full thread aus HTML auslesen