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行目から読んでいくことができる。これは便利。