Up|<<Prev|Next>>


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);

 

ncid_in

以前の nc_open 又は nc_create 呼び出しで返された、属性のコピー元となる入力NetCDF ファイルのNetCDF ID。

varid_in

属性のコピー元となる、入力NetCDFファイルの変数ID 、又はグローバル属性の 場合には NC_GLOBAL

name

コピーされる入力 NetCDF ファイルの属性名。

ncid_out

属性のコピー先となる、出力 NetCDF ファイルの NetCDF ID 。以前の nc_open 又は nc_create 呼び出しから。入力と出力NetCDF IDが同じでも構わない。 コピーされる属性が出力NetCDF ファイル内にまだ存在しない場合、又は既存のコピー先の属性が大きくなる場合には、出力NetCDF ファイルは定義モードにしておく必要がある。

varid_out

属性のコピー先の出力NetCDF ファイルの変数ID 、又はグローバル属性をコピーする場合には NC_GLOBAL

 

エラーが発生していなければ、 nc_copy_att NC_NOERR の値を返します。 それ以外の場合には、返された状態がエラーを示します。エラーの原因として次のようなものが考えられます。

 

この例では、 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);

Up|<<Prev|Next>>