xml aus binärdatei extrahieren

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 = <IN>;

geht aber nicht - es werden nur ein paar Zeilen eingelesen.

wie macht man sowas?
Gerhard Wolf [ Di, 07 März 2006 19:23 ] [ ID #1218998 ]

Re: xml aus binärdatei extrahieren

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 = <IN>;
>
> 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 $/; <IN> };

Wolf
Wolf Behrenhoff [ Di, 07 März 2006 20:50 ] [ ID #1219000 ]

Re: xml aus binärdatei extrahieren

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 = <IN>;
>
> 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 $_ = <FH>; # whole file now here

Jörg
joerg.hubele [ Di, 07 März 2006 20:58 ] [ ID #1219001 ]

Re: xml aus binärdateiextrahieren

Mahlzeit!

Gerhard Wolf <quisquiliae [at] gmx.de> wrote:

> open(IN,$infile) or die $!;
> binmode(IN);
> my $file = <IN>;
>
> 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 = <IN>;

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:<mitch [at] cgarbs.de>',y;:;\t;;print;_;_
Christian Garbs [ Di, 07 März 2006 21:18 ] [ ID #1219003 ]
Perl » de.comp.lang.perl.misc » xml aus binärdatei extrahieren

Vorheriges Thema: geschickte konfigurationsdatei
Nächstes Thema: Mehreren Variablen in einer Zeile einen Wert zuweisen?!