Thread Binäre RegEx / Ersetzen (1 answers)
Opened by AndreasM at 2007-06-05 20:13

AndreasM
 2007-06-05 20:13
#77267 #77267
User since
2005-10-08
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo zusammen,

ich habe ein Problem wo ich wahrscheinlich den Wald vor Bäumen nicht sehe.
Ich möchte eine binäre Konfigurationsdatei manipulieren.
Open mit binmode ist kein Problem, und prinzipiell funktioniert alles auch (auch das Schreiben). Bis auf dieses kleine Detail....

Binär habe ich etwas in der Form

00 00 00 07 00 00 00 c:\Pfad 00 00

in der Datei stehen. "C:\Pfad " möchte ich nun durch das aktuelle Arbeitsverzeichnis ersetzen (was zunächst mal kein Problem ist)
Ich kann ohne Schwierigkeiten "C:\Pfad" durch "C:\"Pfud" ersetzen, und die Binärdatei ist vom Programm lesbar.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#! D:\Perl

use strict;
use warnings;
use Cwd;

my $Pfad = cwd;
$Pfad =~ s/\//\\/g;

open EINGABEPARAMETER, "Original.PAR";
open AUSGABEPARAMETER, ">Faelschung.PAR";

binmode(EINGABEPARAMETER);
binmode(AUSGABEPARAMETER);

while (<EINGABEPARAMETER>) {
s/c:\\Pfad/$Pfad/;
print AUSGABEPARAMETER;
}

close EINGABEPARAMETER;
close AUSGABEPARAMETER;



Mein Problem ist die "07" drei Bytes vor dem Pfadeintrag. Diese 07 gibt nämlich die "Länge" des Pfadenamens an. Würde ich "C:\Pfad" durch "C:\NeuerPfad" ersetzen, müsste statt der "07" dort "0c" stehen.

Ich muss also
a) den $Arbeitspfad ermitteln -> kein Problem mit cwd
b) die Länge von $Arbeitspfad ermitteln, was auch kein Problem ist.

Aber wie schreibe ich die Länge als Bytewert weg?
Mache ich einen Denkfehler, weil ich hier "Zeichen" und "Bytes" zu mischen versuche?

Grüße
AndreasM

View full thread Binäre RegEx / Ersetzen