Up|<<Prev|Next>>


8.3 属性に関する情報を取得する: NF_INQ_ATT のファミリー

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

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

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

 

INTEGER FUNCTION NF_INQ_ATT (INTEGER NCID, INTEGER VARID,

CHARACTER*(*) NAME, INTEGER xtype,

INTEGER len)

INTEGER FUNCTION NF_INQ_ATTTYPE(INTEGER NCID, INTEGER VARID,

CHARACTER*(*) NAME, INTEGER xtype)

INTEGER FUNCTION NF_INQ_ATTLEN (INTEGER NCID, INTEGER VARID,

CHARACTER*(*) NAME, INTEGER len)

INTEGER FUNCTION NF_INQ_ATTNAME(INTEGER NCID, INTEGER VARID,

INTEGER ATTNUM, CHARACTER*(*) name)

INTEGER FUNCTION NF_INQ_ATTID (INTEGER NCID, INTEGER VARID,

CHARACTER*(*) NAME, INTEGER attnum)

 

NCID

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

VARID

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

NAME

属性の名前。 NF_INQ_ATTNAME の場合を除いて、ここに属性名が返される。

xtype

返された 属性の型。前もって定義されたNetCDF外部データ型の集合の一つ。有効なNetCDF外部データ型は NF_BYTE NF_CHAR NF_SHORT NF_INT NF_FLOAT NF_DOUBLE である。

len

現在属性に格納されている値の数。記号列の値を持つ属性では、これは記号列に含まれる文字数です。

attnum

NF_INQ_ATTNAME に対しては 入力された属性番号。 NF_INQ_ATTID に対しては、返された属性番号。各変数の 属性は1(最初の属性)から NATTS までの番号が振られています。( NATTS はその変数の属性の数で、 NF_INQ_VARNATTS への呼び出しで返されます。) 属性の情報を取得するためには属性の名前が必要であるので、属性の名前が既知であれば、この番号はあまり役に立ちません。

 

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

 

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

INCLUDE 'netcdf.inc'
   ... 
INTEGER STATUS, NCID
INTEGER RHID               ! 変数 ID
INTEGER VRLEN, TLEN        ! 属性の長さ
   ... 
STATUS = NF_OPEN ('foo.nc', NF_NOWRITE, NCID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
   ... 
STATUS = NF_INQ_VARID (NCID, 'rh', RHID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
   ... 
STATUS = NF_INQ_ATTLEN (NCID, RHID, 'valid_range', VRLEN)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_INQ_ATTLEN (NCID, NF_GLOBAL, 'title', TLEN)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)

Up|<<Prev|Next>>