表达式的概念和用法详解

此教程适用产品: 自动操作魔法师和全能鼠标键盘器

此教程适用版本: 3.0以上版本

关键字:魔法 制作 变量 数据

简述

本文属于基础入门指南,主要针对初次使用自动操作魔法师的用户。通过此文用户可以掌握如何在自动操作魔法师中使用表达式进行计算或是处理数据。

变达式是什么,做什么用的?

同其它软件一样,变达式在本软件中也是用来做运算或是处理数据的。表达式在很多场合下都是必须的,没有表达式将无法完成复杂的任务。我们可以使用表达式做四则混合运算,追加或是删除文本中的字符,计算一个逻辑表达式。自定义或是内置函数也可以在表达式中使用,完成一些复杂操作。

我们看下面的一个实际的应用例子:

任务简述:点击屏幕上的一个图片左边100像素的地方,但这个图片位置不固定。

任务分析:由于位置不固定,所以肯定不能直接写固定值来点击,且还要点击图片左边100像素的地方,也就是得到位置还不够,还需要运算,这里就必须使用表达式算出最终的坐标。

任务制作:使用系统类“屏幕搜图”来查找图片位置,并返回图片的位置到变量,比如: v_x, v_y。然后紧跟一条鼠标点击命令,命令中的X选项,使用表达式 %=v_x-100%,Y选项使用 %v_y%。

在魔法脚本中使用表达式

自动操作魔法师中,表达式必须使用 %= 开始,并以%结束。如下图:

表达式中引用变量不再需要百分号,如下例则是错误的用法:

%=%v_坐标X%-100%

表达式中使用四则混合运算:

%= 10 mod 1 + 3 * 10% 结果为 31,使用了求幂函数power

%=strlen( "abcdefg" ) + 2% 结果9,使用了内置函数求文字长度strlen

表达式中使用关系运算:

%= 10 > 20% 结果为 FALSE

表达式中使用函数:

%=power(2,3) + 3% 结果为 13,使用了求幂函数power

%=strlen( "abcdefg" ) + 2% 结果9,使用了内置函数求文字长度strlen

数据类型

不同的数据支持的运算是不同的,魔法脚本中把数据分为文本、日期、数字、逻辑、二进制。对于表达式中的数据常量(固定数据或固定值),用下面的语法表示:

文本型

1、使用成对的单引号或是双引号括起来。如:

%="abxc"%

%='abxc'%

2、如果要在文本中使用引号,且引号同括引号相同,则需要用\+引号来表示。如:

%='ab\'xc'% 表示文本 ab'xc

%="abc\"xc"% 表示文本 abc"xc

3、如果不相同,则可以直接使用。如:

%='abc"ddc'% 表示文本 abc"ddc

%="abc'ddc"% 表示文本 abc'ddc

4、反斜杠是个引导符号,它结合其它符号用于表示一些特殊字符,下列是魔法脚本中可以使用的一些特殊符号:

\r 回车

\n 换行

\t TAB字符

\' 单引号

\" 双引号

\\ 反斜杠

根据上述规则,表示回车换行,可以这样:%="\r\n"%

数字

数字可以使用普通10进制表示,也可以使用16进制方式,使用16进制方式必须以0x开头,科学计数法也是允许的。如:

%=20+30% 运算结果为50

%=20+0x2A% 运算结果为 62,有16进制表示的数字0x2A

%=20e2+0xA0% 科学计数法,运算结果为2160

日期

日期常量(固定值)必须以 #括起来。如下:

%=#2014-1-1# + 1% 运算结果为2014-1-2

逻辑

逻辑常量(固定值)只有两个,TRUE和FALSE。如下:

%=TRUE and FALSE% 运算结果为FALSE

二进制数据

暂时不支持二进制常量。

运算结果的数据类型及自动数据类型转换

播放器在处理表达式时是按从左到右的顺序,并结合优先级和运算符的要求进行运算。如果数据类型不满足要求,则会自动进行数据类型转换,转换规则如下:

  1. 左操作数是否支持该运算符,如果不支持,则自动转换为运算符所要求的数据类型;
  2. 再检查右操作数是否支持左操作数的这个运算,如果不支持,则做数据类型转换;

例:%=20 + v_变量%

这个表达式是一个加法,在魔法脚本中,所有数据类型都支持加法运算符,所以这时会以左操作数(第一个数据)为准,第一个操作数是数字 20,则右操作数v_变量会自动转换为数字,然后进行运算。

例:%=v_变量 + 20%

同上例略有不同,这个表达式的结果数据类型将取决于左操作数的数据类型,如果 v_变量中是一个数字,则是数学运算加法,如果是文字,则会把后面的20转换为文字再追加到v_变量所表示的文本后面,如果v_变量内的数据是日期,则会变成日期的加20天。

对于一个带括号的复杂表达式,按优先顺序来做处理,如下例:

%="0" + (20+("10"+3))%

这个表达式在处理时,会按下列顺序:

  1. 首先处理最里面括号中的 "10" + 3 ,左操作数是文字,则按文本相加处理,得到结果103
  2. 然后是 20 + "103"(第一步的结果),左操作数是数字,转换右操作数为数字后得到结果123
  3. 最后 "0" + 123(第二步的结果),左操作数是文字,得到最终的结果为文本 0123。

运算符

不同的数据类型所支持的运算是不同的,各数据类型所支持的运算见下表:

文本运算符

运算符说明例子
+两个文本相加%="abc"+"ddc"% 结果为 abcddc
-第一个文本中删除第二个文本%="abc"-"bc"% 结果为 a

 

数字运算符

运算符说明例子
+, -, * /加减乘除 %=20+2*30-20/5% 结果为76
int整除%=20 int 3% 结果为6
\或是mod取余%=20 \ 3% 结果为2
pow 求幂 %= 2 pow 3% 结果为8

 

日期运算符

运算符说明例子
+, - 加减

%=#2014-1-1#+3% 结果为2014-1-14

右操作数为天数,可以为小数,如:

%=#2014-1-1 0:0:0# + 0.5# 结果2014-1-1 12:0:0 PM,0.5为半天,一小时则为1/24,如:%=#2014-1-1 0:0:0# + 1/24# 结果2014-1-1 01:0:0 AM

 

逻辑运算符

运算符说明例子
and

%=TRUE and TRUE% 结果为TRUE

%=TRUE and FALSE% 结果为FALSE

or

%=TRUE or FALSE% 结果为TRUE

%=FALSE or FALSE% 结果为FALSE

not 求反

%=not FALSE% 结果为TRUE

%=not TRUE% 结果为FALSE

求反是一个一元操作符,也就是说只能带一个操作数:%=TRUE not FALSE%将是一个错误的表达式。

 

位运算符

运算符 说明 例子
& 按位与

%=0x3 & 0x04% 结果为 0

%=0x3 & 0x02% 结果为 2

| 按位或

%=0x03 | 0x04% 结果为7

^ 按位异或

%=0x03 | 0x02% 结果为1

~ 求反 %=~0x03 结果为-4

二进制运算符

运算符说明例子
+两个二进制数据相加

 

运算符只是提供了一些基本的运算功能,如果需要更复杂的运算和处理,可以在表达式中使用内置函数或是自定义函数如:

%=power(2,3)+2% 结果为10,这个表达式中使用了内置的power函数求幂。

关系运算符

关系运算通常用在"条件判断-根据表达式"语句中使用,用于比较两个数据,或是两个表达式,并最终返回一个逻辑值。如:0 > 20。关系运算符也可在表达式中用于返回一个逻辑值,如:

%= 20 > 30 and 30 > 10% 返回结果FALSE

。魔法脚本中可以使用的关系运算符如下表:

运算符说明例子
== 等于 对于文本操作,将不区分大小写, %="abc"=="ABC"% 结果为 TRUE, %="abc"=="abcdef"% 结果为 FALSE
=== 精确相等 对文本操作要区分大小写, %="abc"=="abC"% 结果为 FALSE,对于其它数据类型则同==一样
!= 不等于

%=30 != 20%, 结果为TRUE

对于文本操作,将不区分大小写, %="abc" != "ABC" ,结果为 FALSE

!== 精确不等于

%="abc" != "ABC"%, 结果为TRUE

主要用于文本比较,会区分大小写。用在其它数据类型上时和!=一样。

>大于 %=30 > 20%,结果为TRUE
< 小于 %=20 < 30%,结果为TRUE
>= 大于等于 %=30>=20%, 结果为TRUE
<= 小于等于 %=30 <=20%, 结果为FALSE
contains或ct 包含 用于文本比较, %="abcd" contains "ab"
containsnc或ctnc 包含(不区分大小写) 用于文本比较, %="ABCDF" containsnc "ab"
like 类似 用于文本比较, %="ABCDEFG" like "AB*"
likenc 类似(不区分大小写)

用于文本比较, %="ABcdeesf" like "ab*"% 结果为 TRUE

 

结论

表达式对于制作复杂功能的魔法脚本来说是一个强有力的工具。在魔法脚本中,一个表达式以%=开头, 并以 % 结束。表达式中可以有变量,函数,表达式内的变量不能使用%号括起来。表达式在实际执行地时候是从左到右执行的,运算进行过程中会进行数据类型的检查并自动转换,首先以运算符转换左操作数,然后根据转换后的左操作数类型并结合运算符来转换右操作数,最终结果的数据类型为左操作数的类型。