xml aus binärdatei extrahieren
xml aus binärdatei extrahieren
am 07.03.2006 19:23:11 von Gerhard Wolf
Hallo,
ich möchte aus einer Datei den enthaltenen XML-Code extrahieren.
Der ganze Rest vorallem vor dem XML ist Binärer Programmcode. Aber
auch zwischen den Start bzw.End-Tags steht Prog.code.
Meine Idee war die Datei komplett (ca. 3MB) einlesen und mit einer
Substitution das XML extrahieren:
open(IN,$infile) or die $!;
binmode(IN);
my $file = ;
geht aber nicht - es werden nur ein paar Zeilen eingelesen.
wie macht man sowas?
Re: xml aus binärdatei extrahieren
am 07.03.2006 20:50:56 von Wolf Behrenhoff
Gerhard Wolf schrieb:
> Hallo,
>
> Meine Idee war die Datei komplett (ca. 3MB) einlesen und mit einer
> Substitution das XML extrahieren:
>
> open(IN,$infile) or die $!;
> binmode(IN);
> my $file = ;
>
> geht aber nicht - es werden nur ein paar Zeilen eingelesen.
Natürlich! Denn Perl liest nur bis zum Input-Record-Separator, egal wie
du binmode einstellst. Um die ganze Datei einzulesen (slurp), solltest
du daher $/ auf undef setzen.
Also zum Beispiel
open...
binmode...
my $file = do { local $/; };
Wolf
Re: xml aus binärdatei extrahieren
am 07.03.2006 20:58:16 von joerg.hubele
Gerhard Wolf wrote:
> Meine Idee war die Datei komplett (ca. 3MB) einlesen und mit einer
> Substitution das XML extrahieren:
>
> open(IN,$infile) or die $!;
> binmode(IN);
> my $file = ;
>
> geht aber nicht - es werden nur ein paar Zeilen eingelesen.
So liest du nur bis zum ersten auftreten von $/ ein. Siehe $/ in perlvar.
local $/; # enable "slurp" mode
local $_ = ; # whole file now here
Jörg
Re: xml aus binärdateiextrahieren
am 07.03.2006 21:18:45 von Christian Garbs
Mahlzeit!
Gerhard Wolf wrote:
> open(IN,$infile) or die $!;
> binmode(IN);
> my $file = ;
>
> geht aber nicht - es werden nur ein paar Zeilen eingelesen.
Um genau zu sein: eine Zeile :-)
Wenn Du das Zeilenendezeichen abstellst, dann landet alles in der
einen Zeile:
open(IN,$infile) or die $!;
binmode(IN);
local $/; # enable "slurp" mode
my $file = ;
Siehe auch `perldoc perlvar`.
GruÃ,
Christian
--
sub _{print"\n"}_;for(;$s<9;++$s){$_='1E2018201E00001E2018201E00001E2018201'
..'E002020001C2222221400005CA2A2A27C02001C2222221C20003E0402 02201F2422221C00'
..'242A2A2A12002020001C2222221F20001C2A2A2A0C';while(s;(..); ;){printf'%c',hex
$1&1<<$s?40:32}_}$_=':::Christian Garbs:',y;:;\t;;print;_;_