Array nach Zeichen durchsuchen und ersetzen
Tolwin
- perl
Hallo Forum,
zuvor möchte ich erwähnen dass ich ein absoluter PERL Einsteiger bin.
Ich stehe derzeit vor folgender Aufgabe. Per Filehandle lese ich eine
XML Datei in das Array @Zeilen
open(FILEHANDLE, "<C:\datei.xml");
@Zeilen = ("");
while(<FILEHANDLE>){
push(@Zeilen,$_);
}
Im XML File gibt es nun einen Value der einen Text mit HTML Entities
enthält. Diese möchte ich jetzt Zeile für Zeile suchen und ersetzen.
Bpsw. < in < oder $gt in >. Kann mir hierzu jemand einen Tipp geben wie ich vorgehen müsste.
Vielen Dank schon im Voraus
Tolwin
Im XML File gibt es nun einen Value der einen Text mit HTML Entities
enthält. Diese möchte ich jetzt Zeile für Zeile suchen und ersetzen.
Bpsw. < in < oder $gt in >. Kann mir hierzu jemand einen Tipp geben wie ich vorgehen müsste.
"Reguläre Ausdrücke" - "regular expressions"
Vielen Dank für die Tipps!
Viele Grüße
Tolwin
hi,
open(FILEHANDLE, "<C:\datei.xml");
@Zeilen = ("");
my $oneLine = "";
while($oneLine = <FILEHANDLE>){
$oneLine =~ s/\</</g;
push(@Zeilen,$oneLine);
}
close FILEHANDLE;
Im XML File gibt es nun einen Value der einen Text mit HTML Entities
enthält. Diese möchte ich jetzt Zeile für Zeile suchen und ersetzen.
Bpsw. < in < oder $gt in >. Kann mir hierzu jemand einen Tipp geben wie ich vorgehen müsste.
kanns leider grad nicht ausporbieren, aber sollte so klappen.
kann evtl. sein dass du das '&' nicht mit \ maskieren musst, bzw. das '<' schon.
mfG,
steckl
open(FILEHANDLE, "<C:\datei.xml");
@Zeilen = (""); # Damit legst Du aber schon in $Zeilen[0] einen Leerstring an
my %entities= (
'lt' => '<',
'gt' => '>',
'auml' => 'ä',
#usw
'amp' => '&',
);
while(<FILEHANDLE>){
s/&([^;]+);/$entities{$1}/g;
push(@Zeilen,$_);
}
Besser ist es im Allgemeinen aber, Du verwendest ein Modul wie z.B. XML::Twig um Deine Datei zu parsen.
Hell-O!
Per Filehandle lese ich eine XML Datei in das Array @Zeilen
Das machst du recht umständlich, du kannst den Inhalt auch direkt zuweisen:
open FH, $file || die "Can't open $file: $!";
flock FH, LOCK_SH;
my @lines = <FH>;
close FH;
Im XML File gibt es nun einen Value der einen Text mit HTML Entities enthält. Diese möchte ich jetzt Zeile für Zeile suchen und ersetzen.
Dann tue dies, entweder beim Einlesen direkt:
use [link:http://search.cpan.org/~gaas/HTML-Parser-3.55/lib/HTML/Entities.pm@title=HTML::Entities];
my @lines;
open FH, $file || die "Can't open $file: $!";
flock FH, LOCK_SH;
while(<FH>) {
push @lines, decode_entities($_);
}
close FH;
Oder mit Hilfe von map:
use [link:http://search.cpan.org/~gaas/HTML-Parser-3.55/lib/HTML/Entities.pm@title=HTML::Entities];
open FH, $file || die "Can't open $file: $!";
flock FH, LOCK_SH;
my @rawdata = <FH>;
close FH;
my @lines = map { decode_entities($_) }, @rawdata;
Du siehst, es führen viele Wege nach Rom :-)
Siechfred