| Path: | abst_netcdf/anvarattr.f90 |
| Last Update: | Fri Mar 20 18:09:53 +0900 2009 |
Copyright (C) GFD Dennou Club, 2000. All rights reserved. — 属性の列挙 — ある変数 var に付随した属性をすべて取得するにはまず attr_rewind(var) を呼び出してから無限ループの中で attr_next(var, name, [end]) を呼び出す。name がひとつ ひとつの属性名を与える。name が空文字列になったとき、 すべての属性を探索し終えたことになる。このとき end を 与えていればそれが真になることでも判定できる。 大域属性は、その名前の先頭に "+" が付加された普通の変数属性で あるかのように見える。
| Subroutine : | |
| var : | type(AN_VARIABLE), intent(in) |
| name : | character(len = *), intent(out) |
| end : | logical, intent(out), optional |
subroutine ANVarAttrNext(var, name, end)
use an_types, only: AN_VARIABLE, an_variable_entry
use an_vartable, only: vtable_set_attrid, vtable_lookup
use netcdf_f77
use dc_url, only: GT_PLUS
implicit none
type(AN_VARIABLE), intent(in):: var
character(len = *), intent(out):: name
type(an_variable_entry):: ent
logical, intent(out), optional:: end
character(len = NF_MAX_NAME):: attrname
integer:: stat
integer:: new_attrid
stat = vtable_lookup(var, ent)
if (stat /= NF_NOERR) goto 999
new_attrid = ent%attrid
! 最初は変数属性の検索
if (ent%attrid >= 0) then
new_attrid = ent%attrid + 1
stat = NF_INQ_ATTNAME(ent%fileid, ent%varid, new_attrid, attrname)
if (stat == NF_NOERR) then
name = attrname
stat = vtable_set_attrid(var, new_attrid)
end = .FALSE.
return
endif
new_attrid = -1
endif
! 次は大域属性の検索
stat = NF_INQ_ATTNAME(ent%fileid, NF_GLOBAL, -new_attrid, attrname)
if (stat == NF_NOERR) then
new_attrid = new_attrid - 1
name = GT_PLUS // attrname
stat = vtable_set_attrid(var, new_attrid)
end = .FALSE.
return
endif
999 continue
! ここでは attrid の再設定はしない。次呼んでもエラーになるのが適当。
end = .TRUE.
name = ""
return
end subroutine
| Subroutine : | |
| var : | type(AN_VARIABLE), intent(in) |
subroutine ANVarAttrRewind(var)
use an_types, only: AN_VARIABLE, an_variable_entry
use an_vartable, only: vtable_set_attrid
use netcdf_f77, only: NF_NOERR
use dc_trace, only: DbgMessage
implicit none
type(AN_VARIABLE), intent(in):: var
integer:: stat
stat = vtable_set_attrid(var, 0)
call DbgMessage("anvarattrrewind %d", i=(/stat/))
end subroutine