バイナリデータの読み書き

open methodの第2変数にbを追加すると、”バイナリモード(ここでの「バイナリ」は改行方式を指すのみであって、取り扱うデータ自体がバイナリかそうでないかは特に関係がない)”で書き込みが行われる。

bin = open("test.bin", "wb")

pack methodで配列中のデータを変換する。下は、配列barの中身を2バイトの文字列と8バイトの倍精度実数x3、計26バイトの固定長に変換する。4バイトの単精度実数にしたい場合は、d→fと変更すればよい。

bin.print(bar.pack("a2d3"))

生成したファイルの容量が、きっかり26バイトになっているのにはちょっと感動。Fortranだと、単にwrite, readするだけでデータ長はほとんど意識しないので。読み取りにはunpackメソッドを用いる。

bin = open("test.bin", "rb")
while rec = bin.read(26)
 buf = rec.unpack("a2d3")
end

さらに、seek methodでデータ読み取り(書き込みも)の開始位置を指定できる。
一行のデータがrecバイトのとき、

 bin.seek(n*rec)

でn行読み飛ばし、

bin.read(rec)

でn+1行目から読んでいくことができる。これは便利。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です