Schrift
[thread]11850[/thread]

Zeichen in Binärdateien ersetzen

Leser: 1


<< >> 3 Einträge, 1 Seite
murxer
 2008-05-20 20:58
#110025 #110025
User since
2008-05-20
1 Artikel
BenutzerIn
[default_avatar]
Hallo!

Wie kann ich am einfachsten in einer Binärdatei (die auch einige MB groß sein kann) einige Zeichen suchen und durch andere ersetzen, ohne die Datei komplett umzukopieren? Ich habe mir was mit binmode(), read(), s/// und print() gebaut, aber dabei wird eben ganze Datei umkopiert. Sicherlich geht das auch direkt in der Datei, aber wie?

(Das Ganze unter Windows XP mit ActiveState Perl.)

Danke.
murphy
 2008-05-21 00:08
#110027 #110027
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Wenn die Länge des Ersatzes in Bytes nicht genauso groß wie die Länge des Originales ist, geht das ohne umkopieren der Datei schon mal gar nicht.

Wenn die Längen aber identisch sind, würde ich ja folgendes machen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
use Sys::Mmap;

my $size = (stat $file)[7];
new Mmap my $data, $size, $file or die "Couldn't map $file: $!\n";

$data =~ s/xyz/abc/;
# edit: oder wenn nur einzelne Zeichen ersetzt werden sollen:
$data =~ y/a/b/;

When C++ is your hammer, every problem looks like your thumb.
Gast Gast
 2008-05-20 21:29
#110028 #110028
Schau dir mal "tell" und und "seek" an. Klappt aber nur wenn der Ersatz genauso groß ist wie das Originalstück.
<< >> 3 Einträge, 1 Seite



View all threads created 2008-05-20 20:58.