Schrift
[thread]9068[/thread]

Binäre RegEx / Ersetzen



<< >> 2 Einträge, 1 Seite
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
sid burn
 2007-06-05 21:09
#77268 #77268
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Um Binäre Daten zu Bearbeiten gibt es die Befehle pack und unpack.

pack
unpack
perlpacktut

Allerdiengs kann ich dir auch schon nicht sehr viel mehr Helfen. mit pack/unpack habe ich noch nie großartig mit gearbeitet. Und ich konnte mich davor bisher immer ganz gut drücken. ;)
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
<< >> 2 Einträge, 1 Seite



View all threads created 2007-06-05 20:13.