2.7指令
在程式中,除了允許使用常量、變量之外,還允許使用事先定義了的指令,使用者隻要給出指令名與參數的值,就可以求出相應的值來。如求5的平方根,可調用指令“求平方根(5)”。
程式是由各種指令組合而成的,不同的指令完成不同的工作。易語言中提供了大量的指令,使用者可以使用這些指令來實作預想的運作效果。一個程式可以實作一種或多種功能,而這些功能的實作都離不開程式内部調用的指令。指令是程式的基本組成部分,要學習易程式的編寫,首先就要了解易語言所提供的指令。
2.7.1 指令的格式
指令格式如下:
指令名稱 (參數,...... )
大部分指令都需要填寫參數,參數用括号括起來的,并用逗号分隔。部分指令無需參數,但括号不能省略,如“結束()”指令。各種指令所要求參數的個數以及資料類型各有不同,由其文法所規定。例如“到文本()”指令,該指令隻需一個參數,參數内容為欲轉換成文本的資料。有些指令的參數很多,如“子文本替換()”指令的格式如下:
子文本替換 (欲被替換的文本,欲被替換的子文本,[用作替換的子文本],[進行替換的起始位置],[替換進行的次數],是否區分大小寫)
2.7.2 指令的傳回值
大多數指令執行完畢後都有傳回值。有的指令傳回運算結果,如“求正弦()”指令,傳回求得的正弦值;有的指令傳回的執行的結果,如“取文本左邊()”指令,傳回取出的文本内容;有的指令傳回運作是否成功的狀态,如“建立目錄()”指令,建立成功則傳回“真”,建立失敗則傳回“假”等等。大部分時候,目前指令的傳回值對後續指令來說非常重要。例如一個指令如果運作成功了,就提示成功,否則提示失敗,“Windows控制台程式”的代碼如下:
各指令的文法規定了其傳回值的資料類型,在實際使用中,應當注意有可能需要對傳回值的資料類型加以轉換,例如,文本資料隻接收文本型,是以要顯示一個數字就可以使用“到文本()”指令将數字轉換為文本形式顯示,代碼如下:
文本變量 = 到文本(求平方根 (100))
“求平方根()”指令的傳回值是一個數值型的,如果要以文本方式顯示,就要用“到文本()”指令進行轉換。
有些指令的傳回值是一個通用型的資料,代表根據參數不同,其傳回值資料類型也可以不同。例如“多項選擇(,)”指令。該指令有2個參數,第一個參數是索引值,第二個參數是待選項,待選項可以重複添加。待選項資料類型是通用型(表示參數2可以是任意資料類型)的,傳回哪個待選項取決于第一個參數的索引值。索引值是1則傳回第一個待選項;索引值是2則傳回第二個待選項。是以,所選項是哪種類型的資料,傳回值就為哪種類型的資料。下面就編寫一個小程式來了解一下多項選擇指令。
建立一個“Windows控制台程式”,在“_啟動子程式”中輸入如下代碼:
按“F5鍵”試運作程式,輸入“4”後按“Enter鍵”,将顯示待日期時間“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位為1,另一個數值的第四位為1,則傳回值的第四位為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