Up|<<Prev|Next>>


8.4 属性値を取得する: NF_GET_ATT_ type

NF_GET_ATT_ type のファミリーの関数は、変数IDと名前を与えるとNetCDF属性の値を 返す。

 

INTEGER FUNCTION NF_GET_ATT_TEXT (INTEGER NCID, INTEGER VARID,

CHARACTER*(*) NAME,

CHARACTER*(*) text)

INTEGER FUNCTION NF_GET_ATT_INT1 (INTEGER NCID, INTEGER VARID,

CHARACTER*(*) NAME,

INTEGER*1 i1vals(*))

INTEGER FUNCTION NF_GET_ATT_INT2 (INTEGER NCID, INTEGER VARID,

CHARACTER*(*) NAME,

INTEGER*2 i2vals(*))

INTEGER FUNCTION NF_GET_ATT_INT (INTEGER NCID, INTEGER VARID,

CHARACTER*(*) NAME,

INTEGER ivals(*))

INTEGER FUNCTION NF_GET_ATT_REAL (INTEGER NCID, INTEGER VARID,

CHARACTER*(*) NAME,

REAL rvals(*))

INTEGER FUNCTION NF_GET_ATT_DOUBLE (INTEGER NCID, INTEGER VARID,

CHARACTER*(*) NAME,

DOUBLE dvals(*))

 

NCID

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

VARID

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

NAME

属性名。

text, i1vals,
i2vals, ivals,rvals, or dvals

返された 属性値。属性値のベクトルの要素は全て返されるので、十分なスペースを確保する必要があります。 どれだけのスペースを確保しておかなければならないか分からない時には、 まず NF_INQ_ATTLEN を呼び出して属性の 長さを調べましょう。数値変数から文字データを読み取ったり、テキスト変数から数値データを読み取ることは出来ません。 数値データの場合には、データの型がNetCDF変数の型と異なれば型変換が行われます。(詳細については、型変換を参照してください。)

 

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

 

この例は NF_GET_ATT_DOUBLE を使って、既存の foo.nc .という名前のNetCDFファイルの rh というNetCDF変数の属性 valid_range の値と、 title という名前のグローバル属性とについて調べる。この例では、幾つの値が返されるか不明であると仮定する。そこで、格納するスペースが十分であることを確認するために、 まず始めに属性の長さについて問い合わせる。

INCLUDE 'netcdf.inc'
   ... 
PARAMETER (MVRLEN=3)           ! "有効範囲"の値の最大数 
PARAMETER (MTLEN=80)           ! "title" 属性に最大長
INTEGER STATUS, NCID
INTEGER RHID                   ! 変数 ID
INTEGER VRLEN, TLEN            ! 属性長
DOUBLE PRECISION VRVAL(MVRLEN) ! vr 属性値
CHARACTER*80 TITLE             ! title 属性値
   ... 
STATUS = NF_OPEN ('foo.nc', NF_WRITE, 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)
! 大きすぎなければ、属性値を取得
IF (VRLEN .GT. MVRLEN) THEN
    WRITE (*,*) 'valid_range attribute too big!'
    CALL EXIT
ELSE
    STATUS = NF_GET_ATT_DOUBLE (NCID, RHID, 'valid_range', VRVAL)
    IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
ENDIF
IF (TLEN .GT. MTLEN) THEN
    WRITE (*,*) 'title attribute too big!'
    CALL EXIT
ELSE
    STATUS = NF_GET_ATT_TEXT (NCID, NF_GLOBAL, 'title', TITLE)
    IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
ENDIF

Up|<<Prev|Next>>