FoxPro For Windows http://cc.synu.edu.cn 1
FoxPro程序设计
第 11讲 FoxPro的常用函数
FoxPro For Windows http://cc.synu.edu.cn 2
FoxPro程序设计
什么是函数?
函数是能够返回一个值的子程序 ;
函数由函数名和一对圆括号组成 ;
根据需要用户可以自定义函数 ;
系统提供 200多种系统函数。 MOD( )
STR( )SUBS( )
EOF( )
BOF( )FOUND( )
FoxPro For Windows http://cc.synu.edu.cn 3
FoxPro程序设计
绝对值函数,ABS(<数值表达式 >)
【 例 】 ABS(-12.5)
求平方根函数,SQRT(<数值表达式 >)
【 例 】 SQRT(4) × SQRT(-4)
最大值函数,MAX(<数值表达式 1>,<数值表达式 2>)
【 例 】 MAX(12,4)
最小值函数,MIN(<数值表达式 1>,<数值表达式 2>)
【 例 】 MIN(12,4)
算术函数
FoxPro For Windows http://cc.synu.edu.cn 4
FoxPro程序设计
四舍五入,ROUND(<数值表达式 1>,<数值表达式 2>)
ROUND函数,数值表达式 2>=0,加一位四舍五入;
<0,小数点前,四舍五入。
【 例 】? ROUND(1234.5671,2) && 1234.57
ROUND(1234.5671,0) &&1235
ROUND(1234.5671,-1) && 1230
【 例 】 store 47.6554 to d
round(int(d)+d,2)的执行结果是:
A.94 B.95.66 C.94.655 D.94.66
取整函数,INT(<数值表达式 >)
常用来判别一个数能否被另一个数整除。
例:表达式 INT( X/ 2) =X/ 2
为真,说明 X能被 2整除 (偶数 ),否则不能被 2整除 (奇数 )。
【 例 】 INT(5/2) INT(5/-2) INT(-49,9)
FoxPro For Windows http://cc.synu.edu.cn 5
FoxPro程序设计
求余函数,MOD(<数值表达式 1>,<数值表达式 2>)
MOD函数的功能同模除运算%,符号同数值表达式 2。
符号相同:余数 =被除数 -商 * 除数
符号不同:余数 =(商 +1) * 除数 -被除数
【 例 】
MOD(36,10),MOD(10,36),MOD(36,-10),MOD(10,-36),MOD(-10,36)
6 10 -4 -26 26
注意 FoxPro中无平方函数。对于 X平方可表示为 X^2,X**2或
X*X。
【 例 】 表达式 3*5**2+10%6/2的结果为:
A.227 B.76 C.226 D.77
FoxPro For Windows http://cc.synu.edu.cn 6
FoxPro程序设计
宏替换函数,&<字符型变量 >[.<字符串常量 >]
宏替换函数&替换字符型变量的值,注意在&后的变量必须是字符型。
常用在程序中实现对任意的输入对象进行相关操作。
用,将宏替换函数后的字符串常量分隔。
【 例 】
执行下列命令后,将显示:
store 100 to yz
store 10 to y
store 'z' to n
store 'y&n' to m
&m
A.100 B.0 C.10 D.显示‘变量没找到’
字符函数
FoxPro For Windows http://cc.synu.edu.cn 7
FoxPro程序设计
【 例 】 km=space(8)
@ 5,15 say "请输入数据库文件名," get km
read
use &km
【 例 】 允许 &嵌套
stor 99 to rj &&99
stor "j" to z && j
stor "r&z" to mn && rj
&mn && 99
【 例 】 宏函数与后面字符间,以 "."分隔
stor "/" to c && /
stor "125&c.5" to s && 125/5
【 例 】 X=?1998?
&X+5 &&2003
?&X+5? && 1998+5
FoxPro For Windows http://cc.synu.edu.cn 8
FoxPro程序设计
子串搜索函数:
AT(<字符串表达式 1>,<字符串表达式 2>[,<数值 >])
RAT(<字符串表达式 1>,<字符串表达式 2>[,<数值 >])
子串搜索函数 AT()返回字符串 1在字符串 2中从左边的开始
位置,若字符串 2不包含字符串 1,则返回值为 0。 RAT
从右边开始。
【 例 】?at("for","FoxPro 2.6 for Windows") &&12
【 例 】 x='o'
y='FoxPro 2.6 for Windows'
at(x,y,3) &&13
FoxPro For Windows http://cc.synu.edu.cn 9
FoxPro程序设计
取子串函数,SUBSTR(<字符串 >,<起始位置 >[,<字符个数 >])
取左子串函数,LEFT(<字符串 >,<字符个数 >)
取右子串函数,RIGHT(<字符串 >,<字符个数 >)
【 例 】 str="FoxPro 2.6 for Windows"
subs(str,12,3) &&for
left(str,10) &&FoxPro 2.6
【 例 】 sno=?990108?
Subs(sno,1,2)
Right(sno,2)
注意:使用取子串函数时一定要注意一个汉字占两个字符的位置。
FoxPro For Windows http://cc.synu.edu.cn 10
FoxPro程序设计
删除字符串首、尾空格函数:
ALLTRIM(<字符表达式 >)
TRIM()
LTRIM()
【 例 8.7】
STORE,Good” TO str1
STORE, Morning.” TO str2
Str1+str2,str1+LTRIM(str2)
Good Morning,GoodMorning.
空格函数,SPACE(<数值表达式 >)
串长度函数,LEN(<字符表达式 >)
【 例 】 store space(8) to name
LEN(name)
FoxPro For Windows http://cc.synu.edu.cn 11
FoxPro程序设计
字符串替换函数:
STUFF(<字符表达式 1>,<起始位置 >,<字符个数 >,<字符表达
式 2>)
STUFF函数是串 1从 <起始位置 >开始,删除 <字符个数 >,替换以串 2。
<字符个数 >为 0,插入,串 2为空,删除指定的字符个数。
【 例 】 c="ABCDEFGHIJK"
STUFF(C,4,3,"567") &&ABC567GHIJK
STUFF(c,4,3,"123456") &&ABC123456GHIJK
字符重复函数:
REPLICATE(<字符型表达式 >,<数字型表达式 >)
【 例 】 E="ABC"
repl(E,4) &&ABCABCABCABC
FoxPro For Windows http://cc.synu.edu.cn 12
FoxPro程序设计
系统日期函数,DATE() 格式:取决 SET DATE
系统时间函数,TIME() 格式,HH:MM:SS
年份函数,YEAR(<日期型表达式 >)
月份函数, MONTH(<日期型表达式 >)
日号函数,DAY(<日期型表达式 >)
【 例 】 dd=date()
"今天的日期为,",dd
"今天是 ",year(dd),"年 ",month(dd),"月 ",day(dd),"日 "
日期函数
FoxPro For Windows http://cc.synu.edu.cn 13
FoxPro程序设计
说明,
。用当前系统日期与另外的日期相减以求出这两个日期间的天数,
再除以 365取整后,则为求两个日期之间的相距的年数。
。用 SET CENTURY ON|OFF 改变日期的输出格式。
为 0FF时用 2位数字表示年份,为 ON时用 4位数字表示年份。日期
型变量宽度都为 8。
。日期的表示格式可通过 SET DATE命令设置为其他格式。
例如,
SET DATE BRITISH,设置日期格式为英国格式,即?日 /月 /年 "。
FoxPro For Windows http://cc.synu.edu.cn 14
FoxPro程序设计
在一个表达式中有多种数据类型同时出现时,应将日期型或
数值型转换成字符型,用 "十 "连接后输出,否则会造成数据
类型不统一的错误。
字符转日期函数,CTOD(<字符表达式 >)
日期转字符函数,DTOC(<日期型表达 >)
【 例 】? CTOD ("07/23/98")
DTOC (date())
转换函数
FoxPro For Windows http://cc.synu.edu.cn 15
FoxPro程序设计
数值转字符串函数:
STR(<数值表达式 >[,<长度 >][,<小数位数 >]
字符串转数值函数:
VAL(<字符串表达式 >)
【 例 】 a=123.456
str(a,10,4) &&123.4560
str(a,5) &&123
str(a,4,1) &&123
str(a,2) && **
【 例 】? val("12") && 12.00
val("a12") && 0.00
val("12a") && 12.00
FoxPro For Windows http://cc.synu.edu.cn 16
FoxPro程序设计
大写转小写函数:
LOWER(<字符串表达式 >)
小写转大写函数:
UPPER(<字符串表达式 >)
UPPER()函数和 LOWER()函数常用于判断在不区分大小写
时,某一字符串是否和一固定字符串相同。
例如, UPPER( YN)=? Y”,对于变量 YN中的值无论是
大写的? Y”还是小写的? Y”,该表达式的值都为真。
【 例 】 wait,继续查询吗? y/n” to jx
if upper(jx)=“N”
exit
endif
If upper(jx)=‘n’?
FoxPro For Windows http://cc.synu.edu.cn 17
FoxPro程序设计
字符转换成 ASCⅡ,
ASC('<字符串 >')
ASCⅡ 转换成字符:
CHR(<n>)
【 例 】
? ASC('A')
65
CHR(65)
A
0110001(B)
49(D)
1000001(B)
65(D)
FoxPro For Windows http://cc.synu.edu.cn 18
FoxPro程序设计
字符串长度测试函数,LEN( <字符型表达式 >)
【 例 】 len(space(5)-space(3))的值是:
A.2 B.0 C.5 D.8
求字符串长度时,一个汉字宽度为 2,空格和标点都要计算在内。
工作区测试函数,SELECT()
【 例 】? SELECT()
记录号测试函数,RECNO([<工作区号 >])
【 例 】 USE STUDENT
GO TOP
RECNO()
测试函数
FoxPro For Windows http://cc.synu.edu.cn 19
FoxPro程序设计
库顶测试函数,BOF([<工作区号 >])
库底测试函数,E0F([<工作区号 >])
执行查找命令后,可用 EOF()函数和 FOUND()函数测试是否查找成
功,EOF()值为,F.或 FOUND()函数值为,T.,表示查找成功。
【 例 】
若函数 bof()的返回值为,f.,此时函数 recno()的返回值是:
A.0 B.1 C.top D.当前记录号
查找结果测试函数,FOUND()
【 例 】 IF FOUNT() &&表示找到了
删除记录测试函数,DELETED()
FoxPro For Windows http://cc.synu.edu.cn 20
FoxPro程序设计
文件测试函数,FILE(<字符型表达式 >)
【 例 】? FILE(?student.dbf?)
数据类型测试函数,TYPE(<字符表达式 >)
【 例 】 函数 type([11/20/99])的值为:
A.N B.C C.D D.11/20/99
函数 type("{11/20/99}")的值为?
条件测试函数,IIF(<逻辑表达式 >,<表达式 1>,<表达式 2>)
【 例 】 IIF(x>0,1,-1)
FoxPro For Windows http://cc.synu.edu.cn 21
FoxPro程序设计
列坐标测试函数,COL()
行坐标测试函数,ROW()
【 例 】 @ row(),col() say ?*?
@ row()+1,col()-1 say ?**?
@ row()+1,col()-2 say ?***?
键状态测试函数,INKEY(<数字表达式 >)
INKEY函数返回按键 ASCⅡ 码值 (0-255),
<数字表达式 >为等待时间 (秒 ) 0为无限时。
【 例 】 x=inkey()
IF x=27
FoxPro程序设计
第 11讲 FoxPro的常用函数
FoxPro For Windows http://cc.synu.edu.cn 2
FoxPro程序设计
什么是函数?
函数是能够返回一个值的子程序 ;
函数由函数名和一对圆括号组成 ;
根据需要用户可以自定义函数 ;
系统提供 200多种系统函数。 MOD( )
STR( )SUBS( )
EOF( )
BOF( )FOUND( )
FoxPro For Windows http://cc.synu.edu.cn 3
FoxPro程序设计
绝对值函数,ABS(<数值表达式 >)
【 例 】 ABS(-12.5)
求平方根函数,SQRT(<数值表达式 >)
【 例 】 SQRT(4) × SQRT(-4)
最大值函数,MAX(<数值表达式 1>,<数值表达式 2>)
【 例 】 MAX(12,4)
最小值函数,MIN(<数值表达式 1>,<数值表达式 2>)
【 例 】 MIN(12,4)
算术函数
FoxPro For Windows http://cc.synu.edu.cn 4
FoxPro程序设计
四舍五入,ROUND(<数值表达式 1>,<数值表达式 2>)
ROUND函数,数值表达式 2>=0,加一位四舍五入;
<0,小数点前,四舍五入。
【 例 】? ROUND(1234.5671,2) && 1234.57
ROUND(1234.5671,0) &&1235
ROUND(1234.5671,-1) && 1230
【 例 】 store 47.6554 to d
round(int(d)+d,2)的执行结果是:
A.94 B.95.66 C.94.655 D.94.66
取整函数,INT(<数值表达式 >)
常用来判别一个数能否被另一个数整除。
例:表达式 INT( X/ 2) =X/ 2
为真,说明 X能被 2整除 (偶数 ),否则不能被 2整除 (奇数 )。
【 例 】 INT(5/2) INT(5/-2) INT(-49,9)
FoxPro For Windows http://cc.synu.edu.cn 5
FoxPro程序设计
求余函数,MOD(<数值表达式 1>,<数值表达式 2>)
MOD函数的功能同模除运算%,符号同数值表达式 2。
符号相同:余数 =被除数 -商 * 除数
符号不同:余数 =(商 +1) * 除数 -被除数
【 例 】
MOD(36,10),MOD(10,36),MOD(36,-10),MOD(10,-36),MOD(-10,36)
6 10 -4 -26 26
注意 FoxPro中无平方函数。对于 X平方可表示为 X^2,X**2或
X*X。
【 例 】 表达式 3*5**2+10%6/2的结果为:
A.227 B.76 C.226 D.77
FoxPro For Windows http://cc.synu.edu.cn 6
FoxPro程序设计
宏替换函数,&<字符型变量 >[.<字符串常量 >]
宏替换函数&替换字符型变量的值,注意在&后的变量必须是字符型。
常用在程序中实现对任意的输入对象进行相关操作。
用,将宏替换函数后的字符串常量分隔。
【 例 】
执行下列命令后,将显示:
store 100 to yz
store 10 to y
store 'z' to n
store 'y&n' to m
&m
A.100 B.0 C.10 D.显示‘变量没找到’
字符函数
FoxPro For Windows http://cc.synu.edu.cn 7
FoxPro程序设计
【 例 】 km=space(8)
@ 5,15 say "请输入数据库文件名," get km
read
use &km
【 例 】 允许 &嵌套
stor 99 to rj &&99
stor "j" to z && j
stor "r&z" to mn && rj
&mn && 99
【 例 】 宏函数与后面字符间,以 "."分隔
stor "/" to c && /
stor "125&c.5" to s && 125/5
【 例 】 X=?1998?
&X+5 &&2003
?&X+5? && 1998+5
FoxPro For Windows http://cc.synu.edu.cn 8
FoxPro程序设计
子串搜索函数:
AT(<字符串表达式 1>,<字符串表达式 2>[,<数值 >])
RAT(<字符串表达式 1>,<字符串表达式 2>[,<数值 >])
子串搜索函数 AT()返回字符串 1在字符串 2中从左边的开始
位置,若字符串 2不包含字符串 1,则返回值为 0。 RAT
从右边开始。
【 例 】?at("for","FoxPro 2.6 for Windows") &&12
【 例 】 x='o'
y='FoxPro 2.6 for Windows'
at(x,y,3) &&13
FoxPro For Windows http://cc.synu.edu.cn 9
FoxPro程序设计
取子串函数,SUBSTR(<字符串 >,<起始位置 >[,<字符个数 >])
取左子串函数,LEFT(<字符串 >,<字符个数 >)
取右子串函数,RIGHT(<字符串 >,<字符个数 >)
【 例 】 str="FoxPro 2.6 for Windows"
subs(str,12,3) &&for
left(str,10) &&FoxPro 2.6
【 例 】 sno=?990108?
Subs(sno,1,2)
Right(sno,2)
注意:使用取子串函数时一定要注意一个汉字占两个字符的位置。
FoxPro For Windows http://cc.synu.edu.cn 10
FoxPro程序设计
删除字符串首、尾空格函数:
ALLTRIM(<字符表达式 >)
TRIM()
LTRIM()
【 例 8.7】
STORE,Good” TO str1
STORE, Morning.” TO str2
Str1+str2,str1+LTRIM(str2)
Good Morning,GoodMorning.
空格函数,SPACE(<数值表达式 >)
串长度函数,LEN(<字符表达式 >)
【 例 】 store space(8) to name
LEN(name)
FoxPro For Windows http://cc.synu.edu.cn 11
FoxPro程序设计
字符串替换函数:
STUFF(<字符表达式 1>,<起始位置 >,<字符个数 >,<字符表达
式 2>)
STUFF函数是串 1从 <起始位置 >开始,删除 <字符个数 >,替换以串 2。
<字符个数 >为 0,插入,串 2为空,删除指定的字符个数。
【 例 】 c="ABCDEFGHIJK"
STUFF(C,4,3,"567") &&ABC567GHIJK
STUFF(c,4,3,"123456") &&ABC123456GHIJK
字符重复函数:
REPLICATE(<字符型表达式 >,<数字型表达式 >)
【 例 】 E="ABC"
repl(E,4) &&ABCABCABCABC
FoxPro For Windows http://cc.synu.edu.cn 12
FoxPro程序设计
系统日期函数,DATE() 格式:取决 SET DATE
系统时间函数,TIME() 格式,HH:MM:SS
年份函数,YEAR(<日期型表达式 >)
月份函数, MONTH(<日期型表达式 >)
日号函数,DAY(<日期型表达式 >)
【 例 】 dd=date()
"今天的日期为,",dd
"今天是 ",year(dd),"年 ",month(dd),"月 ",day(dd),"日 "
日期函数
FoxPro For Windows http://cc.synu.edu.cn 13
FoxPro程序设计
说明,
。用当前系统日期与另外的日期相减以求出这两个日期间的天数,
再除以 365取整后,则为求两个日期之间的相距的年数。
。用 SET CENTURY ON|OFF 改变日期的输出格式。
为 0FF时用 2位数字表示年份,为 ON时用 4位数字表示年份。日期
型变量宽度都为 8。
。日期的表示格式可通过 SET DATE命令设置为其他格式。
例如,
SET DATE BRITISH,设置日期格式为英国格式,即?日 /月 /年 "。
FoxPro For Windows http://cc.synu.edu.cn 14
FoxPro程序设计
在一个表达式中有多种数据类型同时出现时,应将日期型或
数值型转换成字符型,用 "十 "连接后输出,否则会造成数据
类型不统一的错误。
字符转日期函数,CTOD(<字符表达式 >)
日期转字符函数,DTOC(<日期型表达 >)
【 例 】? CTOD ("07/23/98")
DTOC (date())
转换函数
FoxPro For Windows http://cc.synu.edu.cn 15
FoxPro程序设计
数值转字符串函数:
STR(<数值表达式 >[,<长度 >][,<小数位数 >]
字符串转数值函数:
VAL(<字符串表达式 >)
【 例 】 a=123.456
str(a,10,4) &&123.4560
str(a,5) &&123
str(a,4,1) &&123
str(a,2) && **
【 例 】? val("12") && 12.00
val("a12") && 0.00
val("12a") && 12.00
FoxPro For Windows http://cc.synu.edu.cn 16
FoxPro程序设计
大写转小写函数:
LOWER(<字符串表达式 >)
小写转大写函数:
UPPER(<字符串表达式 >)
UPPER()函数和 LOWER()函数常用于判断在不区分大小写
时,某一字符串是否和一固定字符串相同。
例如, UPPER( YN)=? Y”,对于变量 YN中的值无论是
大写的? Y”还是小写的? Y”,该表达式的值都为真。
【 例 】 wait,继续查询吗? y/n” to jx
if upper(jx)=“N”
exit
endif
If upper(jx)=‘n’?
FoxPro For Windows http://cc.synu.edu.cn 17
FoxPro程序设计
字符转换成 ASCⅡ,
ASC('<字符串 >')
ASCⅡ 转换成字符:
CHR(<n>)
【 例 】
? ASC('A')
65
CHR(65)
A
0110001(B)
49(D)
1000001(B)
65(D)
FoxPro For Windows http://cc.synu.edu.cn 18
FoxPro程序设计
字符串长度测试函数,LEN( <字符型表达式 >)
【 例 】 len(space(5)-space(3))的值是:
A.2 B.0 C.5 D.8
求字符串长度时,一个汉字宽度为 2,空格和标点都要计算在内。
工作区测试函数,SELECT()
【 例 】? SELECT()
记录号测试函数,RECNO([<工作区号 >])
【 例 】 USE STUDENT
GO TOP
RECNO()
测试函数
FoxPro For Windows http://cc.synu.edu.cn 19
FoxPro程序设计
库顶测试函数,BOF([<工作区号 >])
库底测试函数,E0F([<工作区号 >])
执行查找命令后,可用 EOF()函数和 FOUND()函数测试是否查找成
功,EOF()值为,F.或 FOUND()函数值为,T.,表示查找成功。
【 例 】
若函数 bof()的返回值为,f.,此时函数 recno()的返回值是:
A.0 B.1 C.top D.当前记录号
查找结果测试函数,FOUND()
【 例 】 IF FOUNT() &&表示找到了
删除记录测试函数,DELETED()
FoxPro For Windows http://cc.synu.edu.cn 20
FoxPro程序设计
文件测试函数,FILE(<字符型表达式 >)
【 例 】? FILE(?student.dbf?)
数据类型测试函数,TYPE(<字符表达式 >)
【 例 】 函数 type([11/20/99])的值为:
A.N B.C C.D D.11/20/99
函数 type("{11/20/99}")的值为?
条件测试函数,IIF(<逻辑表达式 >,<表达式 1>,<表达式 2>)
【 例 】 IIF(x>0,1,-1)
FoxPro For Windows http://cc.synu.edu.cn 21
FoxPro程序设计
列坐标测试函数,COL()
行坐标测试函数,ROW()
【 例 】 @ row(),col() say ?*?
@ row()+1,col()-1 say ?**?
@ row()+1,col()-2 say ?***?
键状态测试函数,INKEY(<数字表达式 >)
INKEY函数返回按键 ASCⅡ 码值 (0-255),
<数字表达式 >为等待时间 (秒 ) 0为无限时。
【 例 】 x=inkey()
IF x=27