资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第三章 数据与数据运算,-,常量与变量,123,常量:用以表示一个具体的、不变的值。,1,、数值型常量,-123.6,3e5 3*10*5,2,、字符型常量”,”,空串,3,、逻辑型常量,.f.T.N.Y.,4,、日期型常量,2010 03 27/-.,空格,5,、货币型常量,$123.6,6,、日期时间型常量,03/27/10 11:20:l2,?2010/03/27 11:20:12,10/03/27 11:20:12 am,变量:变量值是能够随时更改的。,X=2008/11/20,分为两类:,x=“,abc,”,1,、字段变量:表中的字段名就是变量。,2,、内存变量:内存变量是内存中的一个存储区域。,姓名,=,黎明,use,xs,?,姓名 字段变量优先,内存变量的数据类型包括:字符型(,C,)、数值型(,N,)、,货币型(,Y,)、逻辑型(,L,)、日期型(,D,)和日期时间型(,T,),内存变量是内存中的一个区域,变量值就是存放在这个存储区,域里的数据,变量的类型取决于变量值的类型。,如:当把一个常量赋给一个变量时,这个常量就被存放到该变量,对应的存储位置中而成为变量新的取值。,*在,VF,当中,变量的类型可以改变,也就是可以把不同类型的数据赋给同一个变量。,简单内存变量,变量的赋值命令:,内存变量名,=,表达式,a=8,STORE,表达式,TO,内存变量名,Store 8 to,a,b,c,d,功能:,1,、等号一次只能给一个内存变量赋值。,STORE,命令可以同时给若干个变量赋予相同的值,各内存变量名之间必须用逗号分开。,2,、在,VF,中,一个变量在使用之前并不需要特别的声明或定义。,当用,STORE,命令给变量赋值时,如果该变量并不存在,那么系统会自动建立它。,3,、可以通过对内存变重新赋值来改变其内容和类型。,例,3.4,内存变量和字段变量的访问,一个表文件“学生,.DBF”,其结构如下:,学生(学号,C,(,8,),姓名,C,(,6,),性别,C,(,2,),出生日期,D,(,8,),姓名,年龄,性别,王红,a(1,1),23 a(1,2),男,a(1,3),数组,数组是内存中连续的一片存储区域,它由一系列元素组成。,每个数组元素可以通过数组名及相应的下标来访问,每个数组,元素相当于一个简单变量,可以给各元素分别赋值,一个数组中,各元素的数据类型可以不同。,数组大小由下标值的上、下限决定,下限规定为,1,命令格式:,a(2,3),DIMENSION,数组名,(,下标上限,1,,,下标上限,2,),DECLARE,数组名,(,下标上限,1,,,下标上限,2,),注意:,1,、在一切使用简单内存变量的地方,均可以使用数组元素。,2,、在赋值和输入语句中使用数组名时,表示将同一个值同时,赋给该数组的全部数组元素。,3,、在同一个运行环境下,数组名不能与简单变量名重复。,4,、在赋值语句中得 表达式位置不能出现数组名。,5,、可以用一维数组的形式访问二维数组。,三、内存变量的常用命令,1,、内存变量的赋值,格式,1,:,storeto,格式,2,:,=,功能:格式一可以将表达式值赋给一个或多个内存变量,格式,2,只能给一个变量赋值。,2,、表达式值的显示,格式,1,:,?,格式,2,:,?,功能:计算表达式表中的各表达式并输出各表达式值,不管有没有指定表达式表,格式都会输出一个回车换行符,如果指定了表达式表,各表达式值将在下一行的起始处输出。,格式,2,不会输出一个回车换行符,各表达式值在当前行的光标所在处直接输出。,3,、内存变量的显示,格式,1,:,LIST MEMORY likeTO PRINTER|TO FILE,功能:显示内存变量的当前信息,包括变量名、作用域、类型、取值。,选用,LIKE,短语只显示与通配符相匹配的内存变量。通配符包括*和?,*表示任意多个字符,?表示任意一个字符。,-,TO PRINTER :,在显示的同时送往打印机,.,TO FILE:,显示的同时存入给定文件名的文本文件中,文件的扩展名为,.TXT,LIST MEMORY:,一次显示与通配符匹配的所有内存变量,如果内存变量多,一屏显示不下,则自动向上滚动,.,DISPLAY MEMORY:,分屏显示与通配符匹配的所有内存变量,如果内存变量多,显示一屏后暂停,按任意键之后再继续显示下一屏,.,4,、内存变量的清除,格式,1:CLEAR MEMORY,格式,2:RELEASE,格式,3:RELEASE ALL ENTENDED,格式,4:RELEASE ALL LIKE|EXCEPT,功能,:,格式,1,清除所有内存变量,格式,2,清除指定的内存变量,格式,3,清除所有内存变量,在人机会话状态其作用与格式,1,相同,如果出现在程序中,则应该加上短语,ENTENDED,否则不能删除公共内存变量,.,格式,4:,选用,LIKE,短语清除与通配符相匹配的内存变量,选用,EXCEPT,短语清除与通配符不相匹配的内存变量,.,5,、表中数据与数组数据之间的交换,表文件的数据内容是以记录的方式存储和使用的,而数组是把一批数据组织在一起的数据处理方法,为了使它们之见方便的进行交换,以利于程序的使用,VF,提供了相互之间数据传递的功能,可以方便的完成表记录与内存变量之间的数据交换,.,将表的当前记录复制到数组,格式,1:SCATTERFIELDSMEMOTO BLANK,功能,:,将表的当前记录从指定字段表中的第一个字段内容开始,依次复制到数组名中的从第一个数组元素开始的内存变量中,如不使用,FIELDS,短语指定字段,则复制除备注型,M,和通用型,G,之外的全部字段。,*如果事先没有创建数组,系统将自动创建,,*如果已创建数组元素个数少于字段数,系统自动建立其余数组元素,,*如果已创建的数组元素个数多于字段数,其余数组元素保持不变,,*若用,MEMO,短语,则同时复制备注型字段,,*若选用,BLACK,短语,则产生一个空数组,各数组元素的类型和大小与表中当前记录的对应字段相同。,格式,2:SCATTERFIELDS LIKE|FIELDS EXCEPTMEMO TOBLANK,功能:用通配符指定包括或排除的字段,,FIELDS LIKE,和,FIELDS EXCEPT,可以同时使用,例,将数组数据复制到表的当前记录,格式,1,:,GATHER FROMFIELDSMEMO,功能:将数组中的数据作为一个记录复制到表的当前记录中,从第一个数组元素开始,依次向字段名表指定的字段填写数据,如果缺省,FIELDS,选项,则依次向各个字段复制,如数组元素个数多于记录中字段的个数,则多余部分被忽略。若选用,MEMO,短语,则在复制时包括备注字段,否则备注字段不考虑。,格式,2,:,GATHER FROMFIELDS LIKE|FIELDS EXCEPTMEMO,功能:用通配符指定包括或排除的字段,,FIELDS LIKE,和,FIELDS EXCEPT,可以同时使用。,3.2,表达式,表达式是有常量变量和函数通过特定的运算符连接起来的式子。,表达式的形式包括:,*单一的运算对象(如常量、变量和函数),*由运算符将运算对象连接起来形成的式子。,根据表达式值的类型可分为:,数值型表达式、,字符型表达式、,日期时间表达式,逻辑表达式。,*大多数逻辑表达式是比较运算符的关系式。,1,、数值表达式,数值表达式由运算符将数值型数据连接起来形成,其运算结果仍然为数值型数据。数值型数据可以是数值型常量或者变量。,算数运算的优先级,表,3.2,算术运算符,优先级,运算符,说明,(),形成表达式内的子表达式,*或,乘方,*、,/,、,%,乘、除运算、求余运算,+,、,-,加、减运算,例 计算数学算式(,1/60-3/56,)*,18.45,和,1+2,(,1+2,),/2+2,的值,?(1/60-3/56)*18.4500,-0.6809,?(1+2(1+2)/(2+2),2.25,求余运算,求余运算,%,和取余函数,MOD,()的作用相同,余数的正负号与除数一致,当表达式中出现*、,/,和求余运算,%,时,它们具有相同的优先级,例 求余运算,?,15%4,,,15%-4 mod(15,4),3 -1 3,STORE 122 TO X,Y,Z=73,?X%Z,MOD(X,Z),X%(Y-200),49,49,-34,2,、字符表达式,字符表达式由字符串运算符将字符型数据连接起来形成,其运算结果仍然是字符型数据。,字符串运算符有两个,它们的优先级相同:,:前后两个字符串首尾连接形成一个新的字符串,:连接前后两个字符串,并将前字符串的尾部空,格移到合并后的新字符串尾部,例:,a=“hello ”b=“everyone”,?,a+b,a-b,hello everyone,helloeveryone,C=“,ab,c ”d=“,efg,”,?c-d,ab,c,efg,3,、日期时间表达式,日期时间表达式中可以使用的运算符有,+,和,-,两个,日期时间表达式的格式有一定限制,不能任意组合。,+,日期型。若干天后的日期,+,日期型。若干天后的日期,-,日期型。若干天前的日期,-,数值型。两个日期相差的天数,+,无意义,+,日期时间型,指定日期时间若干秒后的日期时间,+,日期时间型,指定日期时间若干秒后的日期时间,-,日期时间型,指定日期若干秒前的日期时间,-,数值型,两个指定日期时间相差的秒数,例,3.11,日期时间运算示例,?2001-03-19+10,2001-03-19-2000-03-19,03/29/01 365,?2001-03-19 11:10:10 am-2001-03-19 10:10:10 am,3600,?2001-03-19 10:10:10 am-6,秒数,03/19/01 10:10:04 am,3.2,关系表达式,1,、关系表达式,ab,关系表达式通常也称为逻辑表达式,它由关系运算符将两个运算对象连接起来形成,,.t.f.,即:,“,abcd,”=“,abc,”,注:运算符,=,和,$,仅适用于字符型数据,其他可适用于任何类型,但前后两个运算对象的数据类型要一致。,运算符,说明,运算符,说明,小于,大于,=,大于等于,=,等于,=,字符串精确比较,、,#,、,!,=,不等于,$,子串包含测试,数值型和货币型比较,按数值的大小比较,包括负号,如:,0-1 .t.$150$105,日期时间型数据比较,.t.,大于,.f.,子串包含测试,”,abc”$”abcd,”.t.,关系表达式,$,为子串包含测试,如果前者是后者的一个字符串,结果为逻辑真(,.t.,),否则为逻辑假(,.f.,),例 关系运算符示例,STORE ”,计算机”,TO s1,STORE “,微型计算机”,TO S2,?S1$s2 ,s2$s1 ,(s1$s2)(s2$s1),.T.F.T.,2,、设置字符的排序次序,两个字符串比较时,系统对两个字符串的字符自左向右逐个进行比较,一但发现两个字符不同,就根据这两个字符的排序序列决定两个字符串的大小,,对字符序列的排序设置有人机会话和命令两种方式,。,在人机会话方式下设置,工具,-,选项,-,数据,-,右上方的“排序序列”下拉框中选择“,machine(,机器,)”,、“,pinyin(,拼音,)”,、或者“,stroke(,笔画,)”,命令方式设置:,设置字符比较次序的命令:,set collate to“”,次序名必须放到引号当中,次序名:“,machine”“pinyin”stroke“,*,Machine,(机器)次序:指定的字符排列次序与,xBase,兼容,按照机内码顺序排序,在微机中,西文字符是按照,ASCII,码值排列的:空格在最前面,大写,ABCD,字母序列在小写,abcd,字母序列的前面,因此大写字母小于小写字母,汉字的机内码与汉字的国标码一致。对常用的一级汉字,根据它们的拼音顺序决定大小。,*,pinyin(,拼音,),次序:按照拼音次序排序,对于西文字符而言,空格在最前面,小写的,abcd,字母序列在前,大写的,ABCD,在后。,*,stroke,(笔画)次序:无论中文、西文,按照书写笔画的多少排序。,例:在不同的字符排列,SET COLLATE TO“machine”,?”a”“,abc”,”a,”“,A”,”a,”“A”,.T.F.F.,?”,一”,“,二”,“李”,“,王”,“王老师”,”,你好”,.F.T.F.T.,SET COLLATE TO“pinyin”,?”a”“,abc”,”a,”“,A”,”a,”“A”,.T.T.F.,?”,一”,”,二”,”,李”,“,王”,“王老师”,”,你好”,.F.T.F.T.,SET COLLATE TO “stroke”,?”a”“,abc”,”a,”“,A”,”a,”“A”,.T.T.F.,?”,一”,“,二”,”,李”,”,王”,”,王老师”,”,你好”,.T.F.F.T.,3,、字符串精确比较与,exact,设置 “,ABC”=“ABC”,双等号,=,比较字符串时,只有当两个字符完全相同,运算结果才会是逻辑真,否则为逻辑假,单等号,=,比较两个字符串时,运算结果与,set exact on/off,设置有关,“,abc,”=“,ab,”,1.,系统默认,off,状态,.,当处于,off,状态时,只要右边的字符串与左边字符串的前面部分内容相匹配,即可得到逻辑真的结果,2.,当处于,on,状态时,比较到两个字符串全部结束,先在较短字符串的尾部加上若干个空格,使两个字符串的长度相等,然后再进行比较,“你好”,=trim(“,你好 ”,),Trim(),函数的功能是去掉尾部空格,表,3.5 SET EXACT,对字符串比较的影响,比较,=(EXACT OFF),=(EXACT ON),=(EXACT ON,或,OFF),“,abc,”=“,abc,”,.T.,.T.,.T.,“,ab,”=“,abc,”,.F.,.F.,.F.,“,abc,”=“,ab,”,.T.,.F.,.F.,“,abc,”=”,ab,”,.F.,.F.,.F.,“,ab,”=”,ab,”,.F.,.T.,.F.,“,ab,”=”,ab,”,.T.,.T.,.F.,“”,=“,ab,”,.F.,.F.,.F.,“,ab,”=“”,.T.,.F.,.F.,Trim(“ab,”)=“,ab,”,.T.,.T.,.T.,“,ab,”=,trim(“ab,”),.T.,.T.,.T.,例:字符串精确比较与,EXACT,设置示例,“,ABC”$”ABCD”,SET EXACT OFF,STORE“,计算机”,TO s1,STORE“,计算机”,TO s2,STORE“,计算机世界”,TO s3,?s1=s3,s3=s1,s1=s2,s2=s1,s2=s1,.F.t.T.T.t.,4,、逻辑表达式,逻辑表达式由逻辑运算符将逻辑型数据连接起来而形成,其运算结果仍然是逻辑型数据。,逻辑运算有三个:,.NOT.,或,!,(逻辑非)、,.and.(,逻辑与,),以及,.OR.,(逻辑或)。也可省略两端的点写成,NOT AND OR,优先次序为:,NOT AND OR,AND,两个都为真才是真,OR,有一个为真就是真,.NOT.,.AND.,.OR,.T.,.T.,.F.,.T.,.T.,.T.,.F.,.F.,.F.,.T.,.F.,.T.,.T.,.F.,.T.,.F.,.F.,.T.,.F.,.F.,*例 查询基本工资高于,1800,元的讲师和副教授。条件表达式应写成:,基本工资,1800 AND,职称,=”,讲师“,OR,基本工资,1800 AND,职称,=”,副教授“,或写成,基本工资,1800 AND(,职称,=”,讲师“,OR,职称,=”,副教授“,),*,例:不同运算符组成的表达式示例,(,运算符优先级,),?122 AND,人,人民,OR .T.F.,.F.,?(10%3=1)AND(15%2=0)OR,电脑!,=,计算机,.T.,3.3,常用函数,函数是用程序来实现的一种数据运算或转换,每一个函数都有特定的数据运算或转换功能,它往往需要若干个变量,即运算对象,但只能有一个运算结果,称为函数值或返回值。,函数可以用函数名加一对圆括号加以调用,自变量放在圆括号里面,3.3.1,数值函数,数值函数是指函数值为数值的一类函数,它们的自变量和返回值往往都是数值型数据。,1,、绝对值和符号函数,格式:,ABS,(,),abs(-100)100,SIGN,(,),功能:,ABS,()返回指定的数值表达式的绝对值。,SIGN,()返回指定数值表达式的符号,当表达式的运算结果为正、负和零时,函数值分别为,1,、,-1,和,0,例:,STORE 10 TO X,?,ABS,(,5-X,),,ABS,(,X-5,),,SIGN,(,5-X,),,SIGN,(,X-10,),5 5 -1 0,习题:,STORE 15 TO A,,,B,?,ABS,(,5-A,),,ABS,(,B-5,),,SIGN,(,5-A,),,SIGN,(,A-B,),,SIGN,(,B-5,),10,10,-1 0 1,2,、求平方根函数,格式:,SQRT(),功能:返回指定表达式的平方根,自变量表达式值不能为负。,例:?,SQRT(2*SQRT(2),(2*6)(1/2),1.68 3.46,例:,STORE -100 TO X,?SIGN(X)*SQRT(ABS(X),-10,3,、圆周率函数,格式:,PI,(),功能:返回圆周率(数值型),该函数没有自变量。,4,、求整数函数,格式:,INT()*,返回指定数值的整数部分,CEILING()*,返回大于或等于指定数值表达式的最小整数。,FLOOR()*,返回小于或等于指定数值表达式的最大整数。,例,STORE 5.8 TO X,?,INT(X),INT(-X),CEILING(X),CEILING(-X),FLOOR(X),FLOOR(-X),5 -5 6 -5 5 -6,5,、四舍五入函数,格式:,round(,),功能:返回表达式在指定位置四舍五入的结果,指明四舍五入的位置若,大于等于,0,那么它表示的是要保留的小数位数,;,若,小于,那么它表示的是整数部分的舍入位数,例:,X=345.345,?ROUND(X,2),ROUND(X,1),ROUND(X,0),ROUND(X,-1),round(x,-2),345.35 345.3 345 350 300,6,、求余函数,格式:,mod(,),功能:返回两数相除后的余数,,是被除数,是除数,如果被除数与除数同号,那么函数值即为两数相除后的余数,余数的符号和除数的符号一致如果被除数与除数异号,那么函数值为两数相除的余数再加上除数的值,例,?Mod(10,3),mod(-10,-3),mod(-10,3),mod(10,-3),1 -1 2 -2,7,、最大值和最小值函数,格式:,max(,),min(,),功能:,max(),计算各自变量表达式的值,并返回其中的最大值,min(),计算各自变量表达式的值,并返回其中的最小值,自变量表达式的类型必须一至(如数值型等)。,例,?,MAX(2,12,05),MIN(,汽车,飞机,轮船,),12,飞机,3.3.2,字符函数,字符函数:是指自变量一般是字符型数据的函数,1,、求字符串长度函数,格式:,Len(),功能:返回指定字符表达式的长度,即所包含的字符的个数,函数值为数值型,例:,X=“,中文,visualFoxPro6.0”,?LEN(X),20,2,、大小写转换函数,格式:,Lower(),Upper(),功能:,Lower,()将指定表达式值中的大写字母转换成小写字母,其他字符不变。,Upper,()将指定表达式值中的小写字母转换成大写字母,其他字符不变。,例,?,LOWER(X1y2A*),UPPER,(,n=1,),x1y2a*N=1,3,、空格字符串生成函数,格式:,len(Space(30)-space(10),功能:返回由指定数目的空格组成的字符串,4,、删除前后空格函数,格式:,Trim()“a b c ”,Ltrim,(),Alltrim,(),功能:,trim(),返回指定字符表达式值去掉尾部空格后形成的字符串,Ltrim,(),返回指定字符表达式值去掉前导空格后形成的字符串,alltrim,(),返回指定字符表达式值去掉前部和尾部空格后形成的字符串,5,、取子串函数,格式:,Left(,),right(,),substr,(,),功能:,Left(),从指定表达式值的左端取一个指定长度的子串作为函数值,right(),从指定表达式值的右端取一个指定长度的子串作为函数值,substr,(),从指定表达式值的指定起始位置取指定长度的子串作为函数值,若缺省第三个自变量,则函数从指定位置一直取到最后一个字符,例:,STORE“GOOD BYE!”TO X,?LEFT(X,2),SUBSTR(X,6,2)+SUBSTR(X,6),RIGHT(X,3),GO BYBYE!YE!,6,、计算子串出现次数函数,格式:,Occurs(,),功能:返回第一个字符串在第二个字符串中出现的次数,函数值为数值型若第一个字符串不是第二个字符串的子串,函数值为,0,例,STORE abracadabra TO S,?,OCCURS(a,s),OCCURS(b,s),OCCURS(c,s),OCCURS(e,s,),5 2 1 0,7,、求子串位置函数,格式,:At(,),Atc,(,),功能:,at(),的函数值为数值型如果,是,的子串,则返回,值的首字符在,值中的位置;若不是子串,则返回,0,at(),与,atc,(),功能类似,但在子串比较时不区分字母大小写,第三个自变量,用于表明要在,值中搜索,值的第几次出现,默认值为,例,:store“this is visual,Foxpro,”to x,?,At(“fox”,x,),atc(“fox”,x),at(“is”,x,,,3),at(“xo”,x),0 16 10 0,8,、子串替换函数,格式:,stuff(,),功能:用,值替换,中由,和,指明的一个子串替换和被替换的字符个数不一定相等如果,值是,,则插在由,指定的字符前面,如果,值是空串,那么,中由,和,指明的子串被删除。,例:,Store good bye!to s1,Store morning to s2,?stuff(s1,6,3,s2),stuff(s1,1,4,s2),Good morning!Morning bye!,9,、字符替换函数,格式:,Chrtran,(,),功能:该函数的自变量是三个字符表达式当第一个字符串中的一个或多个字符与第二个字符串中的某个字符相匹配时,就用第三个字符串中的对应字符替换这些字符,如果第三个字符串包含的字符个数少于第二个字符串包含的字符,因而没有对应字符,那么第一个字符串中相匹配的各字符将被删除,例,:x1=,CHRTRAN(“ABACAD”,”ACD”,”xyz,”),y2=CHRTRAN(“,计算机,ABC”,”,计算机”,”,电脑”,),Z1=CHRTRAN(“,大家好!”,”,大家”,”,您”,),?x1,y1,z1,XBX1X2,电脑,ABC,您好!,10,、字符串匹配函数,格式:,Like(,),功能:比较两个字符串对应位置上的字符,若所有对应字符都相匹配,函数返回逻辑真,否则返回逻辑假,(.F.),中可以包含通配符*和,?,*,可与任何数目的字符相匹配,?,可与任何单个字符相匹配,?A*b,例,SAVE ALL LIKE ,?,A*TO B,Store“,abc,”to x,Store“,abcd,”to y,?,like(“ab,*”,x),like(“ab,*”,y),like(x,y),like(“?b?”,x),like(“Abc”,x,),.T.T.F.T.F.,3.3.3,日期和时间函数,自变量一般是日期型数据或日期时间型数据,、系统日期和时间函数,格式,:,date(),返回当前系统日期,函数值是日期型,time(),返回当前系统时间,函数值是字符型,datetime,(),返回当前系统日期时间,函数值是日期时间型,例:,?,DATE,(),,TIME,(),,DATETIME,(),07/18/01 16,:,59,:,05 07/18/01 16,:,59,:,05pm,2,、求年份,.,月份和天数函数,格式,:YEAR(|),month(|),day(|),功能,:year(),从指定的日期表达式或日期时间表达式中返回年份,month(),从指定的日期表达式或日期时间表达式中返回月份,day(),从指定的日期表达式或日期时间表达式中返回天数,函数值是数值型,例:,store 2001-08-18 to d,?year(d),month(d),day(d),2001 8 18,3,、时,.,分和秒函数,格式,:HOUR(),minute(),sec(),功能:从指定的日期时间表达式中返回小时部分,从指定的日期时间表达式中返回分钟部分,从指定的日期时间表达式中返回秒数部分,函数值是数值型,例,:,Store 2001-03-18 02:30:50p to t,?hour(t),minute(t),sec(t),14 30 50,3.3.4,数据类型转换函数,“,1”+”2”,数据类型转换函数的功能是将某一种类型的数据转换成另一种类型的数据,1.,数值转换成字符串,格式:,STR(,),功能:将,的值转换成字符串,转换时根据需要自动进行四舍五入。返回字符串的理想长度应该是,值的整数部分位数加上,值,再加上位小数点。如果,值大于,则字符串加前导空格以满足规定的,要求;如果,值大于等于,值的整数部分位数但又小于,则优先满足整数部分而自动调整小数位数;如果,值小于,值的整数部分位数,则返回一串星号,(*),的默认值是,0,,,的默认值是,10,例,:n=-123.456,?Str(n,9,2),str(n,6,2),str(n,3),str(n,6),str(n),-123.46 -123.5 *-123 -123,2.,字符串转换成数值,格式:,VAL(),功能:将由数字符号,(,包括正负号、小数点,),组成的字符型数据转换成相应的数值型数据。若字符串内出现非数字字符,那么只转换前面部分;若字符串的首字符不是数字符号,则返回数值零。,A4545 -123.a45,例,:x=“-123.”y=45 z=A45,?,Val(x+y),val(x+z),val(z+y,),-123.45 -123.00 0.00,3,、字符串转换成日期或日期时间,格式:,CTOD(),CTOT(),功能:,CTOD,将,值转换成日期型数据,CTOT,将,值转换成日期时间型数据,SET CENTURY TO,指小于,51,的两位数年份属于,21,世纪,(19+1),而大于等于,51,的两位数年份属于,20,世纪,(19),例,08 2008 52 1952 63 1963 2010,SET DATE TO YMD,SET CENTURY ON,SET CENTURY TO 19 ROLLOVER 51,d1=CTOD(“2001/03/18”),t1=CTOT(2001/03/18+TIME(),?d1,t1,CTOD(50/01/01),CTOD(51/01/01),2001/03/18,2001/03/18,10:31:54 PM 2050/01/01 1951/01/01,4,、日期或日期时间转换成字符串,格式:,DTOC(|,1),TTOC(,1),功能:,DTOC,将日期型数据或日期时间型数据转换成字符串,TTOC,将日期时间型数据转换成字符串,对,DTOC(),来说,如果使用选项,1,则字符串的格式,总是为,YYYYMMDD,对,TTOC(),来说,如果使用选项,1,则字符串的格式总,是为,YYYYMMDDHHMMSS,例,:store,datetime,()to t,?DTOC(T),DTOC(T,1),TTOC(T),TTOC(T,1),5,、宏替换函数,格式:,&.,功能:替换出字符型变量的内容,即,&,的值是变量中的字符串,如果该函数与其后的字符无明确分界,则要用,”,.”,作为函数结束标识,宏替换可嵌套使用,.,例,:store“,职工”,TO DB,USE&DB use,职工,XM=“,姓名”,xm,=,姓名,=“,李小明,”,?&XM-”,你好!”,李小明你好!,SKIP,?,Xm,&,xm,姓名 李新,姓名 年龄,李小明,21,李新,24,3.3.5,测试函数,1,、值域测试函数,H=T=L,格式:,BETWEEN,(,),功能:判断一个表达式的值是否介于另外两个表达式之间。当,值大于等于,且小于,时。函数值为逻辑真(,.T.,)否则,(.F.),如果,或,有一个为,NULL,值,函数值也是,NULL,值。,例:,store.null.To x,store 100 to y,?between(150,y,y+100),between(90,x,y),.T.NULL.,2,、空值(,NULL,值)测试函数,格式:,ISNULL(),功能:判断一个表达式的运算结果是否为,NULL,值,若,NULL,值返回逻辑真(,.T.,)否则逻辑假(,.F.,),例:,store .NULL.To x,B=“ABC”,?x ,ISNULL(X),.NULL.T.,3,、“空”值测试函数 价格,isnull,(,价格,).f.empty(,价格,).t.,格式:,EMPTY,(,),功能:根据指定表达式的运算结果是否为“空”值,返回逻辑真(,.T.,)逻辑假,(.F.)empty(.f.).t.,函数,EMPTY(.NULL.),返回结果是,.F.,不同类型数据的“空”值有不同的规定 产品 价格,电脑,0,数据类型,“空”值,数据类型,“空”值,数值型,0,双精度,0,字符型,空串、空格、制表符、回车、换行,日期型,空(如,CTOD,(),货币型,0,日期时间型,空(如,CTOD,(),浮点型,0,逻辑型,.F.,整型,0,备注字段,空(无内容),4,。数据类型测试函数,格式:,VARTYPE(,),功能:测试,的类型,返回一个大写字母,如果表达式的运算结果是,NULL,值,则根据,的值决定是否返回,类型,如果,为,.T.,则返回,原数据类型。如,值为,.F.,或缺省。则返回,X,以表名,的运算结果是,NULL,值。,数据类型,返回字母,数据类型,返回字母,字符型,C,通用型,数值型,日期型,货币型,日期时间,逻辑型,.NULL.,X,对象型,未定义,例,a=“AAA”,Store 10 to y,Store.NULL.To x,Store$100.2 to z,?,vartype(x),vartype(a,.T.),vartype(y),vartype(z,),X C N Y,5.,表文件尾测试函数,格式:,EOF(|),功能:测试指定表文件中的记录指针是否指向文件尾,若是返回逻辑真,否则逻辑假,表文件尾是指最后一条记录的后面位置。若在指定工作区上没有打开表文件,函数返回逻辑假,若表文件中不包含任何记录,函数返回逻辑真,文件头,(,bof,),首记录(,TOP,),第二个记录,第,I,个记录,尾,记录,(,BOTTOM,),记录指针,文件尾,(eof),例:,use AA,GO BOTTOM,?EOF(),.F.,SKIP,?EOF(),BOF(),.T.F.,6.,表文件首测试函数,格式:,BOF(|),功能:测试指定表文件中的记录指针是否指向文件首,若是返回逻辑真,否则逻辑假,若在指定工作区上没有打开表文件,函数返回逻辑假,若表文件中不包含任何记录,函数返回逻辑真,7.,记录号测试函数,格式:,RECNO(|),功能:返回当前表文件或指定表文件中当前记录的记录号。如果指定工作区上没有打开表文件,函数值为,如果记录指针指向文件尾,函数值为表文件中的记录数加。如果记录指针指向文件首,函数值为表文件中第一条记录的记录号,8.,记录个数测试函数,格式:,RECCOUNT(|),功能:返回当前表文件或指定表文件中的记录个数,.,如果指定工作区上没有打开表文件,函数值为,0.,例,USE AA&,假定,5,条记录,?BOF(),RECNO()&,显示,.F.1,SKIP-1,?BOF(),RECNO()&.T.1,GO BOTTOM,?EOF(),RECNO()&.F.5,SKIP,?EOF(),RECNO(),RECCOUNT()&.T.6 5,9.,条件测试函数,格式,:IIF(,),功能:测试,的值,若为逻辑真,函数返回,的值,若为逻辑假,函数返回,的值,例,x=100,Y=300,?IIF(X100,X-50,X+50),IIF(Y100,Y-50,Y+50),150 250,SET CENTURY ON 2008/10/20,STORE DATE()TO d 10/20/2008,STORE DTOC(d)to s,?s ,IIF(LEN(S)=8 ,”,这是两位数年份”,”,年份是:”,+STR(YEAR(d),4),10/20/2008,年份是:,2008,10,。记录删除测试函数,1-10 A-J,格式:,DELETED(|),功能:测试指定的表或在指定工作区中所打开的表,记录指针所指的当前记录是否有删除标记”*”若有为真,否则为假,例,SELECT 0,USE,职工,DELETE FOR,性别,=“,女”,AND,职称,=“,讲师”,2,LIST,姓名,性别,FOR DELETED(),记录号,#,姓名 性别,9 *,赵红 女,10 *,沈慧 女,
展开阅读全文