Up|<<Prev|Next>>


7.16 フィル値

開かれたNetCDFファイルに書き込まれたことのない値を読み取ろうとしたならば何が起こるでしょう?必ずエラーが発生し、エラーメッセージもしくはエラーステータスが返されると思われがちです。確かに、開かれていないNetCDFファイルからデータを読もうとした場合、指定されたNetCDFファイルにおいてその変数IDが有効でない場合、または指定されたインデックスが指定された変数の次元長で定義された領域外にある場合にはエラーが発生します。しかし、それ以外の場合には、書き込まれていない値を読もうとすると、初めにNetCDF変数が書かれたときに未定義の全ての値を埋めるための使用される特別なフィル値 fill value が返されます。

このフィル値を無視してNetCDF外部データ型の全領域を使うことも出来ますが、その場合には読む前に全てのデータ値を書き込んだことを確認しなければなりません。もし、読む前に全てのデータ値を書き込むことが確かであれば、書き込む前に NF_SET_FILL を呼び出すことによってフィル値を持っている変数が前もって埋められてしまわないと確信できます。 これによってNetCDFの書き込み効率が著しく向上することもあります。

変数属性 _FillValue はある変数のフィル値を指定するためにも使えます。各型ごとに デフォルトのフィル値があり、インクルードファイル netcdf.inc の中で定義されています。 netcdf.inc : NF_FILL_CHAR , NF_FILL_INT1 ( NF_FILL_BYTEと同様 ), NF_FILL_INT2 ( NF_FILL_SHORTと同様 ), NF_FILL_INT , NF_FILL_REAL ( NF_FILL_FLOATと同様 ), および NF_FILL_DOUBLE .

NetCDFバイトと文字型は異なるデフォルトのフィル値を持ちます。文字用のデフォルトのフィル値は 零バイトであり、可変長のC 文字列の終わりを判別するのに役立ちます。バイト変数にフィル値が必要なときには、適した _FillValue 属性を定義することをお勧めします。それは、 ncdump 等の一般的なユーティリティではバイト変数に関してはデフォルトのフィル値を仮定しないからです。

フィル値の型変換は他の値の型変換と全く同様です。ある値をその値を表現できない別の型に変換しようとするとレンジエラーが生じます。 そのようなエラーは、大きな型(例えば倍精度型)から小さな型(例えば単精度型)へと読み書きする際に、大きい方のフィル値が小さい方の型では表現できない時に生じることがあります。


Up|<<Prev|Next>>