Fortran90 AMeDAS(アメダス)1分値 バイナリデータの読み込みプログラム


  気象業務支援センターよりAMeDAS 1分値の購入が可能となりました.
 記録形式はバイナリ形式で,しかも,不定長(異なる長さ)で収録されています.
 固定長のバイナリデータをFortranで読み込むことに関する資料は,インターネット上で,
 比較的多数見ることができますが,不定長バイナリに関してはほとんど参考となる資料
 が見当たりません.

  そこで,AMeDAS1分値のバイナリデータをアスキーデータに変換するFortran90の
 プログラムを作成したので,解説・公開します.ここで言うアスキーデータとは収録されて
 いるそのままの状態(整数)と,実用気象データ(実数が多い)の2つを意味します.

 ※使用環境:
Intel(R) Fortran Compiler Version 8.0 (Windows版)

<プログラムファイル(.f90)>
 AMeDAS 1分値 バイナリ→アスキー(収録されている状態)変換
 ●AMeDAS 1分値 バイナリ→アスキー(実用気象データ)変換

<解説>
1.コンパイルについて
 上のプログラムをダウンロードして,以下の3点をお手持ちのデータに合わせて変更して下さい.
 ●460行目の,入力ファイルのディレクトリ,地点名
 ●463行目の,出力ファイルのディレクトリ,出力ファイル名
 ●442,443行目の対象年月

 変更後はコンパイル・実行です.
 バイナリの記録長指定はコンパイラに依存するので注意が必要です.
 
ここではIntel Fortran Compiler Version 8.0 (Windows版)を使用した方法について解説します.

 コンパイル時にプログラム中で指定した,1レコードあたりの記録長の長さ(461行目のopen文中の
 recl=
1)を,デフォルトでは4バイト単位で読み込んでしまう(すなわち,recl=1は4byte!)ので,
 
1バイトで読み込むにはコンパイル時にオプションが必要となる.

 
以下のようにタイプして,実行する.
 ifort amedas_1min_read_original.f90 /assume:byterecl


2.equivalence文
  AMeDAS 1分値データのファイル1つには,80個の気象要素データが1分あたり171バイト,
 これが,60分×24時間=1440個入っています.したがって,まず1バイトですべて読み込み,
 各要素のレコード長に応じて結合させるという作業を行います.これを
equivalence文によって
 実行します.equivalence文の詳しい使い方は参考文献@をお読み下さい.
 ※equivalence文はFortran90では非推奨の文のようです.Fortran90ではtransfer文がbetter??


 「無事使えた!」「ここ違うのでは?」等,BBSにお書き込みいただけると,今後のプログラム公開の
モチベーションアップになりますので,是非書き込んでいただけると有難いです.


<参考文献>
 @http://home.kanto-gakuin.ac.jp/~nmaeda/labo/doc/bin_2.shtml

<検索用タグ>
 Fortran90, AMeDAS, アメダス, バイナリ, アスキー, 変換, 固定長, 不定長, 記録長, 異なる長さ,
 1分値, equivalence, recl, byte, バイト