Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]2934[/thread]

String zerlegen mit REGEXP



<< >> 9 Einträge, 1 Seite
Gast Gast
 2005-04-11 12:56
#29461 #29461
Hallo zusammen!

Ich habe folgendes Problem, ich möchte die aktuellen Informationen, die ich auf der Internetseite unserer Firma bereitstelle durchsuchen können.
Es handelt sich solch eine Datei für jeden Monat.

Die Zeile mit dem eigentlichen Text der später in eine Datenbank geschrieben werden soll, ist leider manchmal in der html-Datei über zwei Zeilen geschrieben.

            <LI><A STYLE="text-decoration: none" HREF="20030401.htm">Steuerliche Behandlung des Arbeitsentgelts aus
             geringf&uuml;gigen Besch&auml;ftigungen ab dem 1.4.2003</A></LI>

Wenn der Text auf einer Zeile steht ist es nicht das Problem ihn herraus zu ziehen.
Bei zwei Zeilen machts mir Probleme!

Ich versuche es wie folgt:
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
open (DAT, '<', $datei) || die "Kann die Datei $datei nicht laden!";
   my %inhalte;
   my $tmp_var;
   my $secln=0;
   foreach (<DAT>)
{
if ($secln==1)
{
print "$tmp_var $_$ \n";
}
   next unless (/STYLE/);
   if (/.*LI.*STYLE\=.*\"\>(.*)\<\/A.*/)
{
print "$1\n";
$secln=0;
}
   elsif (/.*LI.*STYLE\=.*\"\>(.*)/)
{
$tmp_var=$1;
$secln=1;
next;
}  
}


Ich hoffe mir kann jemand sagen was ich falsch mache!

Vielen Dank schonmal im Voraus

MfG René Albrecht
renee
 2005-04-11 13:04
#29462 #29462
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Benutze am besten CPAN:HTML::Parser. Damit kannst Du die Links ganz einfach raussuchen. Siehe
Wiki:Wiki-Artikel bzw. meine Homepage...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2005-04-11 16:16
#29463 #29463
hmm naja also der html:praser ist ja genial!!!!

aber leider zieht er auch nur die Links die über eine Zeile in der html-Datei gehen.

Hier mal ein Screenshot wie Sie im mc aussieht!
http://www.schneehase.com/rpt/links.gif

Es ist gut zusehen wie die Links über zwei Zeilen gehen.

MfG René Albrecht
pq
 2005-04-11 16:23
#29464 #29464
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
das ding heißt HTML::Parser, und dein fehler liegt in zeile 42.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
renee
 2005-04-11 16:24
#29465 #29465
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Also bei Funktionierts:
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#! /usr/bin/perl
use strict;
use warnings;
use HTML::Parser;

my @links;
my $string = qq~<!DOCTYPE HTML PUBLIC "-//SoftQuad//DTD HoTMetaL PRO 4.0::19971010::extensions to HTML 4.0//EN" "hmpro4.dtd">

<HTML>

<HEAD>
<TITLE>Mandanten-Information</TITLE>
<link rel="stylesheet" href="../../../css/rpt_2.css" type="text/css">
</HEAD>

<BODY TEXT="#000000" LINK="#0A0A0A" VLINK="#9D9D9D" ALINK="#C0C0C0" BGCOLOR="#FFFFFF">
<TABLE WIDTH="600" ALIGN="CENTER">
<TR>
<TD COLSPAN="5" WIDTH="600">

<H5></H5>
<HR></TD>
</TR>
<TR>
<TD ALIGN="CENTER" WIDTH="570" ROWSPAN="2" HEIGHT="75"><FONT FACE="Arial">Informationen aus dem Steuer-, Wirtschafts-, Arbeits- und
Sozialrecht</FONT> <BR>
<BR>
<FONT FACE="Arial">M&auml;rz 2004</FONT></TD>
<TD></TD>
</TR>
<TR>
<TD></TD>
</TR>
<TR>
<TD COLSPAN="5" ALIGN="CENTER" WIDTH="600"><HR></TD>
</TR>
</TABLE>
<TABLE WIDTH="600" ALIGN="CENTER">
<TR>
<TD ALIGN="CENTER" COLSPAN="4" HEIGHT="50"><FONT FACE="Arial" SIZE="-1">Nicht die Dinge selbst, sondern unsere Vorstellungen von den Dingen <BR>
machen uns gl&uuml;cklich oder ungl&uuml;cklich.</FONT><BR>
<FONT FACE="Arial" SIZE="-3">Epiktet; 50 &– 125, griechischer Philosoph</FONT></TD>
</TR>
<TR>
<TD HEIGHT="50" COLSPAN="4"><FONT FACE="Arial">Inhaltsverzeichnis</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT" COLSPAN="4">
<UL>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DW20040301.htm">Das Gesetz zur F&ouml;rderung der
Steuerehrlichkeit ist in Kraft getreten</A></FONT></LI>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DW20040302.htm">Anh&auml;ngiges Verfahren zur Abzugsf&auml;higkeit
von Kinderbetreuungskosten</A></FONT></LI>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DW20040303.htm">Freistellungsauftr&auml;ge anpassen</A></FONT></LI>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DW20040304.htm">Steuerliche Behandlung von verbilligten Mietverh&auml;ltnissen
(an Angeh&ouml;rige)</A></FONT></LI>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DW20040305.htm">Werbungskostenabzug f&uuml;r leer stehende
Wohnung</A></FONT></LI>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DW20040306.htm">&quot;Gewillk&uuml;rtes Betriebsverm&ouml;gen&quot;
auch bei Einnahmen-&Uuml;berschuss-Rechnung</A></FONT></LI>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DE20040301.htm">Neue gesetzliche Bestimmungen bei Werbung per
E-Mail geplant</A></FONT></LI>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DE20040302.htm">Abrechnung nach Wasser-Verbrauch</A></FONT></LI>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DE20040303.htm">Abrechnung bei Eigentumswechsel</A></FONT></LI>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DE20040304.htm">Beeintr&auml;chtigung durch Baumwurzel vom
Nachbargrundst&uuml;ck</A></FONT></LI>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DE20040305.htm">Auswirkung der &Uuml;berlassung eines
Kraftfahrzeugs an besch&auml;ftigten Ehegatten</A></FONT></LI>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DE20040306.htm">Teilzeitt&auml;tigkeit w&auml;hrend der
Elternzeit</A></FONT></LI>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DE20040307.htm">&Auml;nderungen beim Erziehungsgeld ab 1.1.2004
</A></FONT></LI>
</UL></TD>
</TR>
<TR>
<TD ALIGN="LEFT" COLSPAN="4" HEIGHT="50"><FONT FACE="Arial">Kurz notiert</FONT></TD>
</TR>
<TR>
<TD ALIGN="LEFT" COLSPAN="4">
<UL>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DE200403K1.htm">Regelung &uuml;ber die Bezugsfrist f&uuml;r das
Kurzarbeitergeld verl&auml;ngert</A></FONT></LI>
</UL></TD>
</TR>
<TR>
<TD HEIGHT="50" COLSPAN="4">

<P><FONT FACE="Arial">Steuertermine / Basiszinssatz / Verzugszinssatz / Verbraucherpreisindex</FONT></P></TD>
</TR>
<TR>
<TD COLSPAN="4">
<UL>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DW200403T1.htm">Steuertermine im Einzelnen</A></FONT></LI>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DW200403B1.htm">Zinss&auml;tze im Einzelnen</A></FONT></LI>
<LI><FONT FACE="Arial" SIZE="-1"><A STYLE="text-decoration: none" HREF="DW200403V1.htm">Verbraucherpreisindizes im Einzelnen</A></FONT></LI>
</UL></TD>
</TR>
</TABLE>
</BODY>
</HTML><a href="url1">linktext1</a> Ein anderer Text
<a href="url2">linktext2</a> text~;

my $p = HTML::Parser->new();
$p->handler(start => \&start_handler,"tagname,attr,self");
$p->parse($string);

foreach my $link(@links){
print "Linktext: ",$link->[1],"\tURL: ",$link->[0],"\n";
}

sub start_handler{
return if(shift ne 'a');
my ($class) = shift->{href};
my $self = shift;
my $text;
$self->handler(text => sub{$text = shift;},"dtext");
$self->handler(end => sub{push(@links,[$class,$text]) if(shift eq 'a')},"tagname");
}


Ausgabe:
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
~/entwicklung 2> perl parse_links.pl
Linktext: Das Gesetz zur Förderung der
Steuerehrlichkeit ist in Kraft getreten URL: DW20040301.htm
Linktext: Anhängiges Verfahren zur Abzugsfähigkeit
von Kinderbetreuungskosten URL: DW20040302.htm
Linktext: Freistellungsaufträge anpassen URL: DW20040303.htm
Linktext: Steuerliche Behandlung von verbilligten Mietverhältnissen
(an Angehörige) URL: DW20040304.htm
Linktext: Werbungskostenabzug für leer stehende
Wohnung URL: DW20040305.htm
Linktext: "Gewillkürtes Betriebsvermögen"
auch bei Einnahmen-Überschuss-Rechnung URL: DW20040306.htm
Linktext: Neue gesetzliche Bestimmungen bei Werbung per
E-Mail geplant URL: DE20040301.htm
Linktext: Abrechnung nach Wasser-Verbrauch URL: DE20040302.htm
Linktext: Abrechnung bei Eigentumswechsel URL: DE20040303.htm
Linktext: Beeinträchtigung durch Baumwurzel vom
Nachbargrundstück URL: DE20040304.htm
Linktext: Auswirkung der Überlassung eines
Kraftfahrzeugs an beschäftigten Ehegatten URL: DE20040305.htm
Linktext: Teilzeittätigkeit während der
Elternzeit URL: DE20040306.htm
Linktext: Änderungen beim Erziehungsgeld ab 1.1.2004
URL: DE20040307.htm
Linktext: Regelung über die Bezugsfrist für das
Kurzarbeitergeld verlängert URL: DE200403K1.htm
Linktext: Steuertermine im Einzelnen URL: DW200403T1.htm
Linktext: Zinssätze im Einzelnen URL: DW200403B1.htm
Linktext: Verbraucherpreisindizes im Einzelnen URL: DW200403V1.htm
Linktext: linktext1 URL: url1
Linktext: linktext2 URL: url2
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2005-04-11 17:16
#29466 #29466
ehmm bei mir sind die html-Datei extern und das perl-Script sieht jetzt so aus!!!

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
#!/usr/bin/perl -w
#anfang use (was er noch benutzen soll!)
use strict;
use DBI;
use warnings;
use HTML::Parser;

#ende use
our $file;
my @links;


# Datenbank
my $datenbank = "db_rpt";
# Datenbankhost
my $datenbankhost = "localhost";
# Datenbankusername
my $datenbankuser = "XXXXXX";
# Datenbankpasswort
my $datenbankpw = "XXXXXX";

my $p = HTML::Parser->new();
$p->handler(start => \&start_handler,"tagname,attr,self");


my $dbh = DBI->connect("DBI:mysql:$datenbank:$datenbankhost","$datenbankuser","$datenbankpw") || scripterror ("Fehler bei der Datenbankverbindung aufgetreten.");
my $sth = $dbh->prepare("SELECT datei FROM index_seiten");
$sth->execute or die DBI->errstr;
#@inhalt = $sth->fetchrow_array();
while (my($datei) = $sth->fetchrow_array())
 {
print "$datei \n";
   open (DAT, '<', $datei) || die "Kann die Datei $datei nicht laden!";
   my $tmp_var;
   my $secln=0;
   foreach (<DAT>)
{
next unless (/STYLE/);
$p->parse($_);
 
}
}
foreach my $link(@links){
print "Linktext: ",$link->[1],"\tURL: ",$link->[0],"\n";
}

$sth->finish;
$dbh->disconnect;

sub start_handler{
return if(shift ne 'a');
my ($class) = shift->{href};
my $self = shift;
my $text;
$self->handler(text => sub{$text = shift;},"dtext");
$self->handler(end => sub{push(@links,[$class,$text]) if(shift eq 'a')},"tagname");
}


Ich denke mal der HTML::Parser (sorry kann halt manchmal nicht schreiben!) nicht mit den "^M" am Ende jeder Zeile zu tun hat!
Wenn ich den html-Code kopiere dann sind diese nicht dabei!

MfG
renee
 2005-04-11 17:26
#29467 #29467
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das Problem liegt darin, dass Du die Datei zeilenweise ausliest...

probier mal:
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
#!/usr/bin/perl -w
#anfang use (was er noch benutzen soll!)
use strict;
use DBI;
use warnings;
use HTML::Parser;

#ende use
our $file;
my @links;


# Datenbank
my $datenbank = "db_rpt";
# Datenbankhost
my $datenbankhost = "localhost";
# Datenbankusername
my $datenbankuser = "XXXXXX";
# Datenbankpasswort
my $datenbankpw = "XXXXXX";

my $p = HTML::Parser->new();
$p->handler(start => \&start_handler,"tagname,attr,self");


my $dbh = DBI->connect("DBI:mysql:$datenbank:$datenbankhost","$datenbankuser","$datenbankpw") || scripterror ("Fehler bei der Datenbankverbindung aufgetreten.");
my $sth = $dbh->prepare("SELECT datei FROM index_seiten");
$sth->execute or die DBI->errstr;
#@inhalt = $sth->fetchrow_array();
while (my($datei) = $sth->fetchrow_array())
{
print "$datei \n";
my $tmp_var;
my $secln=0;
$p->parse_file($datei);
}
foreach my $link(@links){
print "Linktext: ",$link->[1],"\tURL: ",$link->[0],"\n";
}

$sth->finish;
$dbh->disconnect;

sub start_handler{
return if(shift ne 'a');
my ($class) = shift->{href};
my $self = shift;
my $text;
$self->handler(text => sub{$text = shift;},"dtext");
$self->handler(end => sub{push(@links,[$class,$text]) if(shift eq 'a')},"tagname");
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2005-04-11 17:35
#29468 #29468
OOOOHHHHHHH

huch ihr könnt mich schlagen!!!!

das ist irgendwie logisch!!!

naja dann bedanke ich mich!!!!

Bis denn dannn!!!!

Thread kann geschlossen werden!!!
renee
 2005-04-12 01:09
#29469 #29469
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nein, nein, wir schlagen doch keine Perlprogrammierer ;)

CPAN:HTML::Parser ist sehr gewöhnungsbedürftig, aber sehr nützlich. Wenn Du häufiger mit HTML-Seiten zu tun hast, solltest Du Dir die Doku mal ganz genau anschauen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 9 Einträge, 1 Seite



View all threads created 2005-04-11 12:56.