Visual FoxPro 6.0学习笔记三

第三章Visual FoxPro 常用函数

内部函数分为数值处理类函数、字符处理类函数、日期及日期时间类函数、数值类型转换类函数和测试类函数。

一、数值处理类函数

ABS(X)取绝对值
INT(X)取整
MAX()取最大值
MIN()取最小值
EXP(x)取e的指数幂
LOG(X)/LOG10(X)以10为底的对数
round(x,n)四舍五入保留小数
SQRT(X)开方
MOD(X,X)取余数
PI()π
Rand()生成随机数

?Abs(-20.4),Abs(10-3.33*4)
?Int(-88.9),Int(28.48*2)
?Max(3,8,-9,5)
?Max({^2004/02/01},{^2003/01/01})
?Max("3","a","C","5")
?Min(3,9,-1,0)
?Min({^2003/01/01},{^2003/01/20})
?Exp(2)+1
?Log(2.71828)+Log10(100)
?Round(123.589,2)
?Round(123.589,0)
?Sqrt(25),Sqrt(24-8)
?Mod(3*4,7),Mod(7,-2)
?2**2*Pi(),2**2*3.14
?Rand()

运行结果为:

X=521&&将X赋值为521
X1=Int(x/100)&&取x除以100的整为5
X2=Int(Mod(x,100)/10)&&x除以100的余数为21,除以10为2.1,取整后为2
X3=Mod(x,10)&&x除以10的余数为1
?x1+x2*10+x3*100&&5+2*10+1*100=125
?x1
?x2
?x3

运行结果为:

二、字符处理类函数

LEN(X)返回字符串的长度
AT(C1,C2,N)返回C1在C2中第几次出现的位置
OCCURS(C1,C2)返回C1在C2中第一次出现的位置
SUBSTR(C,N1,N2)截取字符串,从N1开始截取N2个字符,这里需要注意的是每一个汉字占两个字符
LEFT(C,N)从左边截取字符
RIGHT(C,N)从右边截取字符
LTRIM(C)去掉左边的空格
RTRIM(C)去掉右边的空格
ALLTRIM(C)去掉全部的空格
SPACE(N)生成N个空格
REPLICATE(C,N)将C复制N次
UPPER(C)全部大写
LOWER(C)全部小写
STUFF(C,N1,N2,C2)此字符串是通过用另一个字符表达式替换现有字符表达式中指定数目的字符得到
BETWEEN(N1,N2,N3)判断N1是否在N2,N3组成的取值范围之间

?Len("Hello li"),Len("Visual FoxPro 程序设计")&&计算Hello li的长度,计算Visual FoxPro 程序设计的长度,空格也计算在内。
?At("s","as soon as possible")&&计算s在as soon as possible中第一次出现的位置
?At("s","as soon as possible",3)&&计算s在as soon as possible中第三次出现的位置
?Occurs("a","bacda")&&计算a在bacda出现的次数
?Occurs("学","中华大学保密学院")&&计算学在中华大学保密学院出现的次数
?Substr("zhonghuadaxue",3,2)&&截取zhonghuadaxue中从第三个字符开始的两个字符,第三个字符为o,取两个为on
?Substr("中华大学",3,2)&&截取中华大学中从第三个字符开始的两个字符,每一个汉字为两个字符,所以其实是取第二个字,华
姓名="李小明"&&将姓名赋值为李小明
?Substr("姓名",1,2)="李"&&判断姓名中的第一个字是否为李字
?Left("中华大学",4)&&截取中华大学的前两个字,中华
?Right("中华大学",4)&&截取中华大学的后两个字,大学
?"数"+Ltrim("  据  ")+"库"&&去掉左边的空格后连接字符串
?"数"+Rtrim("  据  ")+"库"&&去掉右边的空格后连接字符串
?"数"+Alltrim("  据  ")+"库"&&去掉两边的空格后连接字符串
?"A"+space(5)+"B"&&在A和B之间插入5个空格
S=Replicate("*",20)&&将*重复20次的值赋给S
?S
?Upper("Hello Li")&&将Hello Li字符串全部大写
?Lower("Hello Li")&&将Hello Li字符串全部小写
S="中华大学"&&将S赋值为中华大学
?Stuff(S,1,4,"清华")&&将S的前两个字替换为清华
X=3&将X赋值为3
?Between(X,0,10)&判断X是否介于0与10之间

运行结果为:

三、日期及日期时间类函数

DATE()返回当前系统日期
TIME()返回当前系统时间
DATETIME()返回当前系统日期时间
YEAR(D)返回日期/日期时间的年份
MONTH(D)返回日期/日期时间的月份
DAY(D)返回日期/日期时间的天数
HOUR(D)返回日期时间的小时
MINUTE(D)返回日期时间的分钟
SEC(D)返回日期时间的秒数

?Date()
?Time()
?DateTime()
?Year(Date())
?Month({^1999/04/08})

运行结果为:

Day({^1999/04/08})&&求1999年4月8日的日
Hour({^1999/04/08 8:20:30a})&&求1999年4月8日上午8点二十分三十秒所对应的小时
Minute({^1999/04/08 8:20:30a})&&求1999年4月8日上午8点二十分三十秒所对应的分钟
Sec({^1999/04/08 8:20:30a})&&求1999年4月8日上午8点二十分三十秒所对应的秒

运行结果为:

四、数据类型转换类函数

VAL(C)从一个由数值组成的字符表达式返回一个数值或货币值,无法转化时返回0
STR(N,N1,N2)将数值型转换为字符型,N1为总长度,N2为小数位数
ASC(N)字符转换为ASCII码
CHR(C)ASCII码值转化为字符
CTOD(X)将字符串转化为日期型
DOTC(D) 将字符串转化为日期时间型

?Val(“123”),Val(“123.5dyx66”)&&分别将123和123.5dyx66中可以转化为数值的部分进行转化
?Val(“123.5e2”),Val(“123.5e90”)&&科学计数法的字符串转化为数值
?Val(“fg7889”)&&无法转化为数值
?Str(667.12345,8,4),Str(667.12345,12,4)&&将667.123456,转化为8位,四位小数的字符串,将667.12345转化为12位,小数位数为4位的字符串
?Str(667.12345,2,4)&&将667.12345转化为总长度为2,小数位数为4的字符串
?Str(667.12345,8),Str(667.12345)&&将667.12345转化为总长度为8的字符串,将667.12345转化为字符串
基本工资=3120&&将基本工资赋值为3120
?”基本工资:",基本工资&&先打印基本工资字符串,再打印基本工资的数值
?”基本工资:”,+Str(基本工资,7,2)&&先打印基本工资字符串,再将基本工资变量转化为总位数为7,小数位数为2的字符串
?Chr(65),Chr(97)&&将ASCII码65转化为字符,将ASCII码97转化为字符
?ASC(“ABC”)&&将A转化为ASCII码值
?Chr(Asc(“M”)+Asc(“a”)-Asc(“A”))&&将M和a的ASCII值相加减去A的ASCII码值得到的ASCII码数值转化为字符
?Ctod(“02/05/99”)&&将字符串转化为1999年2月5日的日期类变量
?Year(Ctod(“02/05/99”))&&将字符串转化为1999年2月5日的日期类变量,再求其年份值
?Dtoc({^2004-03-18})&&将日期类变量2004年3月18日转化为字符串
?”今天是:”+Dtoc(Date())&&先显示今天是的字符串,再将今天的日期转化为字符串显示

运行结果为:

注意:

Str函数中总长度的默认值是10,小数位数的默认值为0,并且在实际操作中,总长度要大于或等于数值表达式的整数部分的长度,才能完成命令。

1、如果总长度大于数值表达式长度或大于数值表达式整数部分和指定小数部分的长度总和,若此时数值的小数位少于指定的小数位数,那么要将它补齐,添加“0”到最低位即最右边;如果数值的小数位等于指定的小数位数,那么多余的字节应该放到最高位即最左边,为空格。

2、如果总长度小于数值表达式长度,特别注意在转换取值的时候,是从左往右算起的,而且遵循四舍五入的原则,也就是说,假如指定的小数位数比从左往右取完整数后剩下的位数要多,实际保留的小数只能占总长度减去整数部分后的长度,如果超出了就四舍五入到剩下的位数。

其中小数点算一位。如果最后一位数是小数点“.”的话,那么应该舍去小数点,把多出的那一个字节放在最高位(即最左边),即此时最高位为空格。

SET CENTURY ON&&设置日期显示世纪
?DATE()&&显示今天的日期
SET CENTURY OFF&&关闭世纪显示
?DATE()&&显示今天的日期
?CTOD(“03/15/16”)&&将字符串转化为2016年3月15日的日期型变量
?DTOC({^2016-3-15})&&将2016年3月15日转化为字符串
?TIME()&&显示当前时间
?YEAR(DATE())&&显示当前年份
SET DATE TO YMD&&将日期的显示设置为年月日的方式
?DATE()&&显示今天的日期
SET DATE TO DMY&&将日期的显示设置为日月年的方式
?CTOD(“^2016/03/16”)&&将字符串转化为2016年3月16日,但显示为日月年
SET DATE TO MDY&&将日期的显示设置为月日年的方式
?DATE()&&显示今天的日期

运行结果为:

五、其他函数

其他函数:1.逻辑函数IIF(expr,truepart, falsepart)&&如果expr的值为真,则返回turepart的值,否则则返回falsepart的值。

2.宏替换函数:其实质是间接取值。用事先定义好的一串字符取代宏替换调用。格式为:&字符型内存变量[.]
3.表达式类型测试函数TYPE():计算字符表达式,并返回其内容的数据类型。
4.文件测试函数FILE():指定要查找的文件名。cFileName 必须包含文件拓展名。可以在文件名中包含路径以便搜索非当前目录或驱动器下的文件。如果文件名中没包含路径,Visual FoxPro 会在默认目录下搜索该文件。如果在默认目录下没找到该文件,Visual FoxPro 会沿着 SET PATH 确定的 Visual FoxPro 路径搜索。
5.打开文件函数GETFILE():显示打开对话框,并返回选定文件的名称。
6.信息显示函数MESSAGEBOX():用于在 Visual FoxPro 程序中显示消息对话框,用户可以通过对话框中的按钮进行选择,该函数的返回值根据用户的选择而变化,以表示用户的操作。

x=5&&将x赋值为5
y=7&&将y赋值为7
z=IFF(x>y,x-y,y-x)&&判断x是否大于y,为假,则返回y-x的值为2
?z&&显示z的值
cName=”李小明”&&将cName赋值为李小明
XM=”cName”&&宏替换
?&XM+”你好!”&&调用cName的值
c_nVar=”254”&&宏替换
?&c_nVar+6&&调用c_nVar的值,此时可以进行数值运算
cVar=”FOX”&&宏替换
?”Visual &cVar.Pro”&&调用cVar但因为是字符串的拼接,为了分隔需要在变量名和字符串之间加一个"."
?Type(‘25**2-26’),Type(‘10>0’)&&计算25的平方减去26的值,并返回其数据类型
?Type(“Date()”),Type(“X>10”)&&计算今天的日期,并返回其数据类型;计算10>0表达式的真假,并返回其类型
?File(“Clock.SCX”)&&检查是否有Clock.SCX这个文件
Filename=GETFILE(“scx”,”打开表单文件”)&&显示打开对话框
?FileName&&显示用户选择的文件名
nMessage=Messagebox(“单击“确定”继续!”,0,”提示信息”)&&显示消息对话框
?nMessage&&展示用户选择对应的数值
nMessage=Messagebox(“文档已被更改,是否保存!”,3+16+256,”警告!”)&&显示消息对话框

?nMessage&&展示用户选择对应的数值

运行结果为:

思考与练习

1.(1)求388/67,sqrt(138),2^6/5,10中最大的数

?Max(388/67,sqrt(138),2^6/5,10)

运行结果为:
(2)X的绝对值大于等于0

?abs(X)>=0
(3)X开方后乘10,结果四舍五入,保留两位小数

round(sqrt(X)*10,2)
(4)对90.88取整除10

90.88%10
(5)Ltrim(“  **  ”)+”计算机”&&将“  **  ”前面的空格去掉再与计算机进行拼接

运行结果为:
(6)Len(trim(“  姓名  ”))

这里我们进行拆分,先看里面函数的计算结果

?"|"+trim("  姓名  ")+"|"

运行结果为:这里只去掉了姓名右侧的空格,前面的两个空格仍然存在。

所以再执行计算长度的命令时,返回的计算结果应该是6个字符串。运行结果为:
(7)Substr(“李小明同志”,3)&&从第三个字符开始取,一直取到末尾。

运行结果为:
(8)Substr(“62885”,at(“8”,”62885”),2)&&从第一个8所在的位置开始取取2个字符。

运行结果为:
(9)Ceiling(12.5),Floor(12.5)&&12.5向上取整为13,12.5向下取整为12

运行结果为:
(10)对姓名(变量)的值取第1个汉字,判断这个汉字是否为“赵”

left(姓名,2)=”赵”
(11)出生年月(日期变量)大于等于1970年1月1日的人员

出生日期>={^1970/01/01}
(12)把“123456”转换为数值后和100相加

c_Var="123456"
?100+&c_Var

运行结果为:

2.(1)1/3+1/2+1/4

运算结果为:

(2)sinπ/5+tanπ/6

?sin(pi()/5)+tan(pi()/6)

运行结果为:

(3)

x=8.5
y=12.6
?(x**3+y**3)/(sqrt(x+y)-x*y)

运行结果为:

(4)计算迄今为止香港回归了多少天。

?date()-{^1997/07/01}

运行结果为:

(5)设直角三角形的两个直角边分别为a=12,b=13,求斜边c的长度。

a=12
b=13
c=sqrt(a**2+b**2)
?c

运行结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值