既に解決になっているのですが、インタプリタ的なことがしたいのであれば
以下のようにすることで文字列と内部変数を対応付けできます。
;変数管理モジュール
;
; [ 使い方 ]
;
; 変数を作成
; makevar _name, _val
;
; _name 変数名。いまのところ、全部の文字が使えます。
; _val(0) 初期値。いまのところ、int型の値しか代入できません。
;
; 戻り値 0 成功
; -1 引数が無効(変数名が空文字列である)
; -2 変数テーブルに空きがない
;
; 変数を削除
; delvar _name
;
; _name 変数名。
;
; 戻り値 なし
;
; 変数が定義されているかチェック
; isdef _name
;
; _name 変数名。
;
; 戻り値 1 定義されている
; 0 定義されていない
;
; 変数に値をセット
; setvar _name, _val
;
; _name 変数名。
; _val セットする値。int型の値しか代入できません。
;
; 戻り値 0 成功
; -1 変数が未定義
;
; 変数の値を取得
; getvar _name, _val
;
; _name 変数名。
; _val 変数の値を受け取るint型変数。
;
; 戻り値 0 成功
; -1 変数が未定義
;
; 変数の値を取得 (関数版)
; getvarf _name
;
; _name 変数名。
;
; 戻り値 変数の値
; 注) 変数が定義されていない場合、0が返ります。
;
#module varman
;変数テーブルのサイズ
#const TABLE_SIZE 1024
;_init_varman
#deffunc _init_varman
sdim varname_, 256, TABLE_SIZE
dim varval_ , TABLE_SIZE
cnt_ = 0
return
;makevar
#deffunc makevar str _name, int _val
if( _name == "" ) : return -1 ;無名変数は作成できない
id=-1
repeat TABLE_SIZE
if( varname_(cnt) == "" ){
id = cnt
;変数の登録
varname_(id) = _name
varval_(id) = _val
cnt_++
break
}
loop
if( id == -1 ) : return -2 ;テーブルに空きが無い
return 0
;delvar
#deffunc delvar str _name
repeat cnt_
if( varname_(cnt) == _name ){
varname_(id) = ""
cnt_--
break
}
loop
return
;isdef
#defcfunc isdef str _name
ret=0
repeat cnt_
if( varname_(cnt) == _name ) {
ret = 1
break
}
loop
return ret
;setvar
#deffunc setvar str _name, int _val
id=-1
repeat cnt_
if( varname_(cnt) == _name ){
id = cnt
varval_(id) = _val
break
}
loop
if( id == -1 ) : return -1 ;変数が見つからなかった
return 0
;getvar
#deffunc getvar str _name, var _val
id=-1
repeat cnt_
if( varname_(cnt) == _name ){
id = cnt
_val = varval_(id)
break
}
loop
if( id == -1 ) : return -1 ;変数が見つからなかった
return 0
;getvarf
#defcfunc getvarf str _name
ret=0
repeat cnt_
if( varname_(cnt) == _name ){
ret = varval_(cnt)
break
}
loop
return ret
#global
_init_varman ;モジュールを初期化
;使用例 )
makevar "hoge", 100 ;変数"hoge"を定義
makevar "piyo", 200 ;変数"piyo"を定義
mes "hoge + piyo = "+(getvarf("hoge") + getvarf("piyo")) ;hoge + fuga の値を表示
mes "fuga = "+getvarf("fuga") ;未定義の変数にアクセスすると"0"が返る
;makevar "fuga" ;コメントアウトを解除すると、下のメッセージ
;が「〜定義されています」になる
text = "変数\"fuga\"は定義されていま"
if( isdef("fuga") ){ ;変数"fuga"が定義されているかチェック
text += "す"
}else{
text += "せん"
}
mes text