2.7命令
在程序中,除了允许使用常量、变量之外,还允许使用事先定义了的命令,用户只要给出命令名与参数的值,就可以求出相应的值来。如求5的平方根,可调用命令“求平方根(5)”。
程序是由各种命令组合而成的,不同的命令完成不同的工作。易语言中提供了大量的命令,用户可以使用这些命令来实现预想的运行效果。一个程序可以实现一种或多种功能,而这些功能的实现都离不开程序内部调用的命令。命令是程序的基本组成部分,要学习易程序的编写,首先就要了解易语言所提供的命令。

2.7.1 命令的格式

命令格式如下:
命令名称 (参数,...... )
大部分命令都需要填写参数,参数用括号括起来的,并用逗号分隔。部分命令无需参数,但括号不能省略,如“结束()”命令。各种命令所要求参数的个数以及数据类型各有不同,由其语法所规定。例如“到文本()”命令,该命令只需一个参数,参数内容为欲转换成文本的数据。有些命令的参数很多,如“子文本替换()”命令的格式如下:
子文本替换 (欲被替换的文本,欲被替换的子文本,[用作替换的子文本],[进行替换的起始位置],[替换进行的次数],是否区分大小写)


2.7.2 命令的返回值

大多数命令执行完毕后都有返回值。有的命令返回运算结果,如“求正弦()”命令,返回求得的正弦值;有的命令返回的执行的结果,如“取文本左边()”命令,返回取出的文本内容;有的命令返回运行是否成功的状态,如“创建目录()”命令,创建成功则返回“真”,创建失败则返回“假”等等。大部分时候,当前命令的返回值对后续命令来说非常重要。例如一个命令如果运行成功了,就提示成功,否则提示失败,“Windows控制台程序”的代码如下:
 
各命令的语法规定了其返回值的数据类型,在实际使用中,应当注意有可能需要对返回值的数据类型加以转换,例如,文本数据只接收文本型,因此要显示一个数字就可以使用“到文本()”命令将数字转换为文本形式显示,代码如下:
文本变量 = 到文本(求平方根 (100))
“求平方根()”命令的返回值是一个数值型的,如果要以文本方式显示,就要用“到文本()”命令进行转换。
有些命令的返回值是一个通用型的数据,代表根据参数不同,其返回值数据类型也可以不同。例如“多项选择(,)”命令。该命令有2个参数,第一个参数是索引值,第二个参数是待选项,待选项可以重复添加。待选项数据类型是通用型(表示参数2可以是任意数据类型)的,返回哪个待选项取决于第一个参数的索引值。索引值是1则返回第一个待选项;索引值是2则返回第二个待选项。所以,所选项是哪种类型的数据,返回值就为哪种类型的数据。下面就编写一个小程序来了解一下多项选择命令。
新建一个“Windows控制台程序”,在“_启动子程序”中输入如下代码:
 
按“F5键”试运行程序,输入“4”后按“回车键”,将显示待日期时间“2005年10月1日”。
有些命令无返回值,如“结束()”命令,此类无返回值的命令运行后不返回任何值,所以直接使用即可,例如:
 
命令是否有返回值,返回值的数据类型,都可以通过即时帮助系统查找到。

2.7.5 文本操作类命令

在编写程序时免不了对大量的文本型的数据进行操作,文本操作类的命令比较全面,下面介绍常用文本操作命令。
1.“取文本长度()”命令
获取指定文本的字节长度,半角数字和字符为1个字节的长度,汉字和全角标点符号为2个字节的长度,如:
取文本长度(文本变量)
可以取出变量中文本的长度。
2.“取文本左边()”、“取文本右边()”和“取文本中间()”命令
这3个命令可以取出一段文本中任意位置的文本。如:
取文本左边(文本变量,4)
可以将变量中的前4个字符取出来。
3.“寻找文本()”和“倒找文本()”命令
从当前文本的指定位置开始寻找指定的文本,并返回最先找到该文本的位置。“寻找文本()”是从指定文本的首部开始寻找,“倒找文本()”相反。例如:
寻找文本 (文本变量, “:”, 1, 假)
代码运行后会返回找到的第一个“:”的位置。
4.“文本替换()”命令
该命令可以将指定文本的某一部分用其它的文本替换。例如:
文本变量= 文本替换 (文本变量, 4, 2, “xx”)
将“文本变量”中第4个位置开始的2个字符替换成“xx”,并将结果保存到“文本变量”中。
  
2.7.6 时间操作类命令

时间操作类命令也是较常用的一类命令,可以对日期时间型数据进行操作。
1.“到时间()”和“时间到文本()”命令
这2个命令用来在日期时间型数据和文本型数据之间转换。例如:
到时间 (“2004/2/2 12:30:25”)
“时间到文本”命令可以将指定的部分的时间转换成文本。例如:
时间到文本 (取现行时间 (), #日期部分)
2.“取现行时间()”命令
可以将当前系统的日期及时间取出,例如用“日期时间变量”保存当前的时间:
日期时间变量=取现行时间()
被保存时间是一个包括“年月日时分秒”的完整时间,如果想取出时间中的指定部分,需要使用其它时间操作类型命令来实现。
3.取指定时间部分的命令
用来取出指定时间部分的命令有:“取时间部分()”、“取年份()”、“取月份()”、“取星期几()”、“取小时()”、“取分钟()”、“取日()”、“取秒()”、“取日期()”、“取时间()。其中“取日期()”和“取时间()”命令返回值是日期时间型,其它返回值都为整数型。
“取时间部分()”命令可以取出日期时间型数据中的指定部分数值。例如:
(1)取当前时间的年份:
取时间部分 (取现行时间 (), #年份)
(2)用“日期时间变量”保存当前时间的“年、月、日”:
 日期时间变量= 取日期 (取现行时间 ())

2.7.7 位运算命令

位运算是指对数据进行二进制的逐位运算。计算机内部是采用二进制方式存储和处理数据的,输入到计算机的数字、字母、汉字等信息都以二进制的形式存储。
所谓二进制,就是以“逢二进一,借一当二”为原则,对数值进行计数的进位制,和我们日常使用的十进制类似,只不过十进制是“逢十进一”。
位的英文是Bit,所以也常被称为比特位。
易语言中的位运算命令
(1)“位取反()”命令
“位取反()”命令对二进制数值每一比特位的值取反,即0变为1,1变为0,返回值是转换后的十进制数。
例如:
文本变量 = 到文本 (位取反 (80))
代码运行后,“文本变量”将保存“位取反”运算结果“-81”。
(2)“位与()”命令
“位与()”命令对二进制数值的共同比特位进行“与”运算,即如两个或多个数值的共同位均为1,则返回值的对应位也为1,否则为0,运算完毕后,返回值是转换后的十进制数。
比如:
一个二进制数的第4位为1,另一个二进制数的第四位为1,则返回值的第四位为1;
一个二进制数的第4位为0,另一个二进制数的第四位为1,则返回值的第四位为0;
一个二进制数的第4位为1,另一个二进制数的第四位为0,则返回值的第四位为0;
一个二进制数的第4位为0,另一个二进制数的第四位为0,则返回值的第四位为0;
例如:
文本变量 = 到文本 (位与 (56, 89))
运行后可以得出的结果为“24”。 56和89分别转换成二进制数为:0011 1000和0101 1001,进行与的运算后即会得出结果“0001 1000”即“24”。
(3)“位或()”命令
“位或()”命令对二进制数值进行“或”运算,并将运算后结果以十进制返回。如两个或多个数值的共同位均为0,则返回值的对应位也为0,否则为1。运算完毕后,返回值是转换后的十进制数。
一个数值的第4位为1,另一个数值的第四位为1,则返回值的第四位为1;
一个数值的第4位为0,另一个数值的第四位为1,则返回值的第四位为1;
一个数值的第4位为1,另一个数值的第四位为0,则返回值的第四位为1;
一个数值的第4位为0,另一个数值的第四位为0,则返回值的第四位为0;
例如:
文本变量 = 到文本 (位或 (56, 89))
运行后的结果为“121”。56和89分别转换成二进制数为:0011 1000和0101 1001,进行或的运算后即会得出结果“0111 1001”即“121”。
(4)“位异或()”命令
“位异或()”命令对二进制数值的共同比特位进行“异或”运算,并将运算结果以十进制返回。如果两个或多个数值的共同位相等(均为0或均为1),则返回值的对应位就是0,否则为1。运算完毕后,返回值是转换后的十进制数。
比如:
一个数值的第4位为0,另一个数值的第四位为1,则返回值的第四位为1;
一个数值的第4位为1,另一个数值的第四位为0,则返回值的第四位为1;
一个数值的第4位为1,另一个数值的第四位为1,则返回值的第四位为0;
一个数值的第4位为0,另一个数值的第四位为0,则返回值的第四位为0;
例如:
文本变量 = 到文本 (位异或 (56, 89))
运行后的结果为“97”。56和89分别转换成二进制数为:0011 1000和0101 1001,进行异或的运算后即会得出结果“0110 0001”即“97”。

2.7.8 其它常用命令

1.“读入文件()”和“写到文件()”命令
“读入文件()”命令将一个文件的所有数据读入程序,返回值是一个字节集型数据,在命令的参数中填入欲读入文件的全路径文件名,可以将读入的文件放在一个字节集型变量中,如:
字节集变量=读入文件(“C:\Downloads\echs.zip”)
对读入的文件数据经过处理后,用“写到文件()”命令写出至文件中。“写到文件()”命令的第一个参数指定写出文件的全路径文件名,文件的扩展名要和文件格式相匹配,写出的文件才能正常访问。例如将字节集型数据“字节集变量”中的内容写到文件中:
写到文件 (“C:\echs.zip”, 字节集变量)
2.“寻找文件()”命令
“寻找文件()”命令可以在指定路径下寻找文件或目录,找到后就返回与条件匹配的文件名或目录名,如果没找到就返回一个空文本。命令的第一个参数为欲寻找的文件名,第二个参数为欲寻找文件的文件属性。例如寻找一个子目录:
寻找文件 (“c:\目录”, #子目录)
3.“创建目录()”和“删除目录()”命令
“创建目录()”命令可以创建一个新目录,创建成功返回真,失败返回假。“删除目录()”命令可以用来删除一个目录,删除成功返回真,失败返回假。
“创建目录()”命令创建目录时,其父目录必须存在,否则会创建失败,即该命令不能一次性创建多级目录。因此,如果要创建多级子目录,需要判断每一级目录的父目录是否存在,一层一层的创建各级子目录。
4.“打开文件()”命令
“打开文件()”用来打开一个指定的文件,成功返回被打开文件的文件号。虽然该命令只用来打开一个文件,并不对文件进行其它操作,但本命令取得的文件号,是很多文件操作类命令都要使用到的,如“读入文本()”和“写出文本()”命令、“读入数据()”和“写出数据()”命令等等。使用此命令可以比读入文件命令实现更多的操作。
例如将一个文本文件打开并用“读入文本()”命令将读入的文本保存到“文本变量”中:
文本变量 = 读入文本 (打开文件 (“c:\帮助.txt”, , ), )
2.8运算符和表达式
将数据类型相同的常量、变量和函数用规定的运算符连接起来,就构成了表达式。表达式本身有一个值。
编写代码时,除了大量的使用命令或对组件的属性或方法进行操作,运算符的使用也非常重要。程序中所有涉及到的算术运算或关系比较运算等操作,都需要使用运算符。
易语言中提供了大量的运算符。例如赋值时使用的“=”号,就是赋值运算符,比较大小时使用的“>”和“<”号,是关系运算符等等。如表2-2所示。
 易语言运算符
运算符分类 运算符 运算符含义 代码中显示
算术运算符号 + 加法运算,将加号两边的数相加 +
 - 减法运算,将减号两边的数相减;负号 -
 * 乘法运算,将乘号两边的数相乘 ×
 / 除法运算,将除号两边的数相除 ÷
 \ 整除运算,将整除号两边的数整除 \
 % 求余数运算 %
关系运算符 > 判断是否大于 >
 < 判断是否小于 <
 = 或 == 判断是否等于 =
 >= 判断是否大于等于 ≥
 <= 判断是否小于等于 ≤
 <> 或 !=  判断是否不等于 ≠
 ?= 判断是否约等于 ≈
逻辑运算符 && 或QIE  逻辑与运算符,可以连接几个必须同时满足的条件 且
 ||或HUO  逻辑或运算符,可以连接几个可选条件 或
赋值运算符 = 将等号后面的值赋值给等号前面的对象 =

程序中的运算符都有其优先级别,在程序运行的时候会按照符号的优先级别,从高到低依次运行。运算符的优先级别参见下表。
易语言常用运算符的优先级
运算符 优先级
()(小括号) 最高
*(乘)    /(除)        

\(整除) 
%(求余数) 
+(加)     -(减) 
<(小于)  <=(小于等于)   >(大于)   >=(大于等于)
==(等于)     !=(不等于)     ?=(约等于) 
&&(逻辑与) 
||(逻辑或) 
=(赋值) 
在这里我们已看出:算术表达式中算术运算符号的优先顺序,和在数学上是完全一样的:
(1)如果有括号,必须先做括号内的。在程序中,没有大、中、小括号之分,一律使用应括号(),括号内可以套用括号,但不得超过36层。这就同数学上一样,先做最内层括号中的计算,层层向外脱,最后处理最外层括号中的计算。
(2)无论括号内或括号外,函数计算优先于其它算术运算符。
(3)乘、除运算优先于加、减运算。乘或除同时出现在一个表达式中时,先完成左边的后完成右边的(即以先后出现顺序为序)。
(4)最后做加、减运算。加、减号同时出现在一个表达式中时,也以先后出现的顺序为序。
对于初学者来说,下列几点要格外注意:
1.在数学上,代表两个数的字母相乘时,可以连写。如A代表一个数,B代表一个数,则可用AB代表两个数相乘。在表达式中,这是绝对不允许的(这时它会把AB当作变量名)。必须写成A*B。用A.B也是不允许的。
2./号代表除号。
3.左右括号必须成对出现。且不得用方括号[ ]或花括号{}代替。

2.8.1算术运算符和算术表达式

1.算术运算符
在程序中表示为:
+,加法运算。如:3+2
—,减法运算或负值运算。如:10-2、-10
×,乘法运算。如:2×3
/,除法运算。如:20/12
\,整除运算。如:12\5,运算后会将保留一个整数,小数部分将被舍去
%,余数运算。还可以输入“求余数”,第一个参数填被除数,第二个参数填除数,第二个参数可以重复添加。如:1220%100、1220%100%120
2.算术表达式
用算术符号和括号将运算对象连接起来的,符合易语言语法规则的式子,称易语言算术表达式。例如,下面是一个合法的易语言算术表达式:
变量=((6 × 12 + 16 ÷ 8) - 23) \ 10
表达式中运算的先后,是按照运算符的优先级别来进行判定的。
算式计算的结果可以被程序调用。

2.8.2赋值运算符和赋值表达式

1.“=”是赋值运算符,在程序中给变量赋值或用代码改变组件属性,大部分都是使用“=”进行赋值的,将等号后面的值赋值给等号前面的赋值对象。
2.赋值表达式
一个正确的赋值表达式,一定要保证欲赋的值和被赋值的对象之间的数据类型相同,不同的数据类型要转换成相同的数据类型后再赋值。
3.赋值运算符“=”和关系运算符“=”的区别。虽然2个运算符使用的是相同的符号,但含义却不同,赋值运算符“=”是用于赋值,将“=”右边的值(或变量)赋值给“=”左边的变量(或组件属性、数组成员、自定义数据类型成员);关系运算符“=”,是比较符号两边的值是否相等,如果相等返回真,不相等返回假。
 

 
上述代码中,条件语句“如果()”中的“被比较值=比较值”,是用关系运算符“=”进行比较,如果相等会返回“真”,不相等会返回“假”,如果返回“真”将会执行:标签1.标题=“相等”;如果返回“假”将会执行:标签1.标题=“不相等”,这2行给标签标题属性赋值的代码中,使用的就是赋值运算符“=”。
2.8.3文本运算符与文本表达式
字符串在易语言中被称为文本,其运算符只有一个:
+  连接运算符
其功能是将两个文本连接起来。
例如:
“ABCD”+“123”
将得到一个新的文本,其值为“ABCD123”。
可见,可用字符串运算符连接两个字符串,构成字符串表达式。
 2.9习题
1.指明下列各数据,哪些是合法的常量。
(1)1E+39    (2)359,672001    (3)“ABC  34”    (4)29•“AB”    (5)32.001
2.指明下列各项,哪些是合法的变量名。
    (1)AA    (2)A.5%    (3)2A$    (4)AB$%    (5)BBC%
3.将下列各数转换成常规计数法表示的数。
    (1)8.2345E+05     (2)2.3456E-06    (3)1.259E+09
4.写出下列各表达式中运算符号的执行顺序。
    (1)3*5+2*(68/(2+3))    (2)A+B*6/4+8%| 65+2*8    (3)A+B-85% 3
5.指出下列各程序行中有哪些错误。
        (1)变量1=5,变量2=6    (2)变量1+2=变量2+3    (3)“文本数据”    (4)3.1416*变量1   
6.给出下列表达式的逻辑值:
(1)5>3 && 6>4    (2)3+5>6 || 7=6    (3)A>A && 4*4*2>2     (4)5||3<3(5)5=6=7=0