Up|<<Prev|Next>>


フォーマット仕様詳細

NetCDF_file := header  data
 
header  := magic  numrecs  dim_array  gatt_array  var_array
 
magic   := 'C'  'D'  'F'  VERSION_BYTE
 
VERSION_BYTE := '\001'    // ファイルフォーマットのバージョン番号
 
numrecs    := NON_NEG
 
dim_array  :=  ABSENT | NC_DIMENSION  nelems  [dim ...]
 
gatt_array :=  att_array  // グローバル属性
 
att_array  :=  ABSENT | NC_ATTRIBUTE  nelems  [attr ...]
 
var_array  :=  ABSENT | NC_VARIABLE   nelems  [var ...]
 
ABSENT  := ZERO  ZERO     // 配列が無いことを意味する( nelems == 0に同じ)
 
nelems  := NON_NEG        // 以下のシークエンスの要素数
 
dim     := name  dim_length
 
name    := string
 
dim_length := NON_NEG     // 0であればこれは記録次元。
                          // 記録次元は1つまでである。
 
attr    := name  nc_type  nelems  [values]
 
nc_type := NC_BYTE | NC_CHAR | NC_SHORT | NC_INT | NC_FLOAT | NC_DOUBLE
 
var     := name  nelems  [dimid ...]  vatt_array  nc_type  vsize  begin
                          // nelems は変数のランク(次元数)である。
                          // スカラーなら0 、ベクトルなら 1、行列なら 2、等 
 
vatt_array :=  att_array  // 変数に特定の属性
 
dimid   := NON_NEG        // 変数形状のための次元 ID(dim_arrayへのインデックス)
                          // 最初の次元が記録次元である場合に限って、
                          // これを"記録変数”と呼ぶ。
 
vsize    := NON_NEG       // 変数サイズ。記録変数で無い場合には、
                          // 変数データに割り当てらたスペース(単位はバイト)
                          // この数は次元長と次元型のサイズの積であり、 
                          // 4バイト境界に合わせて詰め込まれている。
                          // これが記録変数である場合には
                          // 記録ごとのスペースに対応する。
                          // NetCDFの”記録サイズ”は記録変数の
                          // vsizeのを和として計算される。
 
begin   := NON_NEG        // 変数のスタート位置。この変数のデータの
                          // 先頭のファイル中におけるバイト単位の
                          // オフセット(インデックス必要)
 
data    := non_recs  recs
 
non_recs := [values ...]    // 記録変数ではない最初の変数、2番目、ノのデータ。
 
recs    := [rec ...]        // 最初の記録、2番目の記録、ノ
 
rec     := [values ...]     // 記録nに対する最初の記録変数、
                          // 2番目の記録変数、ノのデータ
                          // 特殊なケースのついては下記の注釈を参照のこと
 
values  := [bytes] | [chars] | [shorts] | [ints] | [floats] | [doubles]
 
string  := nelems  [chars]
 
bytes   := [BYTE ...]  padding
 
chars   := [CHAR ...]  padding
 
shorts  := [SHORT ...]  padding
 
ints    := [INT ...]
 
floats  := [FLOAT ...]
 
doubles := [DOUBLE ...]
 
padding := <次の4バイト境界までの0, 1, 2, または 3 バイト>
                          // ヘッダーでは、詰め込むのは0バイトです
                          // データでは、詰め込むのは変数のフィル値である。
 
NON_NEG := <非負の値を持つINT>
 
ZERO    := <0の値を持つINT>
 
BYTE    := <8ビット byte>
 
CHAR    := <8ビット ACSII/ISO でコード化されたcharacter>
 
SHORT   := <16ビット符号付整数・ビッグエンディアン・ 2の補数表現>
 
INT     := <32ビット符号付整数・ビッグエンディアン・ 2の補数表現>
 
FLOAT   := <32ビット IEEE 単精度浮動小数点・ビッグエンディアン>
 
DOUBLE  := <64ビット IEEE ニ倍精度浮動小数点・ビッグエンディアン>
 
// タグは32ビット整数
NC_BYTE      := 1         // データは8ビット符号付整数の配列
NC_CHAR      := 2         // データは文字配列(テキスト等)
NC_SHORT     := 3         // データは16ビット符号付整数の配列
NC_INT       := 4         // データは32ビット符号付整数の配列
NC_FLOAT     := 5         // データはIEEE 単精度浮動小数点の配列
NC_DOUBLE    := 6         //データはIEEE 倍精度浮動小数点の配列
NC_DIMENSION := 10
NC_VARIABLE  := 11
NC_ATTRIBUTE := 12

Up|<<Prev|Next>>