関数 nc_put_att_ type は、開かれたNetCDFファイルの変数属性又はグローバル属性を追加・変更する。新規の属性、又は属性を格納するために必要なスペースが前より大きくなる場合には、NetCDFファイルは 定義モードでなくてはなりません。
どんな型の属性も生成可能ですが、ほとんどの用途にはテキストやダブル属性で十分です。
int nc_put_att_text (int ncid, int varid, const char *name,
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);
属性名。アルファベット文字で始り、アンダースコア ( `_' )を含む零又は英数字が続きます。大文字小文字は区別されます。属性名の慣習は幾つかのNetCDFの一般的なアプリケーション で仮定されています。例えば、 units はNetCDF変数に単位を与える文字列属性の名前です。属性の慣習の例については、 属性の慣習を参照してください。 |
|
前もって定義されている NetCDF 外部データ型のひとつ。このパラメーターの型 nc_type はNetCDFヘッダーファイルにおいて定義されています。 有効なNetCDF外部データ型は NC_BYTE 、 NC_CHAR 、 NC_SHORT 、 NC_INT 、 NC_FLOAT 、 NC_DOUBLE 等です。どんな型の属性も生成できますが、ほとんどの用途には NC_CHAR と NC_DOUBLE の属性で十分です。 |
|
一つ又は複数の値へのポインタ。値の型が 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);