Up|<<Prev|Next>>


4.3 名前が未知のNetCDF ファイルを読む場合

変数の名前を前もって知らなくてもその全ての変数を処理するようなプログラム(例えば総括的なソフトウェア)を作成することは可能です。同様に、次元や属性名も明らかではない場合もあります。

NetCDFのオブジェクトに関するほかの情報も”inquire”機能を使用して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が返されます

このinquire 機能は手頃で、I/Oを必要としません。それは、最初にNetCDFファイルを開いた時に、提供する情報がメモリ内に格納されるからです。

次元 IDは 0で始まる連続な整数を取り、一旦割り当てられると消去することは出来ません。また、次元も定義されたら消去することは出来ません。 ですから、NetCDFファイル中の次元IDの数を知るということは全ての時限IDを知ることと道義になります。それらは 0, 1, 2, ノ等の整数で次元の数だけ存在します。各次元IDに大しては、inquire機能への 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 へのコールすることになります。


Up|<<Prev|Next>>