TOC PREV NEXT INDEX

Put your logo here!


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);
ncid 以前のnc_openまたはnc_create呼び出しで返されたNetCDF ID
varid 属性の変数の変数ID、またはグローバル属性の場合にはNC_GLOBAL
name 属性名
tp, up, cp, sp, ip, lp, fp, dp 返された属性の値の位置を示すポインタ。属性値のベクトルの要素がすべて返されるために、それらを格納するために十分なスペースを確保する必要があります。NC_CHAR型の属性では、これがnull文字を含むと仮定しないこと。属性が元々null文字無しに格納されている場合には含まれません。FORTRANプログラムなどの場合がこれに相当します。Cの記号列としてこの値を使用する前に、終端が零であること(null-terminated)を確認してください。どれだけのスペースを確保しておかなければならないか分からない時には、まずnc_inq_attlenを呼び出して属性の長さを調べましょう。

エラー

エラーが発生していなければ、nc_get_att_ typeNC_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
TOC PREV NEXT INDEX