- Visual FoxPro程序設計
- 黃玲芳 劉建蘭主編
- 4665字
- 2019-07-25 11:48:24
2.4 系統函數
函數是用程序來實現的一種數據運算或轉換,每個函數實現某項功能或完成某種運算,充分正確地使用函數可以簡化操作和程序,增強數據處理功能。函數往往需要若干個自變量,即運算對象,但是只能有一個結果,我們稱為“函數值”或“函數返回值”。
函數調用的一般形式為:
函數名([參數表])
函數名后的括號不能省略,參數表用方括號括起表示可省略,即有些函數不需要參數。
VFP 9.0有系統函數和用戶自定義函數,按函數運算、處理對象及結果的數據類型可分為數值函數、字符函數、日期和時間函數、數據類型轉換函數和測試函數。
2.4.1 數值函數
數值函數用來執行數值計算,函數的自變量、返回值一般是數值型。
1.求絕對值函數
格式:ABS(<數值型表達式>)
功能:返回數值型表達式的絕對值。
例如,ABS(-99)求-99的絕對值,結果是99。
2.求平方根函數
格式:SQRT(<數值型表達式>)
功能:返回數值型表達式的算術平方根值,數值型表達式的值必須是正數。
例如,SQRT(24+12)求表達式24+12的平方根,結果是6。
3.取整函數
格式1:INT(<數值型表達式>)
功能:取數值型表達式的整數部分。
格式2:CEILING(<數值型表達式>)
功能:取大于或等于指定表達式的最小整數。
格式3:FLOOR(<數值型表達式>)
功能:取小于或等于指定表達式的最大整數。
例如,在命令窗口中輸入如下命令:
?INT(45.47) &&結果為:45 ?CEILING(45.47) &&結果為:46 ?FLOOR(45.47) &&結果為:45 ?INT(-45.47) &&結果為:-45
?CEILING(-45.47) &&結果為:-45 ?FLOOR(-45.47) &&結果為:-46
4.求余數函數
格式:MOD(<數值表達式1>, <數值表達式2> )
功能:返回數值表達式1除以數值表達式2所得的余數,余數符號和數值表達式2相同。當數值表達式1和數值表達式2同號,函數值為兩數相除的余數;當數值表達式1和數值表達式2為異號時,函數值為兩數相除的余數加上除數。
例如,在命令窗口中輸入如下命令:
?MOD(17,4) &&結果為:1 ?MOD(-17, -4) &&結果為:-1 ?MOD(-17,4) &&結果為:3 ?MOD(17, -4) &&結果為:-3
5.求最大值函數和最小值函數
格式:MAX(<表達式1>, <表達式2>, ……, <表達式n>) MIN(<表達式1>, <表達式2>, ……, <表達式n>)
功能:MAX函數是求n個表達式中的最大值,MIN函數是求n個表達式中的最小值。
說明:〈表達式表〉各表達式應是相同數據類型(N、C、Y、D、T)的表達式。
例如,在命令窗口中輸入如下命令:
?MAX(146,90,75) &&結果為:146 ?MIN("cbef", "cbare") &&結果為:cbare
6.四舍五入函數
格式:ROUND(<數值表達式1>, <數值表達式2>)
功能:對數值表達式1進行四舍五入,數值表達式2表示保留的小數位數。
說明:如果數值表達式2的值為非負,表示需保留的十進制小數位;如果數值表達式2的值為負,其絕對值表示整數部分四舍五入的位數;如果數值表達式2的值為非整數,則對其取整后四舍五入。
例如,在命令窗口中輸入如下命令:
?ROUND(11.356,2) &&結果為:11.36 ?ROUND(26785.67, -1) &&結果為:26790
7.求指數函數
格式:EXP(<數值表達式>)
功能:將數值表達式的值作為指數x求ex的值。
8.求對數函數
格式:LOG(<數值表達式>)
功能:求數值表達式的自然對數,數值表達式必須為正數。
格式2:LOG10(<數值表達式>)
功能:求數值表達式的常用對數,數值表達式必須為正數。
9. π函數
格式:PI( )
功能:返回圓周率π的近似值,小數位數取決于系統設置。
10.隨機函數
格式:RAND( )
功能:返回0和1之間的一個隨機數。
2.4.2 字符函數
字符函數是處理字符型數據的函數,其自變量或函數值中至少有一個是字符型數據。
1.求字符串長度函數
格式:LEN(<字符表達式>)
功能:返回字符表達式所包含的字符的個數,函數值是數值型。
例如,在命令窗口中輸入如下命令:
?LEN("") &&結果為:0 ?LEN("hujjlm") &&結果為:6 ?LEN("計算機應用") &&結果為:10
2.取左子串函數
格式:LEFT(<字符表達式〉, <數值表達式>)
功能:在字符表達式中從左端開始截取數值表達式中指定的字符個數組成新字符串。例如,在命令窗口中輸入如下命令:
?LEFT("計算機應用",4) &&結果為:計算
3.取右子串函數
格式:RIGHT(<字符表達式>, <數值表達式>)
功能:在字符表達式中從右端開始截取數值表達式中指定的字符個數組成新字符串。
例如,在命令窗口中輸入如下命令:
?RIGHT("計算機應用",4) &&結果為:應用
4.取子串函數
格式:SUBSTR(<字符表達式>, <數值表達式1>[, <數值表達式2>])
功能:從字符表達式中數值表達式1指定的字符位置開始截取數值表達式2指定的字符個數組成新字符串。
例如,在命令窗口中輸入如下命令:
?SUBSTR("計算機應用基礎",7,4) &&結果為:應用
5.求子串位置函數
格式:AT(<字符表達式1>, <字符表達式2>)
功能:返回字符表達式1在字符表達式2中的起始位置,若字符表達式1不在字符表達式2中,則返回數值0。
例如,在命令窗口中輸入如下命令:
?at("windows", "計算機windows系統") &&結果為:7 ?at("windows", "計算機Windows系統") &&結果為:0
6.刪除字符串前后空格函數
格式1:LTRIM(<字符表達式>)
功能:去除字符表達式的前導空格。
格式2:RTRIM(<字符表達式>)
功能:去除字符表達式的尾部空格。
格式3:ALLTRIM(<字符表達式>)
功能:去除字符表達式的前導空格與尾部空格。
例如,在命令窗口中輸入如下命令:
?LTRIM(" 計算機 ") &結& 果為:計算機□□□ ?RTRIM(" 計算機 ") &結& 果為:□□□計算機 ?ALLTRIM(" 計算機 ") &&結果為:計算機
7.產生空格函數
格式:SPACE(<數值表達式>)
功能:生成若干個空格,空格數由數值表達式的值確定。
例如,在命令窗口中輸入如下命令:
gz=SPACE(15) ?LEN(gz) &&結果為:15
8.大小寫字母轉換函數
格式1:UPPER(<字符表達式>)
功能:將字符表達式中的小寫字母轉換成大寫字母。
格式2:LOWER(<字符表達式>)
功能:將字符表達式中的大寫字母轉換成小寫字母。
例如,在命令窗口中輸入如下命令:
?UPPER("computer") &&結果為:COMPUTER ?LOWER("ViSual") &&結果為:visual
9.宏替換函數&
格式:&<字符型內存變量>[.<字符表達式>]
功能:替換一個字符型內存變量中的字符。
說明如下。
(1)如果字符型內存變量與后面的字符表達式無空格分界,則用“.”將&函數與后面的字符表達式分隔開。
(2)宏替換函數取代的字符串本身也可以包含&函數,實現宏替換的嵌套。
例如,在命令窗口中輸入如下命令:
a="ABS(-4)*2" ?&a+48 &&結果為:56
10.字符串替換函數
格式:STUFF(<字符型表達式1>, <數值型表達式1>, <數值型表達式2>, <字符型表達式2>)
功能:在字符型表達式1中從數值型表達式1指定位置開始用字符型表達式2替換字符型表達式1中的數值型表達式2指定的字符個數。
例如,在命令窗口中輸入如下命令:
x="計算機應用基礎" ?STUFF(x,7,4, ’文化’) &&結果為:計算機文化基礎
11.字符重復函數
格式:REPLICATE(<字符型表達式>, <數值型表達式>)
功能:重復給定字符若干次,次數由數值型表達式給定。
例如,在命令窗口中輸入如下命令:
?REPLICATE("STOP! ",2) &&結果為:STOP! STOP!
2.4.3 日期和時間函數
1.系統日期和時間函數
格式1:DATE()
功能:給出當前系統日期,函數值為日期型。
格式2:TIME()
功能:給出當前系統時間,形式為hh:mm:ss,函數值為字符型。
格式3:DATETIME()
功能:給出當前系統日期和時間,函數值為日期時間型。
2.求年份、月份和天數函數
格式1:YEAR(<日期表達式>|<日期時間表達式>)
功能:從日期表達式或日期時間表達式中求出年份值,函數值為數值型。
格式2:MONTH(<日期表達式>|<日期時間表達式>)
功能:從日期表達式或日期時間表達中求出月份值,函數值為數值型。
格式3:DAY(<日期表達式>|<日期時間表達式>)
功能:從日期表達式或日期時間表達式中求出對應月份中的天數,函數值為數值型。
格式4:CMONTH(<日期表達式>|<日期時間表達式>)
功能:從日期表達式或日期時間表達式中求出對應月份的英文名,函數值為字符型。
例如,在命令窗口中輸入如下命令:
?CMONTH({^2018/8/26})+" morning" &&結果為:August morning
3.求時、分和秒函數
格式1:HOUR(<日期時間表達式>)
功能:從日期時間表達式中求出小時數值(按24小時制)。
格式2:MINUTE(<日期時間表達式>)
功能:從日期時間表達式中求出分鐘數值。
格式3:SEC(<日期時間表達式>)
功能:從日期時間表達式中求出秒數值。
例如,在命令窗口中輸入如下命令:
d={^2018/8/26 06:16:06} ?hour(d), minute(d), sec(d) &&結果為:6 16 6
4.求星期函數
格式:DOW(<日期表達式>|<日期時間表達式>)
功能:從日期表達式或日期時間表達式中求出星期的數值,用1~7表示星期日~星期六,函數值為數值型。
格式:CDOW(<日期表達式>|<日期時間表達式>)
功能:從日期表達式或日期時間表達式中求出星期的英文名。
例如,在命令窗口中輸入如下命令:
d={^2018/8/26 06:16:06} ?DOW(d), CDOW(d) &&結果為:1 Sunday
2.4.4 轉換函數
轉換函數可以將某一數據類型的數據轉換成另一種數據類型的數據。
1.將字符轉換成ASCII碼值函數
格式:ASC(<字符表達式>)
功能:給出字符表達式首字符的ASCII碼值。
例如,在命令窗口中輸入如下命令:
?ASC("China") &&結果為:67
2.將ASCII碼值轉換成相應字符函數
格式:CHR(<數值表達式>)
功能:求出以數值表達式的值作為ASCII碼時對應的字符。
例如,在命令窗口中輸入如下命令:
?CHR(67) &&結果為:C
3.將數值數據轉換成字符數據的函數
格式:STR(<數值表達式>[,長度][,小數值])
功能:將數值數據轉換成字符數據,長度和小數值分別用來指定結果字符串的長度和四舍五入后保留的小數位數。
說明如下。
(1)小數值省略時,轉換后將無小數部分。
(2)長度和小數值都省略時,轉換后字符串長度為10,無小數部分。
(3)如果指定的長度小于小數點左邊的位數,則返回指定長度個數的星號*,表示出錯。
例如,在命令窗口中輸入如下命令:
a=-345.65 ?STR(a) &&顯示結果為:-346 ?STR(a,7,2) &&顯示結果為:-345.65 ?STR(a,8,2) &&顯示結果為:-345.65 ?STR(a,6,2) &&顯示結果為:-345.7 ?STR(a,2,2) &&顯示結果為:**
4.將字符串轉換成數值函數
格式:VAL(<字符表達式>)
功能:將由數字、正負號、小數點組成的字符串轉換為數值,轉換時遇到非上述字符時停止,函數值為0。
說明如下。
(1)前導空格不影響轉換。
(2)轉換后的數值默認保留兩位小數。
例如,在命令窗口中輸入如下命令:
?VAL(" -568計算機") &&結果為:-568.00
5.將字符串轉換成日期函數
格式:CTOD(<字符表達式>)
功能:將字符型數據轉換成日期型數據。
說明:字符表達式中的格式要與系統設置的日期顯示格式一致,年份的位數由SET CENTURY命令指定。若字符表達式中的格式與系統設置的日期顯示格式不一致,則轉換結果為空日期。
例如,在命令窗口中輸入如下命令:
SET CENTURY ON SET DATE TO YMD ?CTOD("2018-10-01") &&結果為:2018/10/01 ?CTOD("1-31-2018") &&結果為: / /
6.將日期型轉成字符串函數
格式:DTOC(<日期表達式>[,1])
功能:將日期型數據轉換成字符型數據,若選參數1,則輸出格式為yyyymmdd;若不選參數1,則輸出格式為mm/dd/yy。
例如,在命令窗口中輸入如下命令:
SET CENTURY OFF SET DATE TO MDY ?DTOC({^2018/9/20}) &&結果為:09/20/18 ?DTOC({^2018/9/20},1) &&結果為:20180920
2.4.5 測試函數
在數據處理時用戶經常需要了解操作對象的類型和狀態等來決定下一步的動作,VFP 9.0提供了一些測試函數幫助用戶準確地獲取操作對象的相關信息。
1.數據類型測試函數
格式1:TYPE(<字符表達式>)
功能:計算字符表達式的值并測試計算結果值的數據類型,數據類型用字母代表。
格式2:VARTYPE(<表達式>, [<邏輯表達式>]
功能:測試表達式值的數據類型,數據類型用字母代表。
說明如下。
(1)TYPE函數將字符表達式的定界符去掉后測試其中表達式值的數據類型。
(2)VARTYPE函數直接測試自變量表達式值的數據類型。
(3)在VARTYPE函數中,如果自變量表達式的運算結果是NULL,則根據函數中邏輯表達式的值決定是否返回表達式的類型。如果邏輯表達式為.T.,則返回表達式的原數據類型;如果邏輯表達式為.F.或省略,則返回X,表明表達式的運算結果是NULL值。
例如,在命令窗口中輸入如下命令:
a=50 ?TYPE("a+50") &&結果為:N ?VARTYPE("a+50") &&結果為:C ?VARTYPE(a+50) &&結果為:N
兩種格式的數據類型測試函數得到的返回值如表2-5所示。
表2-5 兩種格式數據類型的測試函數得到的返回值

2.表的測試函數
(1)表文件尾測試函數。
格式:EOF([<工作區號>|<表別名>])
功能:判斷指定或當前工作區的記錄指針是否指向打開的文件尾,若記錄指針指向表中最后一個記錄之后,函數返回值為.T.;否則為.F.。
說明:當未寫<工作區號>和<表別名>時,默認為當前工作區。
(2)表文件首測試函數。
格式:BOF([<工作區號>|<表別名>])
功能:判斷指定或當前工作區的記錄指針是否指向打開的文件頭,若記錄指針指向表中首記錄的前面,函數返回值為.T.;否則為.F.。
說明:當未寫<工作區號>和<表別名>時,默認為當前工作區。
(3)記錄號測試函數。
格式:RECNO([<工作區號>|<表別名>])
功能:判斷指定或當前工作區的記錄指針所指向記錄的記錄號。
說明如下。
● 省略參數時,默認為當前工作區。
● 若記錄指針在最后一個記錄之后,返回比記錄總數大1的值。
● 若表中無記錄或BOF()函數值為.T.時,該函數返回值均為1。
(4)記錄個數測試函數。
格式:RECCOUNT([<工作區號>|<表別名>])
功能:返回當前或指定表中記錄的個數。
說明如下。
● 省略參數時,默認為當前工作區。
● 返回值不受SET DELETED和SET FILTER命令的影響。
(5)查找是否成功測試函數。
格式:FOUND([<工作區號>|<表別名>]
功能:在當前或指定表中測試是否找到所需的數據,若找到,返回.T.;否則返回.F.。
說明:當未寫<工作區號>和<表別名>時,默認為當前工作區。
(6)記錄刪除測試函數。
格式:DELETED([<工作區號>|<表別名>])
功能:在當前或指定表中,測試記錄指針所指向的記錄是否有刪除標記,若有,返回.T.;否則返回.F.。
說明:當未寫<工作區號>和<表別名>時,默認為當前工作區。
3.文件測試函數
格式:FILE(<文件名>)
功能:判斷指定文件是否存在,若文件存在,返回T.;否則返回.F.。
4.條件測試函數
格式:IIF(<條件>, <表達式1>, <表達式2>)
功能:當條件為.T.,返回表達式1的值;否則返回表達式2的值。
例如,在命令窗口中輸入如下命令:
?IIF(5>3,6,5) &&結果為:6
- 兩周自制腳本語言
- WSO2 Developer’s Guide
- 編寫高質量代碼:改善Python程序的91個建議
- The React Workshop
- Wireshark Network Security
- FFmpeg入門詳解:音視頻原理及應用
- 精通Python設計模式(第2版)
- Scala編程實戰(原書第2版)
- Procedural Content Generation for C++ Game Development
- Spring Security Essentials
- Java Web從入門到精通(第2版)
- Sails.js Essentials
- Getting Started with Electronic Projects
- Drupal Search Engine Optimization
- Python深度學習(第2版)