下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章VFP表达式及应用数据是程序加工处理的对象,并以某种特定的形式存在。在VFP中,各个数据的类型可能不同,不同数据类型决定了数据不同的存储方式与运算方法。表达式是运算符连接常数、变量和函数等构成的运算式。表达式作为命令的重要组成部分,主要完成各种计算任务。2.1 数据类型与常数常数是在命令或程序执行过程中保持不变的量,而变量则指其值可以变化的量。2.1.1 数值型数据数值型数据,即能参与算术运算的数据,由数字09、小数点与正负号组成,其数据类型用符号N表示。数值型数据在内存中占8个字节,能表示120位数据,整数在-6899999999999998至6899999999999998之间无误差
2、;能表示的小数位数为019,小数位数w15位(不含符号位)无误差。数值型常数是整数或实数,如:23、-153和123.48,也可以用科学计数法表示数值型数据,如:用2.34e+4表示2.34X104,即23400。2.1.2 字符型数据字符型数据是英文字母、汉字或数字等符号组成的一串字符,其数据类型用符号C表示。一个字符型数据最多可由16777184个字符组成,半角英文字符占一个字节,一个汉字或全角字符占两个字节。字符型常数也称为字符串,是用定界符括起来的一串字符。定界符可以是半角的单引号、双引号或方括号,必须成对使用。如:'我是学生'、”IStudyVFP”和男都是字符型常数
3、。定界符本身不作为字符型常数的内容,当某种定界符是字符串中的内容时,必须用另一种定界符作为标志,女口:老师说:”明天交作业”和“Windows”操作。字符串长度是指字符串中所含字符的个数(1个半角字符长度为1,1个汉字或全角字符长度为2)。如:字符串常数”说:'What'”的长度为9。2.1.3 货币型数据货币型数据作为一种特殊的数值型数据,用来表示货币值。其数据类型用符号Y表示。货币型常数是在数值前加货币符号$,如:$12.34。货币型常数在存储和计算时,系统自动保留4位小数,小数多于4位时四舍五入。如:$123.456789将自动存储为$123.4568。货币型数据在内存中
4、占8个字节,取值范围为-922337203685477.5807922337203685477.5807。与数值型数据不同,货币型常数不能用科学计数法表示。2.1.4 日期型数据日期型数据可表示某一个日期。数据类型用符号D表示,占8个字节,取值范围为:0001年1月1日9999年12月31日。日期型常数用一对大括号“”括起来,其中包含年、月、日三部分内容,各部分内容之间可以用斜杠(/)、连字号(-)、小数点(.)或空格等进行分隔。1. 设置传统/严格日期格式日期型常数有传统和严格两种格式。传统的默认格式是美语日期格式mm/dd/yy。传统格式受命令SetDate和SetCentury的影响。不
5、同设置状态,VFP对同一个日期型常数的解释不一样。女口:对日期型常数08/10/01,VFP可能认为是2008年10月1日或2001年8月10日。严格日期格式为Ayyyy-mm-dd或yyyy/mm/dd。用符号"A”作为严格日期常数的开始符号,年月日的次序不能改变,年份必须为4位,它不受命令SetDate和SetCentury命令的影响,在任何情况下都表示唯一确切的日期。两种日期常数格式可通过命令进行设置:命令格式:SetStrictdateTo0|1命令说明:设置传统日期格式命令说明:设置传统日期格式0)或严格日期格式(1)。例2.1】SetStrictdateTo0&&
6、amp;SetDateAnsiSetCenturyOnX=07.10.01&&X?X&&SetStrictdateTo1&&Y=A2008/10/01&&Y设置成传统日期格式赋值成:2007年10月1日输出结果为:设置成严格日期格式赋值成:2008年10月1日2. 设置日期分隔符命令格式:SetMarkTo<字符表达式>命令说明:设置显示日期时的分隔符。字符表达式值中的首字符为分隔符。若省略<字符表达式>,则恢复系统默认的分隔符。【例2.2】SetDateANSISetCenturyOnSetMarkTo“
7、-?2007/10/01&&输出结果为:2007-10-01SetMarkTo.?2007/10/01&&输出结果为:SetMarkTow'?A2007/10/01&&输出结果为:2007w10w01SetMarkTo?A2007/10/01&&输出默认的分隔符,结果为:3. 设置世纪值命令格式:SetCenturyTo<命令格式:SetCenturyTo<世纪值>Rollover<年份参照值>命令说明:世纪值范围为199,年份值范围为099。此命令仅对两位年份的日期有影响。执行此命令后,设某
8、日期数据为MM/DD/YY,当YY年份参照值时,系统将该日期数据视为:MM/DD/世纪值*100+YY;当YY<年份参照值时,系统将该日期数据视为:MM/DD/(世纪值+1)*100+YY。【例2.3】SetDateANSISetCenturyOnSetCenturyTo19Rollover10SetMarkTo"."?Ctod(“”)&&由于年份值49>年份参照值10,输出:?Ctod(“”)&&由于年份值09<年份参照值10,输出:2.1.5 日期时间型数据日期时间型数据表示日期和时间,其数据类型用符号T表示。日期时间型
9、数据占8个字节。日期时间型常数由日期和时间两部分组成,日期部分取值范围为0001年1月1日至9999年12月31日,时间部分为00:00:00Am至11:59:59Pm。日期部分也有传统和严格两种格式。系统默认采用严格的日期时间格式:Ayyyy-mm-dd,hh:mm:ssa|p,日期和时间之间可以用逗号或空格分隔,a(或AM表示上午;p(或PM表示下午,默认是AM女口:人2008-8-18:18:30表示2008年8月1日上午8点18分30秒。人2008-8-18:18:30P表示2008年8月1日下午8点18分30秒。2.1.6 逻辑型数据逻辑型数据用来表示逻辑判断的结果,比如条件成立与否
10、,事物的真或假、是与非等。其数据类型用符号L表示,逻辑型数据占1个字节。逻辑型常数只有真和假两种值。用.、.t.、丫.或.y.表示真;用.F.、.f.、.N.或n表示假。作为逻辑型常数定界符的前后小数点“.”不能省略。2.2 简单内存变量变量分为内存变量和字段变量两类。内存变量又分为简单变量和数组变量两类。内存变量存储在内存中,用来存放程序执行中的原始数据或中间结果。内存变量名由字母、汉字、数字或下划线组成,不能以数字开头。如X、年龄和_No都是内存变量名。而1月工资、$12.3和a+B不是正确的内存变量名。在VFP中,允许内存变量和字段变量同名,如果内存变量与当前表中的字段(变量)出现重名,
11、在引用内存变量时,需要加前缀“M.”或“M->”,明确指出内存变量。如果不加前缀,将引用同名字段变量的值。如:M.姓名表示引用内存变量姓名的值。2.2.1 内存变量赋值使内存变量有确切值的操作称为内存变量赋值。在VFP中,使用内存变量前必须先赋值。通过赋值命令为内存变量首次赋值时,就创建(定义)了内存变量,既规定了变量名,又指定了变量的值。所赋值的数据类型决定了内存变量的数据类型。有许多为内存变量赋值的命令,典型的命令有:命令格式1:<内存变量名>=<表达式>命令格式2:Store<表达式>To<内存变量名表>命令说明:两条命令的功能都是将
12、表达式的值赋给内存变量。格式1只能给一个内存变量赋值;格式2可以同时给多个内存变量赋相同的值。【例2.4】M=”男”&&执行后m的值为:男,其数据类型为字符型Store2*3ToX,Y&&执行后X和Y的值都是6,数据类型都为数值型内存变量的清除内存变量使用完毕,应该从内存中将其清除,以便释放更多的可用内存空间。清除(释放)内存变量的命令有:命令格式1:ClearMemory命令格式2:Release<内存变量名表>命令说明:格式1清除全部内存变量和数组,格式2清除指定的内存变量和数组。【例2.5】Store2*4ToX,Y,ZReleaseX?Y&a
13、mp;&内存变量仍然存在,输出8?X&&由于X被清除,故系统提示:找不到变量X命令格式3:ClearAll命令说明:用于关闭所有打开的文件,清楚全部内存变量和数组,也称初始化命令。命令格式4:ReleaseAllLike<变量名通配符>|Except<变量名通配符>命令说明:变量名通配符中可以包含“?”或“*”,表示一批变量。其中“?”代表其出现位置的任意一个字符(如果出现在最后,也表示没有字符),例如,“X?'表示以X开头,最多由两个字符组成的一批变量名;通配符“*”代表其出现位置的任意多个(包括没有)字符,即字符个数是任意的,每位上的
14、字符也是任意的。如:“X*”表示变量名以X开头的所有变量。各选项的含义为:(1)All:清除所有内存变量和数组。2)AllLike<变量名通配符>:清除与“变量名通配符”匹配的变量和数组。3)AllExcept<变量名通配符>:清除与“变量名通配符”不能匹配的变量和数组。例2.6】Store1ToX,X1,X11,X12,Y,Y1,Y2,Y11,Y12,M1,M12,N1,N12ReleaseAllLikeY1?&&ReleaseAllLikeX*&&ReleaseAllExceptM*&&ClearAll&&am
15、p;清除Y1,Y11和Y12清除X,X1,X11和X12仅保留M1和M12释放全部内存变量,并关闭所有文件输出表达式值可以通过VFP命令输出表达式的值(即运算结果)命令格式1:?<表达式表>命令格式2:?<表达式表>命令说明:先计算“表达式表”中每个表达式的值,再依次输出这些值。格式1从下一行开始位置输出计算结果,若省略“表达式表”,则输出一个空行。格式2从当前位置开始输出计算结果。【例2.7】?'总成绩',62+20?"分"&&输出:总成绩82分数值型表达式表达式是运算符连接常数、变量和函数等运算对象所构成的运算式。
16、运算符是对数据进行操作的符号。单个常数、变量和函数是表达式的特例,即只有一个运算对象,没有运算符。表达式的运算结果称为表达式的值,根据表达式值的数据类型可分为数值表达式、字符表达式、日期表达式、关系表达式和逻辑表达式。在VFP中只有同类型的数据(除日期与数值运算外)才能进行运算。数值运算符VFP中的数值运算符如表2.1o表2.1数值运算符优先级别算术运算符说明数学表达式转换成VFP表达式1+、-取正负-(+X)-(+X)2*或A乘方kXA3或x*33*、/、%乘、除、求余-3X-+12一X2/(3*X+1)/(X-1)4+、-加、减X+Y-1X+Y-1在表2.1中,取负运算的优先级别最高,其次
17、是乘方,然后是乘、除法与求余运算(同级),最后是加与减运算(同级)。当两个同符号数求余运算(%时,结果为第一个数除以第二个数的余数;当两个异符号数求余时,结果为第一个数除以第二个数的余数再加上第二个数。【例2.8】?8%3,8%-3,-8%3,-8%-3&&输出结果为:2-11-2常用数值型函数函数作为一种特殊的表达式,可分为系统函数和用户自定义函数。系统函数也称为标准函数,是VFP系统定义的函数,可以直接使用。自定义函数是用户编写的子程序。通常调用一个函数需要带有参数,调用结束后会有一个运算结果,称运算结果为函数返回值或函数值。返回值的类型决定了函数的数据类型。数值型函数指函
18、数值为数值型。1. 符号函数函数格式:Sign(数值表达式)函数说明:返回值表示数值表达式值的符号。表达式的值为正、零和负值时,函数值分别是1、0和-1o【例2.9】X=2*4?Sign(X),Sign(X-8),Sign(-X)&&输出结果为:10-10。0。2. 求绝对值函数函数格式:Abs(<数值表达式>)函数说明:返回值为数值表达式的绝对值。【例2.10】X=-2*3?Abs(X+3)&&输出结果为:33. 求平方根函数函数格式:Sqrt(<数值表达式>)函数说明:返回值是数值表达式值的算术平方根,数值表达式值必须大于或等于【例2
19、.11】?Sqrt(16)&&输出结果为:4.004. 求指数函数函数格式:Exp(<数值表达式>)函数说明:若数值表达式的值为x,则函数返回值是ex。【例2.12】?Exp(0),Exp(2)&&输出结果为:5. 求自然对数函数函数格式:Log(<数值表达式>)函数说明:函数返回值是以e为底数,表达式值的对数。数值表达式值必须大于例2.13】6. 求余函数函数格式:Mod(<数值表达式1>,<数值表达式2>)函数说明:函数值是数值表达式1除以数值表达式2的余数。功能与“<数值表达式1>%<数值表
20、达式2>”相同。【例2.14】?Mod(8,3),Mod(8,-3),Mod(-8,3),Mod(-8,-3)&&输出结果是:2-11-27. 求圆周率函数函数格式:Pi()函数说明:函数返回值是圆周率。其精度与SetDecimalto<小数位数>命令有关,系统默认显示到小数点后两位。【例2.15】SetDecimalto10&&设置小数点后显示10位?Pi()*10*10&&输出结果为:314 求最大值和最小值函数函数格式:Max(<表达式表)Min(<表达式表)函数说明:Max函数是求表
21、达式表中所有表达式值的最大者。Min函数是求最小者。各表达式的数据类型必须一致,,可以是数值型、字符型、货币型、日期型、日期时间型或逻辑型等。此类函数可以有多个参数,至少要有两个参数。【例2.16】?Max(8,-2*3,10,3),Min(8,-2*3,10,3)&&输出:10-6?Max(A','B','C'),max(.f.,.T.,.n.)&&输出:C.T.?Max($200,$100,$300)&&输出:300.00009. 求整函数函数格式1:Int(数值表达式)函数格式2:Ceiling(数值
22、表达式)函数格式3:Floor(数值表达式)函数说明:Int函数的值是数值表达式的整数部分,而不是四舍五入;Ceiling函数值是大于或等于数值表达式值的最小整数;Floor函数值是小于或等于数值表达式值的最大整数。【例2.17】?Int(2.8),Int(-2.8)&&输出结果为:2-2?Ceiling(2.8),Ceiling(-2.8)&&输出结果为:3-2?Floor(2.8),Floor(-2.8)&&输出结果为:2-310. 四舍五入函数函数格式:Round(数值表达式1,数值表达式2)函数说明:返回值为数值表达式1的值在指定位置上四
23、舍五入后的结果。四舍五入位置由数值表达式2的值决定。若数值表达式2的值小于0,数值表达式2的绝对值表示对数值表达式1在整数位(0为个位)上进行四舍五入,即0表示在小数点后第一位上进行四舍五入,保留到个位;-1表示在个位上进行四舍五入,保留到十位;依次类推。【例2.18】?Round(2.56,1),Round(2.56,0),&&输出:2.63?Round(2.56,-1),Round(7.56,-1)&&输出:01011. 求ASCII码值函数函数格式:Asc(字符表达式)函数说明:返回值是字符表达式值中首字符的ASCII码值。【例2.19】?Asc(”Eng
24、lishAbe”)&&输出结果为E的ASCII码值:6912. 求字符串长度函数函数格式:Len(字符表达式)函数说明:返回值是字符表达式值中所含字符的个数,空格也计算在内。每个汉字占两个字符位置。【例2.20】?Len(”学习iVFP6.0”)&&输出结果为:1113. 求子串起始位置函数函数格式:At(字符表达式1,字符表达式2,数值表达式)Atc(字符表达式1,字符表达式2,数值表达式)函数说明:设数值表达式值的整数部分为n,当n=1时,可以省略数值表达式。函数值是字符表达式1的值在字符表达式2值中第n出现(由左至右)的开始位置,如果出现次数小于n,则函数
25、值为0。At函数区分字母大小写,而Atc函数不区分字母大小写,其余功能两个函数一致。【例2.21】?AT('AR','cadARA'),AT('AA','cadAARA',2),ATC('A','cadARA')&&输出:40214. 求子串出现次数函数函数格式:Occurs(字符表达式1,字符表达式2)函数说明:计算字符表达式1的值在字符表达式2值中出现的次数。【例2.22】Occurs(“ab”,”cabdabe”),Occurs(“ab”,”cadbaeb”)&&
26、;输出:2015. 求年份函数函数格式:Year(日期表达式)函数说明:函数值是日期表达式值的年份值,值范围为00019999。【例2.23】?Year(A2007-10-01)&&输出:200716. 求月份函数函数格式:Month(日期表达式)函数说明:函数值是日期表达式值中的月份值,值范围为112。【例2.24】?Month(A2007-10-01)&&输出:1017. 求星期函数函数格式:Dow(日期表达式)函数说明:函数值是日期表达式值对应的星期几。值范围为17,其中1代表星期日、2代表星期一、7代表星期六。【例2.25】?Dow(A1949/10/0
27、1)&&输出:7,代表星期六18. 求日数函数函数格式:Day(日期表达式)函数说明:函数值是日期表达式值的日数,值范围为131。例2.26】19. 求小时函数函数格式:Hour(日期时间表达式)函数说明:函数值表示小时,采用24小时制。【例2.27】?Hour02OO7-O5-O11:22:33p)&&输出:1320. 求分钟函数函数格式:Minute(日期时间表达式)函数说明:函数值表示分钟。【例2.28】?Minute02OO7-O5-O11:22:33p)&&输出:2221. 求秒钟函数函数格式:Sec(日期时间表达式)函数说明:函数值表
28、示秒数。【例2.29】?Sec(A2OO7-O5-O11:22:33p)&&输出结果为:3322. 字符转换成数值函数函数格式:Val(字符表达式)函数说明:将字符表达式值的首部可转换的子串转换成数值型数据,作为函数的返回值。如果字符串的首字符不是可转换符号,则函数返回值为O。例2.3O】?Val("-2")*3,Val("1.2E1")*3&&输出结果为:-6.0036.00?Val("1.23a56")*2,Val("A123")&&输出结果为:2.3 字符型表达
29、式字符表达式是字符运算符连接字符型数据的运算式,运算结果是字符型数据。2.4.1 字符运算符VFP中有两种字符运算符:(1)+:将两个字符型数据依次连接起来,构成一个新的字符型数据。(2)-:先将第一个字符型数据的尾部空格移动到第二个字符型数据的尾部,再依次连接成一个新的字符型数据。【例2.31】S仁'学生S2='-成-绩-'?S1+S2+'1表1A&&输出:1学1生hi成1绩表1A?S1-S2+'1表1A'&&输出:1学1生1成1绩1111表1A可见运算符“”并不移动第一个字符型数据的中间空格位置。2.4.2 常
30、用字符型函数字符型函数是指函数值为字符型数据的函数。1. 生成空格函数函数格式:Space(数值表达式)函数说明:数值表达式的值应大于或等于0。设其整数部分为n,利用此函数可以产生由n个空格的字符串。若n等于0,则函数产生一个空字符串,即长度为0的字符串。【例2.32】?'VFP'+Space(3)+'6.0版'&&输出结果为:VFP1116.0版2. 删除空格函数函数格式:Ltrim(字符表达式)Trim(字符表达式)Rtrim(字符表达式)Alltrim(字符表达式)函数说明:利用Ltrim、Trim和Alltrim函数可分别去掉字符表达式值
31、的左端空格、尾部空格和两端空格。Trim和Rtrim功能相同。【例2.33】?Ltrim('成绩')&&输出:成绩?Trim('成绩')&&输出成绩?Alltrim(')成)绩)')&&输出:成绩可见这3个函数都不能去掉字符表达式值的中间空格。3. 取左子串函数函数格式:Left(字符表达式,长度)函数说明:长度是数值表达式。设其值的整数部分为n,从字符表达式值的左端第一个字符开始取n个字符作为函数值。【例2.34】?Left(”VFP6.0”,3)&&输出结果为:VFP4. 取右子
32、串函数函数格式:Right(字符表达式,长度)函数说明:从字符表达式值的最右端开始向左取子串,其他同left函数。【例2.35】?Right(”吉林大学”,4)?Right(”吉林大学”,4)&&输出结果为:大学5. 取任意子串函数函数格式:Substr(字符表达式,起始位置,长度)函数说明:从字符表达式值的起始位置取指定长度的子串作为函数值。起始位置和长度都是数值表达式,系统对起始位置和长度自动取整。【例2.36】X=”2008年北京奥林匹克运动会”?Substr(X,7,6)+Substr(X,19,2)+Substr(X,23,2)&&输出结果为:北京奥运
33、会6. 复制字符函数函数格式:Replicate(字符表达式,数值表达式)函数说明:将字符表达式值复制后形成新的字符串,复制次数由数值表达式值的整数部分确定。【例2.37】?Replicate(”*”,4)&&输出结果为:*7. 子串替换函数函数格式:Stuff(字符表达式1,开始位置,长度,字符表达式2)函数说明:开始位置,长度都为数值表达式,系统自动取整,设长度值的整数部分为n。函数的功能是用字符表达式2的值替换字符表达式1值中开始位置的n个字符。若长度值是0,则将字符表达式2的值插在开始位置字符之前;若字符表达式2的值是空字符串,则删除字符表达式1中开始位置的n个字符。【
34、例2.38】?Stuff('ABC',2,1,'XY'),Stuff('ABCDE',3.98,0,'XY')&&输出:AXYCABXYCDE?Stuff('ABCDE',3.98,2,'')&&输出:ABE8. 字符翻译函数函数格式:Chrtran(字符表达式1,字符表达式2,字符表达式3)函数说明:对字符表达式1值中的每个字符在字符表达式2值中确定其出现位置n,若n0且小于或等于字符表达式3值的长度,则用字符表达式3值中的第n个字符替换字符表达式1中的当前字符;若
35、n大于字符表达式3值的长度,则从字符表达式1值中删除当前字符;若n=0,则字符表达式1值中的当前字符不变。输出结果:XBXYXD输出结果:AXYDE输出结果:XBD例2.39】Chrtran('ABACAD','AC','XY')&&Chrtran('ABCDE','BC','XYZ')&&Chrtran('ABCD','AC','X')&&9. 字符匹配函数函数格式:Like(字符表达式1,字符表达式2
36、)函数说明:若字符表达式1与字符表达式2的值相匹配,则函数值是.T.,否则函数值是.F.。字符表达式1中允许使用“”和“?”通配符。字符表达式2中出现的“”和“?”是普通字符。【例2.40】?Like('*A*','GCADFR'),Like('GCADFR','*A*')&&输出结果:.T.F.10. 大小写字母转换函数函数格式:Lower(字符表达式)Upper(字符表达式)函数说明:Lower函数将字符表达式值中的大写字母转换为小写;Upper函数将字符表达式值中的小写字母转换为大写。在转换时其他字符不变。【
37、例2.41】?Lower(”英语2AbC”),Upper(”英语2AbC”)&&输出:英语2abc英语2ABC11. 系统时间函数函数格式:Time(<数值表达式>)函数说明:函数返回值为字符型数据,值为系统当前时间,数值表达式可以是任意值,表示时间精确到百分秒。格式为:hh:mm:ss.<百分秒>,采用24小时制。【例2.42】?”现在时间是”+Time()&&输出:现在时间是14:20:30?”现在时间是”+Time(1)&&输出:现在时间是14:20:30.8512. 数值转换成字符函数函数格式:Str(<数值
38、表达式>,<长度>,<小数位数>)函数说明:将数值表达式值转换成字符型数据。<长度>和<小数位数>是数值型表达式,系统自动取整。<长度指转换后字符串的整数、小数和1位小数点的总长度。【例2.43】?Str(3.146,5,3)&&输出结果为:3.146?Str(3.146,6,1)&&输出结果为:m3.1设:<长度>为m,<小数位数>为n,<数值表达式>值的整数位数为k。(1) 省略m和n:系统默认m是10,n是0。若k>10,则用科学记数法表示结果;若k<
39、;10,则数据右对齐且左补空格。【例2.44】?Str(.123)&&输出结果为1.234E+10?Str(123.456)&&输出结果为123(2) m=0:则结果为空串。【例2.45】?Str(123456789.983,0,3)(3) m<k:若m<6,则结果为一串“;若m>=6,则结果为整数,且用科学记数法表示结果。【例2.46】?Str(12345.987,4,3)&&输出结果为:*?Str(123456789.983,7,3)&&输出结果为:1.2E+8(4) 在m,n和k不能全满足要求时:保证顺序:
40、n。当m>k时,则保留m-k-1位小数(留1位放小数点),转换时在保留位的后1位上进行四舍五入。【例2.47】?Str(123.45678,6,3)&&输出结果为:123.46(5)转换后的字符串长度小于m:则数据右对齐且左补空格。【例2.48】?Str(1.234,6,2)&&输出结果为:1.2313. 日期转换成字符函数函数格式:Dtoc(<日期表达式>)函数说明:将日期表达式的值转换成字符型数据。函数值的格式与SetDate和SetCentury的设置有关。【例2.49】SetDateANSISetCenturyOn?'建国日期是
41、+Dtoc(T949/10/01)&&输出:建国日期是14. 数据类型函数函数格式:Vartype(<表达式>)Type('<表达式>')函数说明:Vartype与Type函数的功能类似,函数值都是大写数据类型符号,用以指出表达式值的数据类型。两个函数的区别:Type函数将字符常数的内容作为表达式测试,而Vartype函数直接测试表达式;若表达式值为.Null.,则Vartype函数值为X,而Type函数值可能为U或某种数据类型符号;若测试的表达式中包含运算符和不符合运算要求的运算项(如未定义的变量和数据类型不一致等)只能用Type函数测
42、试(函数值为U),而Vartype函数可以直接测试一个未定义的变量(函数值为U)。【例2.50】M=”A”?Vartype(123.4),Vartype('123.4'),Vartype($123.4)&&?Type('123.4'),Type("123.4"),Type($123.4)&&?Vartype(Date(),Vartype(Time(),Vartype(Datetime()&&输出:NCY输出:NCY输出:DCTN=1K=3K=.Null.?Vart(M),Vart(N),Vart
43、(Y),Vart(.Null.),Vart(K)&&?Type('M'),Type("N"),Type(M+N),Type(.Null.),Type(K)&&输出:CNUXX输出:CNUUN日期及日期时间型表达式日期型表达式是日期运算符连接日期或数值型数据所构成的运算式,运算结果可能是日期或数值型数据。日期时间型表达式是日期时间运算符连接日期时间或数值型数据所构成的运算式,运算结果可能是日期时间或数值型数据。日期运算符日期运算符有“+”和“”。1.日期与数值运算运算格式:<日期表达式>±<数值表达式
44、>运算说明:数值表达式的值表示天数,运算时对数值表达式自动取整。设数值表达式值的整数为n,则"+”表示求日期表达式值n天后的日期;“-”表示求日期表达式值n天前的日期。【例2.51】SetCenturyOnSetDateANSI?人2008-09-10+1,人2008-09-10-1&&输出:?人2008-10-01+1.56&&对1.56自动取为1。输出:?A2008-10-03-1.12&&对1.12自动取为2。输出:2.日期与日期运算运算格式:日期表达式日期表达式运算说明:运算结果表示两个日期之间相差的天数。例2.52】?A
45、2007-05-04-A2006-05-04,A2005-05-04-A2005-05-06&&输出:365-22.5.2 日期时间运算符日期时间运算符有“+”和“1.日期时间与数值运算运算格式:日期时间表达式±数值表达式运算说明:数值表达式的值表示秒数,运算时取整数为运算说明:数值表达式的值表示秒数,运算时取整数为n。则“+”表示求日期时间n秒前的日期时间。表达式值n秒后的日期时间;“-”表示求日期时间表达式值例2.53】SetCenturyOnSetDateANSI?A2007-05-0122:22:33+3&&输出结果为:2007.05.0110
46、:22:36PM?A2007-05-0122:22:33+3.12&&输出结果为:2007.05.0110:22:36PM?A2007-05-0122:22:33+3.98&&输出结果为:2007.05.0110:22:37PM?A2007-05-0122:22:33-1.2&&输出结果为:2007.05.0110:22:32PM?A2007-05-0122:22:33-1.98&&输出结果为:2007.05.0110:22:31PM2.日期时间与日期时间运算运算格式:日期时间表达式日期时间表达式运算说明:运算结果表示两个日期时间
47、之间相差的秒数。【例2.54】?人2007-05-0122:22:33-人2007-05-0122:21:33&&输出结果为:60?人2007-05-0122:22:33-A2007-05-0122:23:33&&输出结果为:-602.5.3 常用日期型函数日期函数的返回值是日期型数据。1. 系统日期函数函数格式:Date()函数说明:函数值为系统当前日期。【例2.55】SetDateANSISetCenturyOn?Date()&&输出系统的当前日期2. 字符转换成日期函数函数格式:Ctod(<字符表达式>)函数说明:将符合日期格式
48、的字符表达式值转换成日期型数据。若字符表达式值不符合日期格式要求,则返回空日期型数据。【例2.56】SetDateANSISetCenturyOn?Ctod('2008.10.01')+2&&输出结果为:2.6 关系表达式关系表达式,也称为比较表达式,采用关系运算符将同类型数据连接起来,以便进行比较。可以对字符型、数值型、日期、日期时间型或逻辑型数据进行关系运算。关系运算的结果是逻辑型数据。当关系成立时,运算结果为真();否则运算结果为假(.F.)。关系运算符如表2.2。表2.2关系运算符运算符说明举例运算符说明举例>大于2>3值为.F.>=大
49、于或等于人2007-10-2>=人2007-10-1值为.T.<小于值为.F.<=小于或等于2<=32<=2值为.T.值为.T.V>、!=或#不等于字符精确相等'丁'<>'于'值为.T.'Abc'='Ab'值为.F.$等于测试子串包含'草'='张'2*3=6'Bc'$'ABcd'值为.F.值为.T.值为.T.各种关系运算符的优先级别相同,运算符“$”只能对字符型数据进行比较。在进行关系运算时,数值型数据依据数学上的比较规
50、则;日期及日期时间型数据比较时,较后的日期(时间)大于较前的日期(时间);逻辑型数据比较时,逻辑真(.)大于逻辑假(.F.)。字符型数据的比较结果取决于当前的比较规则和“排序次序”。字符型数据的比较规则字符型数据的比较规则有精确比较和非精确比较两种规则。在不同规则下,两个字符型数据的比较结果可能不同。通过VFP命令可以设置字符型数据的比较规则。命令格式:SetExactOn|Of命令说明:SetExactOn是精确比较规则;SetExactOff(系统默认)是非精确比较规则。运算符“=”不受SetExact状态影响,它要求两个字符串(包含空格)必须完全致,运算结果才是真(.T.)。1.精确比较
51、规则精确比较是对两个字符型数据去掉尾部空格后的字符串自左向右按对应字符进行比较。如果比较到某位字符不相等,则包含小字符的字符串较小;如果比较到较短字符串的末尾还没比较出大小关系,则短字符串较小;如果两个字符串完全相同(对应字符和长度均相同),则运算结果为相等(=)。【例2.57】输出为:.F输出为:.FSetExactOn?'BAG'='BAGi'CAME'v'COM','BEE'v='BE'&&2非精确比较规则非精确比较是对两个字符型数据(含空格)自左向右按对应字符进行比较。如果比较到某位
52、字符不相等,则包含小字符的数据较小;如果运算符右侧整个数据是左侧数据的首部子串,或两个数据完全相同,则运算结果为相等(=);如果运算符左侧整个数据是右侧数据的首部子串,则左侧数据较小。【例2.58】SetExactOff?'BAG'v'BAY','BEE'='BE','BAG'v'BAG','李'<'李明&&输出为:.无论执行字符型数据的哪个比较规则和“排序次序”,字符的排序规律为:数字小于英文字母,英文字母小于汉字。2.6.2 字符数据的“排序次序”V
53、FP的"排序次序”对字符串比较结果有影响。系统提供了Machine(机内码)、Pinyin(拼音)和Stroke(笔划)3种"排序次序”,系统默认"排序次序”是Machine。设置字符“排序次序”的方法有:方法一:“工具”菜单选项”7“数据”选项卡t从“排序序列”下拉列表框中选择排序次序设置为默认值确定”。方法二:在命令窗口或程序中使用VFP命令方式。命令格式:SetCollateTo“<排序次序名>”命令说明:排序次序名为Machine、Pinyin或Stroke之一,必须用单引号、双引号或方括号将排序次序名括起来。1. Machine(机内码)按机
54、内码顺序:j<'0'<'1'-<'9'<'A'<'B'<'Y'<'Z'<'a'<'b'<'y'<'z'<'<汉字>',汉字按拼音顺序由小到大排列。例2.59】SetCollateTo'Machine'?'i'v'2','8'v'A','
55、a'<'A','Z'<'a'&&输出:.F.T?'zz'<'阿','阿'<'子'&&输出:.T.T.2.Pinyin(拼音)按拼音排序:i<'O'<'1'<'9'<'a'<'A'<'b'<'B'<<'Y'v'z'<
56、9;Z'<'<汉字>',汉字按拼音顺序由小到大排列。例2.6O】SetCollateTo'PinYin'j<'2','8'v'A','a'v'A',Z'<'a''zz'<'阿','阿'<'子'&&&&输出:.T.T.T.F输出:.T.T.3.Stroke(笔划)排序次序:J'<'O'&l
57、t;'1'<'9'<'a'<'A'<'b'<'B'<'y'<'Y'v'z'<'Z'<'<汉字>'。汉字依据书写笔划的多少排序,笔划少的汉字小。例2.61】SetCollateTo'Stroke'&&输出:.T.T.T.F输出:.T.F.子串包含运算'i'<'2','8'&
58、lt;'A','a'<'A','Z'zz'<'阿','阿'<'子''<'a&&运算格式:<字符表达式1>$<字符表达式2>运算说明:若字符表达式1的值是字符表达式2值的子串,即字符表达式2的值完整地包含字符表达式1的值,则运算结果为真();否则,运算结果为假(.F.)。【例2.62】X="VFP6.O中文版"?'VFP中文版'$X,'VFP6.O'
59、;$X&&输出结果为:.F.T.事实上,子串包含运算与表达式:AT(<字符表达式1>,<字符表达式2>)>0的作用完全相同。2.7逻辑表达式逻辑表达式是逻辑运算符连接逻辑型数据构成的运算式,运算结果仍然是逻辑型数据真(.)或假(.F.)。逻辑运算符逻辑运算有“非”、“与”以及“或”3种运算符,功能说明及优先级别如表2.3。书写时Not、And或Or前后应加一个半角圆点(.)或空格。表2.3逻辑运算符优先级别逻辑运算符说明1.Not.Not!非运算2.And.And与运算3.Or.Or或运算1. 非运算运算格式:.Not.<逻辑值表达式>
60、运算说明:对逻辑值表达式值取反。即:若逻辑值表达式的值为真(.T.),则非运算结果为假(.F.);若逻辑值表达式值为假(.F.),则运算结果为真(.T.)。【例2.63】?.NOT.2>3,!“a”v”ab”&&输出结果为:.F.2. 与运算运算格式:<逻辑值表达式1>.And.<逻辑值表达式2>运算说明:仅当逻辑值表达式1和逻辑值表达式2的值都为真(.T.)时,运算结果才为真(.T.);否则,运算结果为假(.F.)。【例2.64】A=1B=2?A=1AndB<3,A>0AndB>5,A>2.And.B<3,A>
61、2.And.B>3&&输出:.T.F.F.F.3. 或运算运算格式:<逻辑值表达式1>.Or.<逻辑值表达式2>运算说明:仅当逻辑值表达式1和逻辑值表达式2的值都为假(.F.)时,运算结果才为假(.F.);否则,运算结果为真(.T.)。【例2.65】Name'=张大伟'?张'$Name.Or.伟'$Name&&输出结果为:.T.2.7.2 常用逻辑型函数逻辑型函数是指返回逻辑值的函数。1.字母函数函数格式:Isalpha(字符表达式)函数说明:若字符表达式值的首字符是英文字母,则函数值为真(.T.);
62、否则,函数值为假(.F.)。【例2.66】?Isalpha(”A12b34cd”,lsalpha(”1a”,lsalpha(”1a”)&&输出为:.F.F.2. 数字函数函数格式:Isdigit(字符表达式)函数说明:若字符表达式值的首字符是数字,则函数值为真(.T.);否则,函数值为假(.F.)。【例2.67】?Isdigit("1a"),Isdigit("A12")&&输出结果为:.T.F.3. 小写字母函数函数格式:Islower(字符表达式).T.);否则,函数说明:若字符表达式值的首字符是小写英文字母,则函数值为
63、真(函数值为假(.F.)。【例2.68】?Islower(”aBc”),Islower(”Abe”)&&输出结果为:.F.4. 大写字母函数函数格式:lsupper(字符表达式)函数说明:若字符表达式值的首字符是大写英文字母,则函数值为真(.);否则,函数值为假(.F.)。【例2.69】?Isupper(”aBc”),Isupper(”Abe”)&&输出结果为:.F.5. 文件存在函数函数格式:File(字符表达式)函数说明:判断字符表达式值表示的文件名(应包含路径和文件全名)是否存在。若磁盘文件存在,则函数值为真();否则,函数值为假(.F.)。【例2.70】假设D:XSA.DBF文件存在,而D:XSB.DBF文件不存在。?File(?File(“D:XSA.DBF”),File(“D:XSA”)&&输出:.FD:XSB.DBF')&&输出:.F.6.测试空值函数函数格式:Empty(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 指数运算题目及答案解析
- AI在资产评估与管理中的应用
- 医院会议纪律管理制度
- 2026年黑龙江、吉林、辽宁、内蒙古高考化学试卷(含答案解析)
- 2026智慧园区智能化设计解决方案
- 2026年译林版(三起)版(新教材)小学英语三年级下册期末综合测试卷及答案(2套)
- 东至县主城区微改造精提升(一期)项目水土保持方案报告表
- 简阳市2025年第一批财政衔接推进乡村振兴补助资金(中央、省级、成都市级、本级)平泉街道特色产业发展项目水土保持报告表
- 税务申报税务筹划咨询合同
- 2026辅警面试题步骤及答案
- 国际油船与码头安全指南第6版
- 2024年第二次广东省普通高中化学学业水平合格性考试真题卷含答案
- 【MOOC】心理学与生活-南京大学 中国大学慕课MOOC答案
- 分析化学(兰州大学)知到智慧树章节测试课后答案2024年秋兰州大学
- 2024-2025学年四川省泸州市泸县高一下学期6月期末考试化学检测试题(含答案)
- 【MOOC】断层影像解剖学-山东大学 中国大学慕课MOOC答案
- 临沂2024年山东临沂科技职业学院招聘教师和教辅人员33人笔试历年典型考题及考点附答案解析
- MOOC 航天推进理论基础-西北工业大学 中国大学慕课答案
- 国内外同类技术分析报告
- 远离电子产品保护视力
- 2024-年广州市小升初英语真题含答案
评论
0/150
提交评论