Up|<<Prev|Next>>


8.3 属性に関する情報を取得する: nc_inq_att の一族

この関数の一族はNetCDF属性に関する 情報を返します。これらの関数は一つを除いて全て変数IDと属性名を必要とします。例外は nc_inq_attname 関数です。属性に関する情報には型・長さ・名前・番号などが含まれます。属性値を取得する方法については nc_get_att の節を参照してください。

関数 nc_inq_attname は変数IDと番号を与えると、属性の名前を返します。この関数は、他の全ての属性関数において属性は番号ではなく名前によってアクセスされるために、変数に関連した属性の名前を全て必要とする 一般的なアプリケーションにおいて役に立ちます。属性の番号は名前よりも 揮発性があり、同じ変数の属性が 削除された時に変わることがあります。このため、 属性の番号は 属性 IDとは呼ばれません。

関数 nc_inq_att は属性の型と長さを返します。他の関数は各々、属性の情報を一つだけ返します。

 

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

nc_type *xtypep, size_t *lenp);

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

nc_type *xtypep);

int nc_inq_attlen (int ncid, int varid, const char *name, size_t *lenp);

int nc_inq_attname(int ncid, int varid, int attnum, char *name);

int nc_inq_attid (int ncid, int varid, const char *name, int *attnump);

 

ncid

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

varid

属性の変数の変数 ID 、又はグローバル属性の場合には NC_GLOBAL

name

属性名。 nc_inq_attname の場合、これは返された属性名の位置を示すポインタです。

xtypep

返された属性型の位置を示すポインタ。前もって定義されたNetCDF外部データ型の集合の一つ。このパラメーターの型 nc_type はNetCDFヘッダーファイル内で定義されています。有効なNetCDF外部データ型は NC_BYTE NC_CHAR NC_SHORT NC_INT NC_FLOAT NC_DOUBLE です。このパラメータが `0' (nullポインタ)で与えらえていると、型は返されないので、その型を保持する変数を宣言する必要がありません。

lenp

現在属性に格納されている値の数が返された位置を示すポインタ。 NC_CHAR 型の属性では、 これがtrailing零バイトを含むと仮定しないこと。属性が元々trailing零バイト無しに格納されている場合には含まれません。FORTRANプログラムなどの場合がこれに相当します。C の記号列としてこの値を使用する前に、終端がnullコードであること(null-terminated) を確認してください。このパラメータが `0' (nullポインタ)で与えられている場合には長さは返されないので、この情報を保持する変数を宣言する必要がありません。

attnum

nc_inq_attname に対する属性番号。各変数の 属性は0(最初の属性)から natts-1 までの番号が振られています。( natts はその変数の属性の数で、 nc_inq_varnatts への呼び出しで返されます。)

attnump

nc_inq_attidに対する返された属性番号の位置を示すポインタ。この変数(又はグローバル属性)のどの属性であるかを示す。属性の情報を取得するためには属性の名前が必要であるので、属性の名前が既知であれば、この番号はあまり役に立ちません。

 

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

 

この例では、 nc_inq_att を使って、既存の foo.nc という名前のNetCDFファイルにおいて、 rh という名前のNetCDF変数の属性 valid_range の型と長さと、 title という名前のグローバル属性とを調べる。

#include <netcdf.h>
   ... 
int  status;               /* エラーステータス */
int  ncid;                 /* NetCDF ID */
int  rh_id;                /* 変数 ID */
nc_type vr_type, t_type;   /* 属性型 */
int  vr_len, t_len;        /* 属性長 */
 
   ... 
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_att (ncid, rh_id, "valid_range", &vr_type, &vr_len);
if (status != NC_NOERR) handle_error(status);
status = nc_inq_att (ncid, NC_GLOBAL, "title", &t_type, &t_len);
if (status != NC_NOERR) handle_error(status);

Up|<<Prev|Next>>