您的位置: 网站首页 > 程序开发 > Visaul FoxPro程序设计 > 第4章 Visual FoxPro语言基础 > 【4.4 函 数】

4.4 函 数

 

4.4     

函数(Function)不仅是一种数据元素,而且是许多软件常采用的一种数据处理手段,每一个函数都代表了一个特定的数据操作功能。Visual FoxPro函数有两种:一种是自定义的函数,一种是系统函数。自定义函数是用户根据需要自行编写的,系统函数则是由Visual FoxPro提供的内部函数,可以随时调用。

Visual FoxPro提供了几百个函数,熟悉了这些函数的含义和用法之后,可以极大地提高操作和设计程序的效率。这些函数主要分为:字符型函数、数值处理函数、表和数据库函数、日期时间函数、类型转换函数、测试函数、菜单函数、窗口函数、数组函数、SQL查询函数、位运算函数、对象特征函数、文件管理函数以及系统调用函数等。下面将讲解常用的一些函数。

4.4.1  字符型函数

字符处理是实现文字编辑的重要手段,字符处理的主要任务有:字符串测试、字符串截取、字符串的加长、字符串的生成、字符串的置换以及字符串的替换等。

常见的字符型函数见表4-5~表4-7

4-5  字符型函数表(字符位置、频数和长度测试)

   

   

   

AT(<字符表达式1>,<字符

表达式2>)[,<数字>])

检索字符表达式1在字符表达2中的位置,数字表示第几次出现

? AT("科技","Help科技")

5

RAT(<字符表达式1>,<字符

表达式2>)[,<数字>])

返回字符表达式1在字符表达式2的右边出现的位置

? RAT("世界","美国的世界")

7

ATC(<字符表达式1>,<字符

表达式2>)[,<数字>])

测定字符表达式1在字符表达式2中的位置

AT函数

ATLINE(<字符表达式1>,

<字符表达式2>)

测定字符表达式1在字符表达2中的行号

 

RATLINE(<源字符表达式>,

<给定字符表达式>)

返回给定字符表达式在源字符表达式中出现的行号(从后向前搜)

 

OCCURS(<源字符表达式>,

<给定字符表达式>)

返回字符表达式1在字符表达式2中出现的次数

? OCCURS("h","what's this")

2  (区分大小写)

LEN(<字符表达式>)

测定字符串的长度

? LEN("What's your name")

16

BETWEEN(<被测试的表达

>,<低限>,<高限>)

测定表达式是否在两个表达式之间,返回的结果为逻辑型

? BETWEEN(3*6,12,25)

.T.

续上表

   

   

   

LIKE(<字符表达式1>,

<字符表达式2>)

测定字符表达式1是否在字符表达式2之中

? LIKE("世界","Help科技")

.F.

EMPTY(<表达式>)

ISNULL(<表达式>)

测定表达式是否为空

判断表达式结果是否为NULL

TT="HELP WorkRoom"

? EMPTY(TT)

.F.

ISALPHA(<字符表达式>)

测定字符表达式的内容是否是字符

? ISALPHA(TT)

.T.

TYPE(<字符表达式>)

VARTYPE(<表达式>)

返回字符表达式的类型

测试表达式的类型

? TYPE("TT")  ? VARTYPE(TT)

C

EOF([<工作区号>|<表别名>])

表文件尾测试函数,返回逻辑值

 

BOF([<工作区号>|<表别名>])

表文件首测试函数,返回逻辑值

 

RECNO([<工作区号>|

<表别名>])

记录号测试函数

 

 

4-6  字符型函数表(字符串截取、加长和置换)

   

   

   

SUBSTR(<源字符表达式>,

<起始位置>[,<子串长度>])

取一个字符串的子串

AB=" HELP WorkRoom "

? SUBSTR(AB,5,4)

Work

LEFT(<字符表达式>,

<字符个数>)

从字符表达式的最左边取N个字符

? LEFT(AB,4)

HELP

RIGHT(<字符表达式>,

<字符个数>)

从字符串(字符表达式)的最右边,取N个(数字表达式)字符

? RIGHT(AB,4)

Room

TRIM(<字符表达式>)

截掉字符表达式的尾部空格

? TRIM(AB)

RTRIM(<字符表达式>)

截去右边的空格

? RTRIM(AB)

LTRIM(<字符表达式>)

截去左边的空格

? LTRIM(AB)

ALLTRIM(<字符表达式>)

截去字符表达式中所有的空格

?ALLTRIM(AB)

SPACE(<数字表达式>)

设置数字表达式数的空格串

? SPACE(10))

产生10个空格

REPLICATE(<要生成的

字符>,<重复次数>)

重复生成一个指定个数的字符的字符串

? REPLICATE("*",10)

**********

PADL(<字符串>,<总长

>[,<填充字符>])

左边填充

A1="ABC"

? PADL(A1,7, "*")

****ABC

PADR(<字符串>,<总长

>[,<填充字符>])

右边填充

? PADR(A1,7, "*")

ABC****

续上表

   

   

   

PADC(<字符串>,<总长

>[,<填充字符>])

中间填充

? PADC(A1,5"-")

-ABC-

CHRTRAN(<源字符表达式>,

<转换表1>,<转换表2>)

字符转换

A1="foxpro"

? CHRTRAN(A1, "fp","FP")

FoxPro

STUFF(<字符表达式1>,

<起始位置>,<替换长度>,

<替换字符表达式>)

指定起始位置字符串替换

? STUFF(A1,3,3, "PRO")

FoxPRO

STRTRAN(<字符表达式>,

<原字符串>[,<替换字符串>]

[,<始点>][,<替换次数>])

检索字符替换

? STRTRAN(A1, "f","F")

Foxpro

4-7  字符型函数表(字符转换)

   

   

    

STR(<数字表达式>[,<数字1>

[,<数字2>]])

将数字转换成字符

? STR(10.567,4,1)

10.6  (结果为字符型)

ASC(<字符表达式>)

返回字符表达式最左边字符的ASCII

? ASC("HELP")

72

CHR(<字符表达式>)

将数字转换为字符串

? ASC("72")

H

UPPER(<字符表达式>)

将字符串转换成大写形式

?UPPER("FoxPro")

FOXPRO

LOWER(<字符表达式>)

将字符串转换成小写形式

? LOWER("HELP")

help

&<内存变量>[,<字符表达式>]

宏替换

A1="ABC"A2="A1"

? &A2

ABC

 

4.4.2  数值处理函数

常见的数值处理函数见表4-8

4-8  数值处理函数

   

   

   

VAL(<字符表达式>)

将字符表达式的内容转换为数字

T1="98765.41"

? VAL(T1)

98765.41  (为数字型)

续上表

   

   

   

INT(<数字表达式>)

取整函数

? INT(&T1)

98765

MOD(<被除数>,<除数>)

取余数

? MOD(14,5)

4

<被除数>%<除数>

取模

? 128%5

3

ROUND(<数字>,<小数点位>)

对小数点后面的数进行四舍五入

? ROUND(&T1,1)

98765.4

ABS(<数字表达式>)

返回指定数字表达式的绝对值

? ABS(-754.45)

754.45

RAND([<数字表达式>])

返回01之间的随机数

? RAND()  ? RAND(333)

0.34   0.12  (不定的数)

SQRT(<数字表达式>)

返回指定数字表达式的平方根

? SQRT(64)

8

PI( )

返回数字常数3.14159

? PI()

3.14159

ISDIGIT(<字符表达式>)

测定字符表达式是否是数据09

(返回的值为逻辑值)

? ISDIGIT(A1)

.T.

MAX(<表达式1>,<表达式2>

[,<表达式3>…])

返回表达式的最大值

(返回的值为日期,数字)

A1=735.6, A2=10.8 ,A3=345.2

? MAX(A1,A2,A3)

735.6

MIN(<表达式1>,<表达式2>

[,<表达式3>…])

返回表达式的最小值

(返回的值为日期,数字)

? MIN(A1,A2,A3)

10.8

FLOOR(<数字表达式>)

返回小于或等于表达式的最大整数

? FLOOR(A1)

735

CEILING(<数字表达式>)

返回大于或等于表达式的最小整数

? CEILING(A1)

736

 

4.4.3  日期和时间函数

常见的日期和时间函数见表4-9

4-9  日期和时间函数

   

   

   

   

DATE( )

返回当前系统日期

? date()

2007-01-23

YEAR(<日期表达式>)

返回指定日期表达式的年

? year(date())

2007

续上表

   

   

   

   

MONTH(<日期表达式>)

返回指定日期表达式的月

? month(date())

1

DAY(<日期表达式>)

返回指定日期的该月的天数

? day(date())

23

DMY(<日期表达式>)

以日月年的格式返回日期

? dmy(date())

23 一月2007

MDY(<日期表达式>)

以月日年的格式返回日期

? mdy(date())

一月23 2007

CDOW(<日期表达式>)

返回一个给定日期的星期几

? cdow(date())

星期二

DOW(<日期表达式>)

返回一个给定日期的星期几

? dow(date())

1

CTOD(<字符表达式>)

将一个字符表达式转换为日期

? ctod("2007-01-20")

2007-01-20

DTOC(<字符表达式>)

将日期转换为字符类型日期

? dtoc(date())

2007-01-20

CMONTH(<字符表达式>)

返回指定日期表达式的月名

? cmonth(date())

一月

SECONDS( )

从午夜到现在已经过去多少秒

? second()

60211.640

TIME([<数字表达式>])

返加当前系统时间

? time()

16:44:30

DATETIME()

当前日期和时间

? datetime()

2007-01-20 16:44:30

 

4.4.4  逻辑函数

逻辑函数主要用于对表达式进行测试判断,其函数格式和实例见表4-10

4-10  逻辑函数

   

   

   

 

BETWEEN(表达式,下限,上限)

测试表达式是否在上、下限之间

? BETWEEN(30,11,75)

? BETWEEN(20,1,13)

.T.

.F.

EMPTY(表达式)

测试表达式是否为空

? EMPTY(ABS(13))

.F.

TYPE("表达式")

测试表达式类型

A1="ABC"

? TYPE("A1")

? TYPE(A1)

 

C

U

IIF(逻辑表达式,表达式1,表达式2)

逻辑表达式为真,返回表达式1

? IIF(40>27, "Yes","No")

? IIF(50<27, "Yes","No")

Yes

No

INLIST(表达式1,表达

2,)

测试表达式1是否在其他表达式中

? INLIST(40%5,1,2,5,6)

? INLIST(25%5,0,1,2,5)

.F.

.T.

 

4.4.5  其他函数

除了前面介绍的几种类型函数外,还有一些其他的函数,下面将依次进行讲解。

1.文件路径函数

在程序设计或数据库操作过程中,经常要涉及文件路径问题。

1GETFILE()

格式:GETFILE ([扩展名][,标题])

功能:打开系统内部的“打开”对话框,然后根据用户的选择返回文件名。

例如,取xsda.dbf的完整路径和文件名:

AA=GETFILE('PRG','请选择文件')       &&打开如图4-3所示的对话框

? AA                                &&显示选择的文件名及路径

当选择xsda.dbf文件后,单击“确定”按钮,其显示结果为:

E:\Visual FoxPro程序设计\XSDA.DBF

2LOCFILE()

格式:LOCFILE (文件名[,扩展名])

功能:打开系统内部的“打开”对话框,然后查找指定的文件名。

例如,搜索xscj.dbf的完整路径和文件名:

AB=LOCFILE('DBF')       &&打开如图4-4所示的对话框

? AB                    &&显示查找的文件名及路径

当选择xscj.dbf文件后,并单击“确定”按钮,其显示结果为:

E:\Visual FoxPro程序设计\ xscj.dbf

         

4-3  “打开”对话框                        4-4  查找指定的文件

3PUTFILE()

格式:PUTFILE (提示[,文件名][,扩展名])

功能:将当前文件另存为一个指定的文件。

例如,输入如下命令,将打开如图4-5所示的“另存为”对话框。

AC=PUTFILE ("将文件另存","档案","PRG")

4CURDIR()

格式:CURDIR(字符表达式)

功能:返回当前默认目录。

5GETDIR()

格式:GETDIR([目录表达式[,对话框标题]])

功能:打开“选择目录”对话框,并指定目录。

例如,输入如下命令,将打开如图4-6所示的“选择目录”对话框。

AD=GETDIR("E:","当前文件夹的位置")

        

4-5  “另存为”对话框                        4-6  “选择目录”对话框

2.显示信息函数MESSAGEBOX()

在程序设计过程中经常要显示一些信息,例如提示信息、出错信息等,MESSAGEBOX()函数就是用于显示这些信息的。

格式:MESSAGEBOX(信息文本[,对话框类型][,对话框标题])

功能:以窗口形式显示信息,其返回值为数字。

对话框类型有很多种选择,具体情况见表4-114-13

4-11  对话框类型对应的按钮

对话框类型值

对话框按钮

0

“确定”按钮

1

“确定”和“取消”按钮

2

“终止”、“重试”和“忽略”按钮

3

“是”、“否”和“取消”按钮

4

“是”和“否”按钮

5

“重试”和“取消”按钮

4-12  对话框类型对应的图标

对话框类型值

对话框图标

16

“终止”图标

32

“问号”图标

48

“感叹号”图标

64

“信息”图标

4-13  对话框类型对应的默认按钮

对话框类型值

对话框默认按钮

0

1个按钮

256

2个按钮

512

3个按钮

在对话框中给定不同的类型值,则对话框中将显示不同的按钮、图标和默认按钮,注意类型值可以组合使用,如“1+64+0表示使用“确定”和“取消”按钮、信息图标、默认值为第一个按钮。

例如,在命令窗口中输入如下代码:

AA=MESSAGEBOX("提示信息的内容",1,"对话框的标题")

此时屏幕上给出如图4-7所示的对话框。

在对话框中使用3个按钮,并使用“终止”图标的代码如下:

AA=MESSAGEBOX("提示信息的内容",3+16,"对话框的标题")

此时屏幕给出如图4-8所示的对话框。

      

4-7  提示框                 4-8  带有图标的对话框

如果单击“是”按钮,输入“? AA”命令,则返回值是6;如果单击“否”按钮,输入“? AA”命令,则返回值是7;如果单击“取消”按钮,输入“? AA”命令,则返回值是2