Thread Wie findet das Perlscript meinen Ordner!? (15 answers)
Opened by lin at 2010-09-27 20:31

lin
 2010-09-27 21:43
#141537 #141537
User since
2010-09-26
35 Artikel
BenutzerIn
[default_avatar]
Hi hlubenow, guten Abend!


vielen Dank für deine schnelle Antwort. Das ging sehr schenll! Du zeigst mir wichtige. Genau darum geht es mir! Freu mich sehr über deinen Tipp. Also ich muss nochmals drüber nachdenken.

Muss ich denn deinen Code - oder äquivalenzen davon in meinen code einbauen....

das
Code: (dl )
1
2
 use Cwd; 
print getcwd() . "\n";


oder das...:

Code: (dl )
1
2
use FindBin qw($Bin);
print $Bin . "\n";



Renee hat in einem Thread gestern folgendes gesagt: in dem folgenden Thread etwas gesagt: Ich soll das so bauen - so wie folgt:


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# strict und warnings sollten bei jedem Programm Pflicht sein
use strict;
use warnings;

# Bibliothek zum einfachen Finden von Dateien
# muss ggf. noch installiert werden
use File::Find::Rule;

# Bibliothek zum Parsen von HTML-Dateien
use HTML::TreeBuilder::LibXML;

# Verzeichnis in dem die HTML-Dateien gespeichert sind
my $html_dir = '/path/to/dir/with/html.files';

# hole alle .html-Dateien aus dem Verzeichnis
my @html_files = File::Find::Rule->file->name( '*.html' )->in( $html_dir );


hlubenow, ich glaube dass ich hier noch Bausteine in meinen Code einbauen müsste. Was meinst du denn. Es ist ja so. ich will einen Ordner in dem viele - in ihrer Struktur - sehr sehr gleiche HTML-Files drinne sind, parsen lassen. Diesen Ordner muss ich doch in seinem Pfad im Perl-Script erwähnen und "unterbringen" - Also den Pfad dazu angeben.

Das unten ist mein Code.... : In diesen Code muss doch noch rein wo der Ordner liegt... Das denke ich auf jeden Fall!! Sonst gehts doch nicht mit dem Parsen... Wie soll denn das Script die files finden!?



Code: (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
#!/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;
}


Also - mit der angabe des Ortes wo man die Files findet finde ich das
dieser untenstehende Codeschnippel auch etwas trnasparten macht:
Also - ich mein jetzt mal analog vielleicht zu dem Schnippel hier:

Quote

my $html_dir="C:\htmlperl";
my $output="C:\htmlperl\output.txt";
my $file = $ARGV[0];


Das ist ein Schnippel aus einem Thread bei dem ich mal etwas abgeschaut habe. Das war - zumindest was die Anlage des Scripts und den prinzipiellen Aufbau anbetrifft etwas hilfreich. Siehe hier:

siehe diesen Link hier - auf devshed

Ich selber arbeit ja auf Linux (OpenSuse 11.3)


bin wie gesagt noch am überlegen. Aber ich sollte mal etwas ausprobieren.

Freu mich wieder von dir / euch zu hoeren

lin








Habe gegoogelt und folgendes gefunden: Hier ist eine interessante Idee:


hier in Stackoverflow: die sprechen über das gleiche Thema: Und die verwenden dieselben Codeschnippel wie du hlubenow, Ich hab das verglichen.

I have Perl script and need to determine the full path and filename of the script during execution. I discovered that depending on how you call the script $0 varies and sometimes contains the fullpath+filename and sometimes just filename. Because the working directory can vary as well I can't think of a way to reliably get the fullpath+filename of the script.
Anyone got a solution?

$0 is typically the name of your program, so how about this?

Hlubenow: die verwenden dieselben Codeschnippel wie du hlubenow, das verglichen.

Code: (dl )
1
2
use Cwd 'abs_path';
print abs_path($0);


Seems to me that this should work as abs_path knows if you are using a relative or absolute path.

Code: (dl )
Use File::Spec; File::Spec->rel2abs( __FILE__ );


see here - follow the link: http://perldoc.perl.org/File/Spec/Unix.html

Ich sollte den Pfad rausfinden mit dem o.g. Codeschnippel
Last edited: 2010-09-27 23:45:12 +0200 (CEST)

View full thread Wie findet das Perlscript meinen Ordner!?