Up|<<Prev|Next>>


4.4 新たに次元・変数・属性を加える

既存の NetCDFファイルはかなりの変更を加えることが出来ます。すでに存在している次元・変数・属性などに新たに加えたり、名前を変更することも可能ですし、既存の属性は抹消することが出来ます。 次のコードのテンプレートは既存のファイルに新しい要素を加えるための極一般的な例です。

    nc_open             /* 既存のNetCDFファイルを開く */
      ... 
    nc_redef            /* 定義モードに入る */
        ... 
      nc_def_dim        /* (あれば)新しい次元を定義し、加える。 */
        ... 
      nc_def_var        /* (あれば)新しい変数を定義し、加える。 */
        ... 
      nc_put_att     
   /* (あれば)新しい属性を定義し、加える。 */
        ... 
    nc_enddef           /* 定義をチェックし、定義モードから出る。 */
        ... 
      nc_put_var        /* 新しい変数に値を与える。 */
        ... 
    nc_close            /* NetCDFファイルを閉じる。 */

NetCDF ファイルは、まず、 nc_open コールによって開きます。このコールによって、開かれたファイルはデータモードに入ります。このモードではきぞんんおデータ値にアクセスしたり変更を加えたりすることが出来ます。また、属性値も(大きくならない限りにおいては)変更できます。ただし、このモードでは何もたすことは出来ません。新しいNetCDF次元・変数・属性を加えるには nc_redef . コールによってテイギモードに入らなければなりません。定義モードでは、新しい次元を定義するためには nc_def_dim コールを、新しい変数を加えるには nc_def_var コールを、そして古い変数や増大してしまった古い属性に新しい属性を与えるには nc_put_att ファミリーへコールします。

定義モードから出て、再びデータモードに入ることも出来ます。そこで、新しい定義に矛盾が無いか等をチェックし、ディスクに保存するには nc_enddef コールをしてください。データモードに戻りたくなければ、単に nc_close コールをしてください。これは、最初に nc_enddef コールをしたことと同義になります。

NcN_enddef コールがなされる前であれば、 nc_abort. コールによって、定義モードで行なった全ての再定義を無効にしてNetCDFライブラリを元の状態に戻せます。 また、この nc_abort コールを使って、 nc_enddef コールが失敗した場合にNetCDFファイルを矛盾の無い状態まで復帰させることが出来ます。定義モードから nc_close コールをしたら自動的に追従する nc_enddef へのコールが失敗した際には、 nc_abort コールが自動的に呼び出され、NetCDFライブラリは閉じられ、元の矛盾の無い状態(定義モードに入る前の状態)に戻ります。

一つのプロセスは書き込み用に一時に最大一個のNetCDFファイルを開いていなければなりません。ライブラリは、統制の取れた nc_sync 機能の利用と NC_SHARE 旗を立てることによって同時に複数の読者に扱われることに大してのすポートに制限を設けています。もし、書き込むほうが定義モードに変更を加えれば(例:新しい変数、次元、属性)、 そのライブラリに対して読者が同時にアクセスすることを防ぐ制約を外部から加える必要があり、また、読者に対して次回のアクセスの前にnc_sync を呼び出すように注意を促す必要が出てきます。


Up|<<Prev|Next>>