あって助かった

退社時間に近い段階で相談を受ける。
次の条件のデータを判定したいと言う。

  • データはバイナリ
  • 固定長レコードが納められている
  • レコード内の特定の位置が条件を満たすかを調べたいがバイナリエディタで目視するには量が多すぎる

とのこと。

良く聞くと、判定ができれば良く、書き換えは必要ないとのこと。

それならなんとかなりそうだ。
Windowsだけでなんとかしろとは言われなかったので、VMで寝ているLinuxサーバーを使わせてもらった。

  • od -h --width=BYTES DATA > OUTFILE.csv として、固定レコード長で千切り、16進ダンプにする
  • OpenOffice,org のcalcに「区切り文字=スペース」「全セルをテキスト文字で」と言う条件で読み込ませる*1
  • 該当位置について検索をかける。

OpenOffice.org のcalcだと、正規表現が利用できるので便利

と言う方法を思い付いたので、依頼者が徹夜を覚悟していたところを一時間強で解放していただいた。

やっぱり「何かは起きた」*2けど、睡眠不足に突入せずに済みました。

Windowsだけで……と言われたら手頃な道具を知らないので、困ったときのUNIX頼みで助かったのです。(道具探しから始めたら、相当かかるんだろうなぁ)

P.S.
実は、odの出力とWindows上のバイナリエディタのならびは、何故か上位バイトと下位バイトが逆だった。リトル・エンディアンなんて、リリパットのやつら(ガリバー旅行記 (世界の幼年文学) より)だけで見飽きたよ(ぉ

P.S.2
FreeBSDだと、オプション違うなぁ。それ以前にodじゃなくて、hexdumpかも……

P.S,3
FreeBSDだと、オプション違うので。sysutils/coreutilsをインストールしてgod使うのが正解っぽい

*1:別にEXCELでも構わない

*2:昨日の日記参照 眠気 - きりなの日記