本ページには広告が含まれています。
文字列を評価(evaluate)し値を返します。式や文を文字列として受け取り、実行するための関数です。
- 構文
- void = EVAL( 文字列 )
- 引数
- 文字列 (String)必須
- 評価(実行)する文字列
- 戻り値
- 結果得られた値を返す
A = Bは比較演算として処理、代入式の場合はA := Bとする
使い方
比較演算
文字列で与えられた式を評価し結果をブール値で返します。
以下はaに1を代入し、EVAL関数で比較を行い結果をブール値で返します。
使える比較演算子は<=、<、>=、>、=、<>です。詳細は演算子の優先順位(比較演算子)を参照。
DIM a = 1
PRINT EVAL("a=1") // 等しい
PRINT EVAL("a<=1") // 以下
PRINT EVAL("a<1") // より小さい
PRINT EVAL("a>=1") // 以上
PRINT EVAL("a>1") // より大きい
PRINT EVAL("a<>1") // 等しくない
- 結果
True True False True False False
複数の条件を書く場合、論理演算子を使うことで記述できます。詳細は演算子の優先順位(論理演算子)を参照。
論理演算子を使用したときの戻り値はDouble型です。
DIM a = 1
DIM b = 2
PRINT EVAL("a=1 AND b=2")
PRINT EVAL("a=1 OR b=2")
PRINT EVAL("a=1 XOR b=2")
- 結果
1 1 0
論理演算子を使うとEVAL関数の戻り型がDouble型になります。True、Falseの判定をするには問題ありませんが、ブール型で取得したい場合は、VARTYPE関数で変換します。
DIM a = 1
DIM b = 2
PRINT VARTYPE(EVAL("a=1 AND b=2"), VAR_BOOLEAN)
PRINT VARTYPE(EVAL("a=1 OR b=2"), VAR_BOOLEAN)
PRINT VARTYPE(EVAL("a=1 XOR b=2"), VAR_BOOLEAN)
- 結果
True True False
代入演算
変数に値を代入するには:=を使います。変数はEVAL関数よりも前に宣言しておく必要があります。
DIM a
EVAL("a:=1")
PRINT a
- 結果
1
EVAL関数を使うと予約語や定数にも代入できてしまうので注意が必要です。
以下は予約語であるTRUEにFALSEを代入します。
PRINT TRUE
EVAL("TRUE:=FALSE")
PRINT TRUE
- 結果
True False
以下はpiに円周率の値を定数として宣言した後、EVAL関数で書き換えてます。
CONST pi = ARCCOS(0) * 2
PRINT pi
EVAL("pi:=3")
PRINT pi
- 結果
3.14159265358979 3
プログラム実行例
入力された文字列の計算をする
HASHTBL variable
DIM array[-1]
DIM res = EMPTY
WHILE TRUE
DIM %val% = ""
FOR i = 0 TO LENGTH(variable) - 1
%val% = %val% + variable[i, HASH_KEY] + "=" + variable[i, HASH_VAL] + " "
NEXT
DIM str = INPUT("計算式を入力してください。<#CR><#CR>変数<#TAB>" + %val% + "<#CR>結果<#TAB>" + res)
IFB POS("=", str) THEN
DIM arr = SPLIT(str, "=")
TRY
variable[arr[0]] = EVAL(arr[1])
EXCEPT
FUKIDASI(TRY_ERRMSG)
CONTINUE
ENDTRY
ENDIF
FUKIDASI()
res = EVAL(REPLACE(str, "=", ":="))
IF res = EMPTY THEN BREAK
WEND
結果
INPUT:10>a=2
INPUT:10>b=3
INPUT:10>a*b
6
使用関数
算数の演算記号を含む数式を計算
算数の演算記号(+、−、✕、÷)を含む数式を、コンピュータが理解できるように変換して計算します。
加算と減算は半角文字に変換すればそのまま計算できますが、乗算は✕を*、除算は÷を/に変換してから[createLink url="/script/function/eval/"]を使って計算します。
DIM formula = "12 + 45 ÷ 3"
formula = STRCONV(formula, SC_HALFWIDTH)
formula = REPLACE(formula, "✕", "*")
formula = REPLACE(formula, "÷", "/")
PRINT EVAL(formula)
結果
27
使用関数
CLKITEMで操作できる項目を取得
PUBLIC flg = FALSE
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
SETHOTKEY(VK_X, MOD_ALT, "flag")
DIM array[] = "BTN", "LIST", "TAB", "MENU", "TREEVIEW", + _
"LISTVIEW", "EDIT", "STATIC", "STATUSBAR", "TOOLBAR", + _
"LINK", "ACCCLK", "ACCCLK2", "ACCTXT", "ACCEDIT", + _
"FROMLAST", "BACK"
REPEAT
FUKIDASI("Alt + Xでカーソル下の情報を取得")
SLEEP(0.001)
UNTIL flg
FUKIDASI("取得中")
DIM ID = GETID(GET_FROMPOINT_WIN)
PRINT "DIM ID = GETID(<#DBL>" + STATUS(ID, ST_TITLE) + "<#DBL>, <#DBL>" + STATUS(ID, ST_CLASS) + "<#DBL>)"
PRINT
FOR item IN array
PRINT "// [" + item + "]"
FOR class IN GETITEM(ID, EVAL("ITM_" + item), -1)
PRINT "CLKITEM(ID, <#DBL>" + class + "<#DBL>, CLK_" + item + ")"
NEXT
PRINT
NEXT
PROCEDURE forceQuit()
EXITEXIT
FEND
PROCEDURE flag()
flg = TRUE
FEND
使用関数
解説