FortranやCによる格子点データ処理と、データファイル形式

地球上に分布する数量は、 緯度経度の格子点のデータとして扱われることが多い。 地球上にM本の経線とN本の緯線がひかれており、 i番め(i=1, ..., M)の経線とj番め(j=1, ..., N)の緯線の交点の位置に 対応して値が与えられているような構造である。 線の交点ではなく、線で囲まれたマス目に対応して値があるような 構造もある。 ただしここでは、そのような場合は、位置をマス目の中心で代表させて 格子点データに含めて扱うことにする。

このようなデータを扱うには、 プログラム言語としてはFortranが比較的適している。 プログラム内のデータ構造としては、 2次元配列を使うのが、実行速度、プログラムの見通しの両面でよい。 観測値のない格子点についても、メモリーの場所は確保しておき、 値がないことを示す数値をあらかじめ約束しておく (プログラムではそれを考慮して処理する)という方式をとる。 ディスク上のデータ形式としては、 実行速度の点では、バイナリファイル形式がよいが、 データの内容の確認をしやすいという意味では テキストファイル形式がよいので、そのときによって使い分けている。

なお、Fortran言語には、バイナリデータの読み書きは規定されてはいるが、 同じコンパイラ以外のもので書いたバイナリデータの互換性が 保証されるような規定がない。 しかし、UnixおよびDOS上のコンパイラのほとんどのものでは。 一定長さの記録がくりかえすようなデータ形式であれば、 直接アクセス(access='DIRECT')、書式なし(form='UNFORMATTED')で 読むことができる。 違う機種からデータを持ってきたときに注意が必要なのは、 ほぼ、CPUによってバイト順が違う(big-endian対little-endian) ことだけになった。

C言語でのプログラムの場合、 プログラム内のデータ構造として、 プログラムの見通しのよさという意味では、 a[][]のような2次元配列をとるのがよい。 しかし、これは論理的には「配列の配列」であるため、 実行効率は最適ではないようだ。 実行効率の面からは、 格子点網で必要になる総個数の記憶領域を 1次元配列として、あるいはmallocによって確保してしまい、 その中の相対位置をポインタとして、格子番号(i,j)から計算して アクセスするような方式が、よく使われる。 ディスク上の形式としては、 Fortranと共通のものも使われるが、 Cではデータの構造体を定義したうえでそれをバイナリで読み書きすることも できるため、データ内容とデータを説明する情報とを まとめて読み書きすることも多い。 Cによるバイナリデータの読み書きのコンパイラ間の互換性はFortranの場合よりも よいが、 それでも他の機種で書いたデータを同じプログラムで読めるとは限らない ことは注意が必要である。

[「自己記述型」ファイル形式] に続く

2000-08-19, 2002-04-08, 2005-10-13
増田 耕一 (MASUDA Kooiti)
[コンピュータ関係の教材の目次へ] [Awkによるデータ処理の教材の目次へ]