8.4 属性値を取得する:nc_get_att_ type
nc_get_att_ typeのファミリーの関数は、変数IDと名前を与えるとNetCDF属性の値を返します。
用法
int nc_get_att_text (int ncid, int varid, const char *name,
char *tp);
int nc_get_att_uchar (int ncid, int varid, const char *name,
unsigned char *up);
int nc_get_att_schar (int ncid, int varid, const char *name,
signed char *cp);
int nc_get_att_short (int ncid, int varid, const char *name,
short *sp);
int nc_get_att_int (int ncid, int varid, const char *name,
int *ip);
int nc_get_att_long (int ncid, int varid, const char *name,
long *lp);
int nc_get_att_float (int ncid, int varid, const char *name,
float *fp);
int nc_get_att_double (int ncid, int varid, const char *name,
double *dp);
エラー
エラーが発生していなければ、nc_get_att_ typeはNC_NOERRの値を返します。それ以外の場合には、返されたステータスがエラーを示します。エラーの原因として次のようなものが考えられます。
・ 変数 IDが指定されたNetCDFファイルで無効である。
・ 指定された属性が存在しない。
・ 指定されたNetCDF IDがオープンされたNetCDFファイルを参照していない。
・ 属性値の一つまたはそれ以上が要求された型で表現し得る値の範囲から外れている。
例
この例ではnc_get_att_doubleを使って、既存のfoo.ncというNetCDFファイルにおいて、rhという名前のNetCDF変数の属性valid_rangeの属性値と、titleという名前のグローバル属性の値を調べます。この例では、いくつの値が返されるかは不明ですが、属性の型は既知であることを前提としています。従って、返された値を格納するスペースを十分に取るために、ます始めに属性の長さについて問い合わせます。
#include <netcdf.h>
…
int status; /* エラーステータス */
int ncid; /* NetCDF ID */
int rh_id; /* 変数 ID */
int vr_len, t_len; /* 属性長 */
double *vr_val; /* 属性値へptr */
char *title; /* 属性値へptr */
extern char *malloc(); /* メモリ配置 */
…
status = nc_open("foo.nc", NC_NOWRITE, &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_inq_attlen (ncid, rh_id, "valid_range", &vr_len);
if (status != NC_NOERR) handle_error(status);
status = nc_inq_attlen (ncid, NC_GLOBAL, "title", &t_len);
if (status != NC_NOERR) handle_error(status);
/* 値を取得する前に必要なスペースを配置 */
vr_val = (double *) malloc(vr_len * sizeof(double));
title = (char *) malloc(t_len + 1); /* + 1 trailing null用 */
/* 属性値を取得 */
status = nc_get_att_double(ncid, rh_id, "valid_range", vr_val);
if (status != NC_NOERR) handle_error(status);
status = nc_get_att_text(ncid, NC_GLOBAL, "title", title);
if (status != NC_NOERR) handle_error(status);
title[t_len] = '\0'; /* null terminate */
…
Quadralay Corporation http://www.webworks.com Voice: (512) 719-3399 Fax: (512) 719-3606 sales@webworks.com |