こんなんで行けるかな..未検証、すみません。
#!ruby
pth="BACKUP.001" #filename
bs=32768 #32KB
str="nothing"
hed=IO.read(pth,bs)
if hed[/LOGNAME/] != nil
ofs=$~.begin(0) #offsetpoint of 1st-char of "LOGNAME"
siz=hed[ofs+11,4].unpack("i*")[0] #size of the object < int
str=IO.read(pth,siz,ofs+15)
end
p strSubject: Re: バイナリファイル内の検索その他をしたい
Date: 2007/10/04 00:11
From: 卯之介
ありがとうございます、できました。
- str=IO.read(pth,siz,ofs+13)
+ str=hed[ofs+13,siz]
これでうまくいきました。
ただ、hedのサイズが32768より数バイト〜数百バイト長いのと、ofsの位置は元ファイルの先頭から数えたものより少なめに出ます。それでいてhedの中では目的の位置に合ってしまうのが不思議です。10進←→16進みたいな定量的な差ではないし、例えばhed中に登場する00や0D 0Aを無視してカウントアップしているのかなと思ったり。
まあ、hedを検索してindexを得たのだからhedの中で処理しろと言われればわからないでもないのですが……ともかくもありがとうございました。あとは何とかできそうです。出来ましたか、良かった。
バイナリファイルはまともに扱った事がなく
IO.readとかunpackという事のみ知ってたわけでして..
HNS Board-0.1.1 Copyright (c) by HyperNikkiSystem Project 2002