4.3 名前が未知のNetCDFファイルを読む場合
変数の名前を前もって知らなくてもそのすべての変数を処理するようなプログラム(例えば総括的なソフトウェア)を作成することは可能です。同様に、次元や属性名も明らかではない場合もあります。
NetCDFのオブジェクトに関する他の情報も問い合わせ関数を使用してNetCDFファイルから得られます。この関数は全NetCDFファイル・次元・変数・属性等の情報を返します。下記のテンプレートはそれらの使用法を示しています:
nc_open /* 既存のNetCDFファイルをオープンする */
…
nc_inq /* 内容を調べる */
…
nc_inq_dim /* 次元名と次元長を得る */
…
nc_inq_var /* 変数名・型・形状を得る */
…
nc_inq_attname /* 属性名を得る */
…
nc_inq_att /* 属性型と属性長を得る */
…
nc_get_att /* 属性値を得る */
…
nc_get_var /* 変数の値を得る */
…
nc_close /* NetCDFファイルをクローズする */
上記の例のようにコール一つで既存のNetCDFファイルがオープンし、NetCDF IDを返します。このNetCDF IDはnc_inqルーチンに送られ、その操作によって次元数・変数の数・グローバル属性の数・そして存在すれば無制限次元のIDが返されます。
この問い合わせ関数は手頃で、I/Oを必要としません。それは、最初にNetCDFファイルを開いた時に、提供する情報がメモリ内に格納されるからです。
次元IDは0で始まる連続な整数を取り、一度割り当てられると消去することはできません。また、次元も定義されたら消去することはできません。ですから、NetCDFファイル中の次元IDの数を知るということはすべての次元IDを知ることと同義になります。それらは0, 1, 2, …等の整数で次元の数だけ存在します。各次元IDに対しては、問い合わせ関数へのnc_inq_dimで次元名と次元長が返されます。
変数IDもまた連続した整数0, 1, 2, …で表され、変数の数だけ存在します。変数IDはnc_inq_varコールを使用して各変数に割り当てられた名前、型、形状および属性数を知ることができます。
一度ある変数の属性値が既知になると、nc_inq_attnameコールによって任意の変数に割り当てられたNetCDF ID・変数ID・属性数を知ることができます。属性名が分かると、nc_inq_attコールで属性型と属性長が分かります。型と長さから、属性値を格納するために十分なスペースを確保しておくことができます。次に、nc_get_attファミリーのメンバーへ呼び出すことにより変数値が返されます。
一度NetCDF変数のIDと形状が既知になると、データの値は単一の値の場合はnc_get_var1ファミリーへの一員へのコール、そして複数の場合には、nc_get_var, nc_get_vara, nc_get_varsまたは様々な種類の配列アクセス法に関してはnc_get_varmへの呼び出すことになります。
Quadralay Corporation http://www.webworks.com Voice: (512) 719-3399 Fax: (512) 719-3606 sales@webworks.com |