Hallo Topeg, guten Abend!
vielen Dank für deine schnelle Antwort. Das ist echt klasse, dass du so dranbleibst. Du hilfst mir hier sehr. Auch die Anderen. Das Board hier ist klasse. Man kann es nur weiterempfehlen. Anfänger kriegen hier viel viel mit.
2010-09-29T13:48:53
topeg Nicht dass ein Missverständniss aufkommt. Diese Zeile:
my $file = shift(@ARGV) or die "Usage: '$0 <filename>'\n"
macht folgendes:
Definiere eine Variable "$file", hole aus "@ARGV" das erste Argument. Wenn das Ergebnis dieser Aktion "Falsch" (in diesem Fall 'undef' oder '0') sein sollte so führe
die "Usage: '$0 <filename>'\n" aus. "die" Lässt das Programm mit einer Fehlermelung ("Usage: '$0 <filename>'\n") sterben. Der "Zauber" ist hier das "or". Das logische 'oder' verhält sich in perl so, dass der zweite Teil nur ausgeführt wird wenn der erste teil ein 'falsch' zurück gibt ist der Teil aber 'wahr', so ist bei einem logischen 'oder' egal ob der zweite Teil 'wahr' oder 'falsch' ist, die Gesammtaussage ist immer wahr. Ich hoffe das war jetzt nicht zu verwirrend.
Nein - das ist aufs Ganze gesehen schon einleuchtend. Kenn die digitale Logig noch etwas von Früher. Hatte mal damit was zu tun..
QuoteKeine Eindeutige Formulierung. Ich kann jetzt nicht genau sagen was du wissen willst.
Willst du wissen wie man eine Datei schreibend öffnet, oder wie man ein Datei allgemein öffnet, oder wie man eine Datei zum Dateinamen findet, oder wie man aus einer Pfadangabe eine absolute Pfadangabe macht, oder wie man eine Pfadangabe als solchen erkennt? Bitte spezefiziere dein Problem am besten mit einem Codebeispiel.
Ich denke ich will das Script (siehe unten) einfach mal auf dem Rechner mit OpenSuse 11.3 zum Laufen bringen, Dazu muss ich noch ein paar Pfad (u. Dateinamen) angeben, Also z.B. auch wo sich meine school.html (siehe den code) befindet und das Gleiche gilt für die Datei, die ich erzeugen möchte.
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
#!/usr/bin/perl
use strict;
use warnings;
use HTML::TokeParser;
my $file = 'school.html';
my $p = HTML::TokeParser->new($file) or die "Can't open: $!";
my %school;
while (my $tag = $p->get_tag('div', '/html')) {
# first move to the right div that contains the information
last if $tag->[0] eq '/html';
next unless exists $tag->[1]{'id'} and $tag->[1]{'id'} eq 'inhalt_large';
$p->get_tag('h1');
$school{'location'} = $p->get_text('/h1');
while (my $tag = $p->get_tag('div')) {
last if exists $tag->[1]{'id'} and $tag->[1]{'id'} eq 'fusszeile';
# get the school name from the heading
next unless exists $tag->[1]{'class'} and $tag->[1]{'class'} eq 'fm_linkeSpalte';
$p->get_tag('h2');
$school{'name'} = $p->get_text('/h2');
# verify format for school type
$tag = $p->get_tag('span');
unless (exists $tag->[1]{'class'} and $tag->[1]{'class'} eq 'schulart_text') {
warn "unexpected format: parsing stopped";
last;
}
$school{'type'} = $p->get_text('/span');
# verify format for address
$tag = $p->get_tag('p');
unless (exists $tag->[1]{'class'} and $tag->[1]{'class'} eq 'einzel_text') {
warn "unexpected format: parsing stopped";
last;
}
$school{'address'} = clean_address($p->get_text('/p'));
# find the description
$tag = $p->get_tag('p');
$school{'description'} = $p->get_text('/p');
}
}
print qq/$school{'name'}\n/;
print qq/$school{'location'}\n/;
print qq/$school{'type'}\n/;
foreach (@{$school{'address'}}) {
print "$_\n";
}
print qq/\nDescription: $school{'description'}\n/;
sub clean_address {
my $text = shift;
my @lines = split "\n", $text;
foreach (@lines) {
s/^\s+//;
s/\s+$//;
}
return \@lines;
}
Ich arbeite ja auf Linux (OpenSuse 11.3) bin wie gesagt noch am überlegen. Will das Script einfach nur mal zum Laufen bringen.
So dass es sich die HTML-Files aus dem Ordner holt - und parst - und dann die Resultate in eine (!) Datei reinschreibt. Das alles einfach hart oder festeverdrahtet ist das erste Ziel das ich momentan vor Augen habe.
Dann kann ich mich später um Finessen, Details u. a. m. kümmern.
Zualleresrst sollte das halt mal zum Rennen kommen... Wie würdest du das "festverdrahten - wenn sagen wir jetzt mal, alles in einem Ordner drinne ist... und sagen wir jetzt der Einfachheit halber - alles in
/usr/bin
drinne ist.
Freu mich wenn du mir hier auf die Sprünge hilfst.
lin ;-)