EVALイーバル関数

本ページには広告が含まれています。

文字列を評価(evaluate)し値を返します。式や文を文字列として受け取り、実行するための関数です。

構文
  1. void = EVAL( 文字列 )
引数
文字列 (String)必須
評価(実行)する文字列
戻り値
結果得られた値を返す

A = Bは比較演算として処理、代入式の場合はA := Bとする

使い方

比較演算

文字列で与えられた式を評価し結果をブール値で返します。

以下はa1を代入し、EVAL関数で比較を行い結果をブール値で返します。

使える比較演算子は<=<>=>=<>です。詳細は演算子の優先順位(比較演算子)を参照。

UWSC
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型です。

UWSC
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型になります。TrueFalseの判定をするには問題ありませんが、ブール型で取得したい場合は、VARTYPE関数で変換します。

UWSC
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関数よりも前に宣言しておく必要があります。

UWSC
DIM a
EVAL("a:=1")
PRINT a
結果
プレーンテキスト
1

EVAL関数を使うと予約語定数にも代入できてしまうので注意が必要です。

以下は予約語であるTRUEFALSEを代入します。

UWSC
PRINT TRUE
EVAL("TRUE:=FALSE")
PRINT TRUE
結果
プレーンテキスト
True
False

以下はpiに円周率の値を定数として宣言した後、EVAL関数で書き換えてます。

UWSC
CONST pi = ARCCOS(0) * 2

PRINT pi
EVAL("pi:=3")
PRINT pi
結果
プレーンテキスト
3.14159265358979
3

プログラム実行例

入力された文字列の計算をする

UWSC
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/"]を使って計算します。

UWSC
DIM formula = "12 + 45 ÷ 3"
formula = STRCONV(formula, SC_HALFWIDTH)
formula = REPLACE(formula, "✕", "*")
formula = REPLACE(formula, "÷", "/")

PRINT EVAL(formula)
結果
プレーンテキスト
27

CLKITEMで操作できる項目を取得

UWSC
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
解説