バイナリ読み込み

Perlの利点として、バイナリを簡単に読むことができることがある。

例えば、以下のようなfortranプログラムで作成したバイナリがあったとする

            :
siz=data_num*3*4
OPEN(210,FILE='tmp.bin',ACCESS="direct",FORM="unformatted",STATUS="REPLACE",recl=siz)
WRITE(210,rec=1)(long_b(i),lat_b(i),tbb_b(i),i=1,data_num)
CLOSE(210)
            :

Perlスクリプトでは、binmodeとunpack関数を使って数値に戻す。
Perlスクリプト例

#!/usr/bin/perl
use strict;
use warnings;

open(IN,"tmp.bin");
my $size = -s IN;
my $data_num = $size/(3*4);
binmode(IN);
my $buf; my $lon_s; my $lat_s; my $tbb_s;

for(my $i=1; $i<$data_num; $i++){
  read(IN,$buf,4+4+4);
  ($lon_s,$lat_s,$tbb_s) = unpack "f f f", $buf;
}
close(IN);

このサンプルでは、4バイトずつ単精度実数(f)を読み込んでいるだけ。

最終更新:2011年12月05日 18:27