8.5 一つのNetCDFから他へ属性をコピーする: nc_copy_att
関数nc_copy_attはオープンされたNetCDFファイルから他のファイルへ属性をコピーします。また同じNetCDF内で、ある変数の属性を別の変数にコピーするときにも使えます。
用法
int nc_copy_att (int ncid_in, int varid_in, const char *name,
int ncid_out, int varid_out);
エラー
エラーが発生していなければ、nc_copy_attはNC_NOERRの値を返します。それ以外の場合には、返されたステータスがエラーを示します。エラーの原因として次のようなものが考えられます。
・ 入力または出力変数IDが指定されたNetCDFファイルで無効である。
・ 指定された属性が存在しない。
・ 出力NetCDFが定義モードになく、コピーされる属性が新しいか、または存在する属性より大きい。
・ 入力または出力NetCDF IDがオープンされたNetCDFファイルを参照していない。
例
この例では、nc_copy_attを使って、既存のfoo.ncというNetCDFファイルにおける変数rhから変数属性unitsをコピーして、他の既存のbar.ncというNetCDFファイルの変数avgrhに貼り付けます。変数avgrhは既に存在するが、属性unitsはまだ持っていないと仮定します。
#include <netcdf.h>
…
int status; /* エラーステータス */
int ncid1, ncid2; /* NetCDF ID */
int rh_id, avgrh_id; /* 変数IDs */
…
status = nc_open("foo.nc", NC_NOWRITE, ncid1);
if (status != NC_NOERR) handle_error(status);
status = nc_open("bar.nc", NC_WRITE, ncid2);
if (status != NC_NOERR) handle_error(status);
…
status = nc_inq_varid (ncid1, "rh", &rh_id);
if (status != NC_NOERR) handle_error(status);
status = nc_inq_varid (ncid2, "avgrh", &avgrh_id);
if (status != NC_NOERR) handle_error(status);
…
status = nc_redef(ncid2); /* 定義モードに入る */
if (status != NC_NOERR) handle_error(status);
/* 変数属性を "rh" からコピーして "avgrh"に貼り付ける */
status = nc_copy_att(ncid1, rh_id, "units", ncid2, avgrh_id);
if (status != NC_NOERR) handle_error(status);
…
status = nc_enddef(ncid2); /* 定義モードを抜ける */
if (status != NC_NOERR) handle_error(status);
Quadralay Corporation http://www.webworks.com Voice: (512) 719-3399 Fax: (512) 719-3606 sales@webworks.com |