Schrift
[thread]12936[/thread]

$_ teilen in <WERT> und </WERT>

Leser: 1


<< >> 9 Einträge, 1 Seite
dieSCHWEIN
 2008-12-26 14:12
#117440 #117440
User since
2008-12-26
4 Artikel
BenutzerIn
[default_avatar]
eLLo....

Ich lese eine Datei aus, die bis jetzt so z.b. aussah:

Code: (dl )
1
2
3
4
name
Mein Name ist Perl.
alter
Mein Alter ist 15.


Bisher:

Code (perl): (dl )
1
2
3
4
5
        while (<FILE>)
        {
                my $entry=$_;
                $entry =~ s/[\n\r]//g;
        }


Passt soweit...

So, jetzt will ich eine Datei auslesen, die z.b. folgenden Inhalt hat:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
<name>
Perl
</name>
<stadt>
Wien
</stadt>
<load>
Datei
<parameter>
2
</parameter>
</load>


Wie stell' ich das jetzt am besten an?

Es ist eh nur die Zeile wichtig:

Code (perl): (dl )
$entry =~ s/[\n\r]//g;
Keine.
murphy
 2008-12-26 16:50
#117445 #117445
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Wenn Du kleine XML-Dokumente verarbeiten willst, empfiehlt sich CPAN:XML::Simple.
When C++ is your hammer, every problem looks like your thumb.
dieSCHWEIN
 2008-12-26 17:11
#117446 #117446
User since
2008-12-26
4 Artikel
BenutzerIn
[default_avatar]
Danke für den Link, nur mir hilft' das bei meinen Problem nicht wirklich weiter.
Keine.
renee
 2008-12-26 18:12
#117447 #117447
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was soll denn am Ende rauskommen?
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/
dieSCHWEIN
 2008-12-26 19:16
#117449 #117449
User since
2008-12-26
4 Artikel
BenutzerIn
[default_avatar]
Ich wiLL eben aus der Datei immer den Wert von <WERT> bis </WERT> auslesen.

Also z.b.

<name>
Perl
</name>

if($key eq 'name')
{
$global=$entry;
}

Dann soll er zu <stadt> springen.
Keine.
MatthiasW
 2008-12-26 22:19
#117454 #117454
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Ich habe immer noch nicht verstanden, was du eigentlich möchtest.
Gib doch bitte mal zu den geposteten Daten [s]aus[/s] an, was du als Ergebnis erwartest.

Im Moment kann ich mir nur vorstellen, dass du XML parsen möchtest.
Dafür kannst du entweder XML::Simple verwenden(wie oben schon erwähnt), oder aber XML::Parser, wenn du lieber direkt auf das gefundene reagieren möchtest.

Aber da du meinst, XML::Simple könne dir nicht helfen, würde ich mich über eine ausführlichere Beschreibung deines Problems freuen.

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
dieSCHWEIN
 2008-12-26 23:54
#117456 #117456
User since
2008-12-26
4 Artikel
BenutzerIn
[default_avatar]
Ich hab's schon anders gelöst, aber danke ;)
Keine.
leo11
 2008-12-27 12:53
#117465 #117465
User since
2008-08-14
250 Artikel
BenutzerIn
[default_avatar]
dieSCHWEIN+2008-12-26 18:16:10--
Ich wiLL eben aus der Datei immer den Wert von <WERT> bis </WERT> auslesen.


Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
while (<DATA>) {
     print if m{<tag>} .. m{</tag>};
}

__DATA__
a
b
<tag>
1
2
3
</tag>
happy new year
...
<tag>
4
5
6
</tag>
END
RPerl
 2008-12-27 13:50
#117466 #117466
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Du koenntest auch mit einer regex alles matchen.

Code: (dl )
1
2
3
perl -lwe '
my $string = "<b>hallo</b>";
print $string =~ m{<.*?>(.*)</.*?>};'


Das ganze halt in deinem Falle mit /g-flag und in ein @array.
<< >> 9 Einträge, 1 Seite



View all threads created 2008-12-26 14:12.