use gtool_attributetype(GT_VARIABLE):: var character(len = *):: name
logical function AttributeExists(var, name) integer function AttributeType(var, name) integer function AttributeLen(var, name) call DeleteAttribute(var, name)
! value は数値型の配列またはスカラ、文字型、
! あるいは可変長文字列型 call PutAttribute(var, name, value)
! value は数値型の配列ポインタまたはスカラ、文字型、
! あるいは可変長文字列型 call GetAttribute(var, name, value)
gtool 変数には属性といわれる名前と値の組を付けることができます。 NetCDF では大域属性といってファイルにも属性をつけることができますが、 gtool では大域属性を積極的に活用するわけではないので 明示的なインターフェイスは用意されません。
以下に紹介するインターフェイスは整備中です。未整備な点については 旧インターフェイスまたは内部インターフェイス netcdf_attribute(3f) を利用してください。
属性の有無は AttributeExists() で調査できます。 属性の型および長さは AttributeType() および AttributeLen() で調べられるようになっていますが、将来は自動型変換のため調査の必要は ほとんどなくなるでしょう。 属性は書き込み PutAttribute() によって作成されます。 書き込み効率を上げるためには、 すべてのデータの書き込みの前に属性を作成してください。 GetAttribute で属性を読み取ることができます。 属性が不要な場合は DeleteAttribute で削除してください。
通常は gtool モジュールまたは gtool_data モジュールを呼び出すべきです。
use gtool_attributetype(GT_ATTRIBUTE):: attr type(GT_FILE):: file character(len = *):: name logical:: fail
! 作成 attr = Attribute(var, name) attr = Attribute(file, name) ! 廃棄 call Dispose(attr)
! 利用・検査 logical operator .exists. attr logical operator .error. attr call Rename(attr, name, [fail]) call Delete(attr, [fail]) integer function Len(attr) integer function Type(attr)
! 入出力 character(len = *):: chars type(VARYING_STRING):: string integer:: int_array(任意) real:: real, real_array(任意)
! 属性の書き込み attr = chars attr = string attr = int_array attr = real_array attr = real
! 属性の読み取り string = attr int_array = attr real_array = attr real = attr
GT_ATTRIBUTE 構造型は gtool 変数の属性 (具体的には netCDF 属性) の抽象化です。
Type(GT_ATTRIBUTE) 型 (以下では属性型と呼びます) の値は Attribute 関数によって構成されます。 ファイルと変数を引数とすることができて、 それぞれ大域属性と変数属性を指示する属性型の値を構成します。 属性型を構成しただけで変数に属性が生成されるわけではありません。 不正な引数で構成された場合は .error. 演算子が真となります。 属性が存在するかどうかは .exists. 演算子によって検査できます。
構成された属性型値は Dispose または Delete サブルーチンで廃棄することを推奨します。
Delete サブルーチンは存在する属性を削除します。
Rename サブルーチンは属性の名称を変更します。
Type 関数は属性の外部表現型を返します。 Len 関数は属性の長さを返します。
属性の読み書きは代入演算によって行います。