FAQ
FAMOS
シーケンス / 関数top
└シーケンス / 関数
ID.s015
Q. 変数がグループ変数かどうか調べる
A.
変数リスト内の変数がグループ変数かどうか調べる方法を紹介します。
変数リストを見ればその変数がグループ変数かどうかは一目瞭然です。

しかし、シーケンスから変数を参照しているときにはどうでしょうか?
次のサンプルコードは変数リストの変数を取り出すコードです。
ListTotalNumber = VarGetInit(0)
While cnt<=ListTotalNumber
DataName = VarGetName?(cnt)
ret = BoxMessage("",DataName,"!1")
cnt=cnt+1
End
このコードを実行させると以下のように変数リストの変数名を表示できます。しかし、この変数がグループ変数なのかどうかはわかりません。

例えば、この変数がグループ変数でその中に”Ch1”という変数が格納されていた場合、以下のようにアクセスする必要があります。
GroupData:Ch1
しかし、この変数がもしグループ変数でなければこのような表現はエラーとなってしまいます。このようにシーケンスで変数を扱う場合にはグループ変数かどうかを調べないといけません。
グループ変数かどうかは関数”GrChanNum?”を使用すればわかります。
本来、グループ変数内のチャンネル数を求める関数ですが、指定した変数がグループ変数でなければエラー値が返ります。このエラーで判定すればグループ変数かどうか判断できます。
以下にサンプルコードを示します。サンプルでは上の例のようにメッセージボックスで変数名を表示させると大変なのでファイルに出力しています。
;********************************************************************
;
変数リスト内の変数名をファイルに書き出す
;
*********************************************************************
FileID = FileOpenASCII( "c:\test.txt",1)
cnt=1
;リスト内の変数の総数を取得
ListTotalNumber = VarGetInit(0)
While cnt<=ListTotalNumber
DataName = VarGetName?(cnt)
GrVarNum = GrChanNum?( <DataName>)
if GrVarNum<>-1
;データがグループ変数の場合
gcnt=1
While gcnt<=GrVarNum
;グループ内の変数名を取得
GrVarName = GrChanName?( <DataName>, gcnt)
TEXT = TAdd( DataName, ":")
TEXT = TAdd( TEXT, GrVarName)
Ferr = FileLineWrite( FileID, TEXT, 0)
gcnt=gcnt+1
End
Else
;通常の変数の場合、そのまま出力
TEXT = DataName
Ferr = FileLineWrite( FileID, TEXT, 0)
End
cnt=cnt+1
End
Ferr = FileClose(FileID)