Up|<<Prev|Next>>


8.2 属性を生成する: nc_put_att_ type

関数 nc_put_att_ type は、開かれたNetCDFファイルの変数属性又はグローバル属性を追加・変更する。新規の属性、又は属性を格納するために必要なスペースが前より大きくなる場合には、NetCDFファイルは 定義モードでなくてはなりません。

 

どんな型の属性も生成可能ですが、ほとんどの用途にはテキストやダブル属性で十分です。

int nc_put_att_text (int ncid, int varid, const char *name,

size_t len, const char *tp);

int nc_put_att_uchar (int ncid, int varid, const char *name,

nc_type xtype, size_t len, const unsigned char *up);

int nc_put_att_schar (int ncid, int varid, const char *name,

nc_type xtype, size_t len, const signed char *cp);

int nc_put_att_short (int ncid, int varid, const char *name,

nc_type xtype, size_t len, const short *sp);

int nc_put_att_int (int ncid, int varid, const char *name,

nc_type xtype, size_t len, const int *ip);

int nc_put_att_long (int ncid, int varid, const char *name,

nc_type xtype, size_t len, const long *lp);

int nc_put_att_float (int ncid, int varid, const char *name,

nc_type xtype, size_t len, const float *fp);

int nc_put_att_double (int ncid, int varid, const char *name,

nc_type xtype, size_t len, const double *dp);

 

ncid

以前の nc_open 又は nc_create 呼び出しで返されたNetCDF ID。

varid

属性が割り当てられる変数の変数ID、又はグローバル属性の場合には NC_GLOBAL

name

属性名。アルファベット文字で始り、アンダースコア ( `_' )を含む零又は英数字が続きます。大文字小文字は区別されます。属性名の慣習は幾つかのNetCDFの一般的なアプリケーション で仮定されています。例えば、 units はNetCDF変数に単位を与える文字列属性の名前です。属性の慣習の例については、 属性の慣習を参照してください。

xtype

前もって定義されている NetCDF 外部データ型のひとつ。このパラメーターの型 nc_type はNetCDFヘッダーファイルにおいて定義されています。 有効なNetCDF外部データ型は NC_BYTE NC_CHAR NC_SHORT NC_INT NC_FLOAT NC_DOUBLE 等です。どんな型の属性も生成できますが、ほとんどの用途には NC_CHAR NC_DOUBLE の属性で十分です。

len

属性に与えられた 値の数。

tp, up, cp, sp, ip, lp, fp, or dp

一つ又は複数の値へのポインタ。値の型が xtype と指定されたNetCDF属性の型と異なる場合には、タイプ変換が行なわれます。詳細については、 タイプ変換を参照してください。

 

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

 

この例では、 nc_put_att_double を使って、既存の foo.nc という名前のNetCDFファイルにおいて、 rh という名前のNetCDF変数に対して valid_range という属性、及び、 title という名前のグローバル属性を追加している。

#include <netcdf.h>
   ... 
int  status;                            /* エラーステータス */
int  ncid;                              /* NetCDF ID */
int  rh_id;                             /* 変数 ID */
static double rh_range[] = {0.0, 100.0};/* 属性値  */
static char title[] = "example NetCDF dataset";
   ... 
status = nc_open("foo.nc", NC_WRITE, &ncid);
if (status != NC_NOERR) handle_error(status);
   ... 
status = nc_redef(ncid);                /* 定義モードに入る */
if (status != NC_NOERR) handle_error(status);
status = nc_inq_varid (ncid, "rh", &rh_id);
if (status != NC_NOERR) handle_error(status);
   ... 
status = nc_put_att_double (ncid, rh_id, "valid_range", 
                            NC_DOUBLE, 2, rh_range);
if (status != NC_NOERR) handle_error(status);
status = nc_put_att_text (ncid, NC_GLOBAL, "title",
                          NC_CHAR, strlen(title), title)
if (status != NC_NOERR) handle_error(status);
   ... 
status = nc_enddef(ncid);               /* 定義モードを出る */
if (status != NC_NOERR) handle_error(status);

Up|<<Prev|Next>>