Perl hex Problem
hallo,
Die Sachlage.
ich habe viele html Dateien, aus der ich mit Perl einige Daten
extrahieren möchte. Hierzu ist es notwendig, dass die Substitution s///g
*zeilenübergreifend* funktioniert.
In der Datei befinden sich Zeilenende Zeichen, die von Perl nicht
erkannt werden.
In einem hex Editor werden dies als 16, 32 und 64 bit unterschiedlich
dargestellt. Ich kann damit wenig anfangen. Hier die Analyse des hex
Editors:
Eine Zeilenende Zeichen wird wie folgt dargestellt:
Signed 8 bit: 10
Unsigned 8 bit: 0x0A
Signed 16 bit: 2570
Unsigned 16 bit: 0x0A0A
Eine weiteres Zeilenende Zeichen wird wie folgt dargestellt:
Signed 8 bit: 10
Unsigned 8 bit: 0x0A
Signed 16 bit: 2620 (oder 15370 als Little Endian)
Unsigned 16 bit: 0x0A3C (oder 0x3C0A als Little Endian)
Hier das Perl Skript:
#!/usr/bin/perl -w
use strict;
my $verz = "/home/ft/meinVerz";
my $fileliste ;
my @fileliste;
my $filename;
# Verezichnis oeffnen
@fileliste = glob($verz."/*.html") or die "Verzeichnisangabe falsch";
$/="";
foreach $filename (@fileliste)
{ open(FH, $filename) or die "Konnte $filename nicht öffnen\n";
while(<FH>)
{
$_ =~ s|\s+| |gs; # Leerzeichen entfernen
$_ =~ s|.*expand.sections||si; # Marke finden
print "$_ \n";
};
};
Das Problem:
Steht die gesuchte Zeichenkette vor einem solchen ominösen Zeilenende
Zeichen, wird der Substitutionsbefehl richtig erkannt; steht er
dahinter, wird mit dem Zeilenendezeichen ein neuer Absatz definiert und
die Substitution wird damit nur innerhalb des Absatzes ausgeführt.
Meine Frage:
Da $_ =~ s/[\n|\r]+//gs; # windows zeilenende
auch keinen Erfolg bringt, komme ich mit diesem Problem nicht weiter.
Wer hat eine Lösung?
Franz Timmer
Reply to: