数据类型函数表达式.doc_第1页
数据类型函数表达式.doc_第2页
数据类型函数表达式.doc_第3页
数据类型函数表达式.doc_第4页
数据类型函数表达式.doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.5.1 常量与变量1.常量常量是指其值固定不变的数据。VFP的常量有如下6种类型:(1)数值型常量(Numeric,简称N型)数值型常量也就是常数,用来表示一个数量的大小,由数字09、小数点和正负号组成。其表现形式可以是整数(如123)、小数(如0.238)、负数(如-7.69)或科学计数法表示的数(如0.2158E6,即0.2158106)。数值型数据在内存中占8个字节存储空间。(2)字符型常量(Character,简称C型)字符型常量是用定界符括起来的字符串。定界符可以是单引号()、双引号()或方括号( )。例如,Visual FoxPro 6.0、程序设计、关系数据库。在定义和使用字符型常量时必须注意:1)在字符串的两端必须加上定界符,否则系统会把该字符串当成变量名。2)定界符只能是ASCII码字符(即半角字符),不能是全角字符。3)左、右定界符必须匹配。即如果左边是双引号,那么右边也必须是双引号。4)定界符可以嵌套,但同一种定界符不能互相嵌套。也就是说,如果某种定界符本身也是字符串的内容,则需要用另一种定界符为该字符串定界。例如:合法字符串:俗语云:四海之内皆兄弟非法字符串:俗语云:四海之内皆兄弟字符串的最大长度(即最多包含字符个数)是254个字符。例如,Visual FoxPro 6.0的长度是17,关系数据库的长度是10。注意,不包含任何字符的字符串()叫空串,空串与包含空格的字符串( )不同。(3)逻辑型常量(Logical,简称L型)逻辑型常量通常只有2个值,真和假。输入逻辑“真”值,可以用.T.、.t.或.Y.、.y.,输入逻辑“假”值,可以用.F.、.f.或.N.、.n.,但是存储显示时,总是.T.、.t.或.F.、.f.。前后两个句点作为逻辑型常量的定界符是必不可少的,否则会被误认为变量名。逻辑型常量只占用1个字节存储空间。(4)货币型常量(Currency,简称Y型)货币型常量用来表示货币值。书写时,以“”符号开头,最多保留位小数。若小数部分超过4位,系统将自动进行四舍五入取前4位,例如,123.456789将存储为123.4568。货币型常量在内存中占用8个字节。(5)日期型常量(Date,简称D型)日期型常量用于表示日期。它的定界符是一对花括号( ),括号内年、月、日之间用分隔符分开。常用的日期分隔符有斜杠(/)、连字符(-)、句点(.)和空格,系统默认斜杠(/)分隔符。日期型常量的格式有两种:1)传统的日期格式系统默认的日期型数据为美国日期格式mm/dd/yy(月/日/年),其中月、日各为2位数字,而年份可以是2位数字,也可以是4位数字。2)严格的日期格式严格的日期格式为yyyymmdd,它能表达一个确切的日期,可以在任何情况下使用,尤其是在输入日期型常量时使用严格的日期格式十分方便。这种日期格式在书写时要注意:花括号内第一个字符必须是脱字符();年份必须是4位;“-”分隔符可以用“/”代替;年、月、日的次序不能颠倒,不能缺省。3)影响日期格式的设置命令本书在介绍命令时,采用如下约定:方括号( )中的内容表示可选项;尖括号()中的内容表示必选项;用竖线()分隔的内容表示任选其一。格式1:SET CENTURY ONOFF说明:用于设置年份的位数:ON 设置年份为4位数字表示;OFF设置年份为2位数字表示。示例:SET CENTURY ON ?2002-06-28 & 结果为 06/28/2002SET CENTURY OFF?2002-06-28 & 结果为 06/28/02其中命令?表示计算并输出表达式的值。“&”表示其后是本命令行的注释。格式2:SET STRICTDATE TO 01说明:用于设置是否对日期格式进行检查: 0表示不进行严格的日期格式检查; 1表示进行严格的日期格式检查,它是系统默认的设置。示例:SET STRICTDATE TO 0 ?05/01/03 & 结果为 05/01/03SET STRICTDATE TO 1?05/01/03 & 结果为 错误提示:不明确的日期常量日期常量用8个字节存储,取值范围是0001-01-019999-12-31。(6)日期时间型常量(Date Time,简称T型)它包括日期和时间两部分,严格的格式为yyyymmdd,hh:mm:ssap。其中hh、mm、ss分别代表小时、分、秒,a和p分别代表上午和下午。例如,2001-10-01,10:10:10 a表示2001年10月1日上午10点10分10秒。日期时间型数据用8个字节存储。2.变量在命令操作或程序执行过程中,其值可以改变的量称为变量。在VFP中,变量可以分为字段变量、内存变量、数组变量和系统变量4类。(1)字段变量字段变量是在数据库中定义的变量,每个字段名就是一个字段变量。字段变量是一种多值变量,它的当前值就是表的当前记录在该字段的取值。字段变量是在建立表的结构时定义的,它必须依附于数据表,随着数据表的打开和关闭而在内存中存储和释放。(2)内存变量内存变量是内存中的临时存储单元,用来保存在命令或程序执行过程中临时用到的输入、输出或中间数据,由用户根据需要定义或删除。1)内存变量的命名 定义内存变量时需要先为其命名。内存变量的命名规则有3条:以字母、汉字或下划线开头;由字母、汉字、下划线或数字组成;长度不超过128个字符。例如,x1、Number_2、姓名等都是合法的内存变量名。2)内存变量的赋值用户定义的内存变量有N、C、L、D、T、Y、S(屏幕型)7种类型,其类型由给它们所赋的值的类型决定。内存变量的赋值命令有两种格式:格式1:=格式2:STORE TO 说明:赋值命令的功能是计算表达式的值并将结果赋给内存变量。两种格式的赋值命令的区别是:“=”命令只能将表达式的值赋给一个内存变量,而STORE命令可以将同一表达式的值赋给多个内存变量(各变量名之间要用逗号分开)。在VFP中,一个内存变量在使用之前可以不事先声明或定义,当用赋值命令给变量赋值时,如果该变量并不存在,那么系统会自动建立它,即内存变量的值及类型在赋值时定义。同一内存变量可以多次被赋值,并以最后一次所赋的值为准。示例: x=1 & 内存变量x为N型,其值为8 name=张华 & 内存变量name为C型,其值为张华 STORE x+2 TO y,z & 计算x+2,并将结果3分别赋给内存变量y,z注意:“=”为赋值号,必须放在赋值号的左边。3)内存变量的输出格式1:?格式2:?说明:格式1的功能是将各变量值换行输出,若没有指定内存变量,则格式只能输出一个回车换行符。格式2的功能是将各变量值在当前行的光标所在处直接输出。示例: ? a,b & 把光标从当前行移至下一行行首,从该处开始显示a和b的值 ? a,b & 从光标的当前位置开始显示a和b的值 ? 2*3,4+5 & 计算2*3、4+5的值,并在下一行行首显示:6 94)内存变量与字段变量的区别字段变量是表结构的一部分,要使用字段变量,必须首先打开包含该字段的表。而内存变量独立于数据库文件而存在,与表无关。内存变量和字段变量可以同名,此时系统将优先存取字段变量。若要明确指定访问内存变量,则应在内存变量名前加前缀M.或M -,以示区别。例如: ? M.姓名 & 显示内存变量姓名的值 (3)数组变量数组是一组有序内存变量的集合,其中每一个内存变量就是一个数组元素。数组元素用数组名及其在数组中排列位置的下标来表示。下标的个数称为数组的维数。可以用小括号“()”或中括号“ ”括住数组下标。例如A(1)表示一维数组A的第1个元素,B(2,5)表示二维数组B的第2行、第5列元素。在VFP中,只使用一维数组和二维数组,数组使用之前必须先定义。1)数组的定义格式:DIMENSIONDECLARE(,),说明:该命令的功能是定义一维数组或二维数组及其下标的上限。下标的下限系统规定一律为1。示例: DIMENSION a(5),b(2,3) & 定义了一维数组a和二维数组b2)数组的赋值数组定义后,系统自动给每个数组元素赋以初值.F.。整个数组的数据类型为A(Array),用赋值命令可以给数组各元素赋同一值,也可以给每个元素赋不同类型的值。例如, a(1)= 刘美 & 给数组元素a(1)赋字符串刘美,表示姓名 a(2)= 20 & 给数组元素a(2)赋数值20,表示年龄 b=1 & 给数组b的6个元素赋相同的数值1一维数组各元素在内存中按其下标的顺序存储。二维数组各元素在内存中按行的顺序存储,使用时也可以用一维数组的形式访问二维数组。例如,二维数组b中的元素b(2,1)排在第2行第1列,由于每行有3个元素,所以该元素也可以用b(4)来表示。(4)系统变量系统变量是VFP系统自己定义的内存变量。系统变量名都由系统定义,而且要以下划线(_)开头。系统变量分别用于控制外部设备(如打印机、鼠标等)、屏幕输出格式及处理有关日历、计算器、剪切板等信息。例如: _DIARYDAT 可存储当前日期 _CLIPTEXT 接受文本并送入剪切板 _PWAIT 确定换页时,打印机是否暂停1.5.2 表达式表达式是由常量、变量和函数通过运算符连接起来的有特定意义的式子。根据表达式中用到的运算符和运算结果的类型的不同,表达式可分为数值型表达式、字符型表达式、日期时间型表达式、关系型表达式和逻辑型表达式5种。下面将分别作以介绍。1.数值型表达式数值型表达式由数值型常量、变量、函数和算术运算符组成,其运算结果仍为数值型。数值型数据可以是数值型常量、变量或函数。算术运算符及其优先级如下表所示:表1-15 算术运算符及其优先级 表1-16 字符运算符及其优先级运算符优先级说明( )1形成表达式内的子表达式*或2乘方运算*、/、%3乘、除运算,求余运算+、-4加、减运算运算符优先级说明+1完全连接,前后两个字符串首尾连接形成一个新的字符串-1压缩连接,连接前后两个字符串,并将前字符串的尾部空格移到合并后的新字符串尾部。示例:?3*6-2 & 显示结果为:16?(1+2(1+2)/(2+2) & 显示结果为:2.25 ?15%4 & 显示结果为:3 ?15%-4 & 显示结果为:-1说明:求余运算也叫取模运算,和取余函数MOD( )的作用相同。余数的正负号与除数相一致。2.字符型表达式字符型表达式由字符型常量、变量、函数和字符运算符组成,其运算结果仍然是字符型数据。字符运算符及其优先级如下所示:示例: ?Visual +FoxPro & 显示结果为:Visual FoxPro ?Visual -FoxPro & 显示结果为:VisualFoxPro ?关系 +数据库系统 & 显示结果为:关系 数据库系统 ?关系 -数据库系统 & 显示结果为:关系数据库系统3.日期时间型表达式日期时间型表达式可由日期时间型常量、变量、函数和日期时间运算符组成。其运算结果是日期时间型或数值型数据。日期时间运算符也有“+”和“-”两个,二者优先级相同。日期时间型表达式的格式有一定限制,不能任意组合,例如,表达式+是没有意义的。合法的日期时间表达式如表1-17所示,其中和都是数值表达式。表1-17 日期时间表达式的格式格式说明结果类型+指定日期若干天后的日期日期型-指定日期若干天后的日期日期型-两个指定日期相差的天数数值型+指定日期时间若干秒后的日期时间日期时间型-指定日期时间若干秒后的日期时间日期时间型-两个指定日期时间相差的秒数数值型示例:?2002-01-02+20 & 显示结果为:01/22/02 ?2002-02-20-2002-01-20 & 显示结果为:31 ?2003-05-18 10:10:10 AM+10 & 显示结果为:05/18/03 10:10:20 AM ?2003-05-18 11:10:10 AM-2003-05-18 10:10:10 AM & 显示结果为:3600符号“+”和“-”既可以作为日期时间运算符,也可以作为算术运算符和字符串连接运算符。到底作为哪种运算符使用,要看它们所连接的运算对象的数据类型而定。4.关系表达式关系表达式由关系运算符和数值表达式、字符表达式和日期时间表达式组成。关系表达式的运算结果为逻辑型数据。关系运算符有8种,具体如下表所示,它们的优先级相同。表1-18 关系运算符运算符说明运算符说明小于大于=大于等于=等于=字符串精确比较、#、!=不等于$子串包含测试运算符“=”和“$”仅适用于字符型数据,其他运算符适用于任何类型的数据,但要求前后两个运算对象的数据类型必须一致。(1)数值型和货币型数据比较按数值的大小比较。例如:0-1 $200$150(2)日期或日期时间型数据比较越早的日期或时间越小,越晚的日期或时间越大。例如:2003-06-302003-01-30(3)逻辑型数据比较 .T.F.(4)子串包含测试对于关系表达式$,如果右字符串包含在左字符串中,或者说左字符串是右字符串的一个子串,那么结果为逻辑真(.T.),否则结果为逻辑假(.F.)。 示例: STORE 数据库TO a STORE 关系数据库系统TO b ? a$b,b$a & 显示结果为:.T. .F.(5)字符型数据比较当比较两个字符串时,系统对两个字符串自左向右逐个字符进行比较,一旦发现两个对应字符不同,就根据这两个字符的排序序列决定两个字符串的大小。1)字符的排序规则英文字符按照ASCII码值排列。若设置系统的排序序列为Machine次序(即机器内码顺序),则ASCII码值顺序为:空格大写ABCD字母序列小写abcd字母序列。对于汉字而言,根据它们的拼音顺序决定大小。示例:SET COLLATE TO Machine & 按机器内码排序 ?AAB,aA,a A & 显示结果为:.T. .F. .F. ?一二,程序 & 显示结果为:.F. .T.2)字符串精确比较与EXACT设置用“=”比较两个字符串时,运算结果与SET EXACT ONOFF设置有关。该命令是设置精确匹配与否的开关。OFF状态(系统默认):只要右边的字符串与左边字符串的前面部分内容相匹配,比较结果即为.T.。ON状态:字符串比较时,先在较短字符串的尾部加上若干个空格,使字符串的长度相等,然后在进行比较。用“=”比较两个字符串时,其比较结果与SET EXACT命令的状态无关。只有当两个字符串完全相同,即两个字符串长度相同且每个位置上的字符都相同时,比较结果才为.T.。示例:s1=ab s2=ab s3=abc SET EXACT OFF & 系统默认,比较到右串结束即可 ? s1=s2,s2=s1,s1=s3,s3=s1,s1=s2 & 显示结果为:.F. .T. .F. .T. .F. SET EXACT ON & 填充空格,等长比较 ? s1=s2,s2=s1,s1=s3,s3=s1,s1=s2 & 显示结果为:.T. .T. .F. .F. .F.5.逻辑型表达式逻辑型表达式可由逻辑运算符和逻辑型常量、变量或函数和关系表达式组成。其运算结果是逻辑型常量。运算符及优先级如下所示:表1-19 逻辑运算符极其优先级运算符优先级说明NOT、!1逻辑非,取其右边逻辑值的相反值AND2逻辑与,两边的逻辑值都是真时才得真OR3逻辑或,两边的逻辑值都是假时才得假逻辑运算符两边也可以加上圆点,如:.NOT.、.AND.、.OR.。示例: ? NOTA$ABC & 显示结果为:.F. ? acAND .T. & 显示结果为:.T. ? 2010 OR AB=A & 显示结果为:.F.至此我们一共介绍了5种表达式,如果上述表达式在一个综合算式中出现,应当遵循:数值型表达式、字符型表达式、日期时间型表达式、关系型表达式、逻辑型表达式的先后运算顺序。在每一种表达式或综合表达式中,可以用圆括号(圆括号的优先级最高)来改变运算顺序。圆括号还可以嵌套使用。例如:? (30-12)/2=10 OR .F.) AND OR$MEMORY &显示结果为:.T.1.5.3 函数函数是VFP的一个重要组成部分。VFP系统为用户提供了一批标准函数(详细可参见附录),可以使用户以简便的方式完成某些特定的操作,大大地提高了用户的管理、维护和开发效率。另外,VFP还允许用户使用自定义函数。函数的一般形式为:函数名(参数1,参数2)函数由函数名、圆括号和参数组成。函数名起标识作用;参数是自变量,写在括号中,当有多个参数时,各个参数间用逗号分隔;括号中也可以没有参数,没有参数的函数称为无参函数。每个函数运算后都会返回一个值,称为函数值。函数名、参数和函数值是函数的三要素。下面介绍几种常用函数的功能及用法。1.数值函数(1)绝对值和符号函数格式:ABS() SIGN()说明:abs()返回指定的数值表达式的绝对值。 sign()返回指定的数值表达式的符号。当表达式的运算结果是正、负和零时,函数值分别为:1、-1和0。示例:x=1 ? ABS(6-x),ABS(x-6) & 显示结果为:5 5 ? SIGN(6-x),SIGN(x-6),SIGN(x-1) & 显示结果为:1 -1 0(2)求平方根函数格式:SQRT()说明:返回指定表达式的平方根。数值表达式的值不能为负。示例:? SQRT(36) & 显示结果为:6.00? SQRT(2*SQRT(2) & 显示结果为:1.68(3)取整函数格式:INT() ceiling() FLOOR()说明:INT()返回指定数值表达式的整数部分。 ceiling ()返回大于或等于指定数值表达式的最小整数。 floor()返回小于或等于指定数值表达式的最大整数。示例:? INT(4.6),INT(-4.6) & 显示结果为:4 -4 ? CEILING(4.6),CEILING(-4.6) & 显示结果为:5 -4 ? FLOOR(4.6),FLOOR(-4.6) & 显示结果为:4 -5(4)四舍五入函数格式:round(,)说明:将进行四舍五入,保留位小数。若小于0,那么它表示的是整数部分的舍入位数。示例:STORE 123.456 TO x ? ROUND(x,2), ROUND(x,1), ROUND(x,0) & 显示结果为:123.46 123.5 123? ROUND(x,-1), ROUND(x,-2) & 显示结果为:120 100(5)求余数函数格式:MOD(,)说明:返回两个数值相除后得到的余数。是被除数,是除数。余数的正负号与除数相同。如果被除数与除数同号,那么函数值即为两数相除的余数;如果被除数与除数异号,则函数值为两数相除的余数再加上除数的值。示例:? MOD(20,3), MOD(-20,-3) & 显示结果为:2 -2 ? MOD(20,-3),MOD(-20,3) & 显示结果为:-1 1(6)求最大值和最小值函数格式:MAX(,) MIN(,)说明:MAX()返回多个表达式值中的最大值。 MIN()返回多个表达式值中的最小值。示例:? MAX(12,28,3),MIN(3, 21, 04) & 显示结果为:28 04注意:自变量表达式的类型可以是数值型、字符型、货币型和日期时间型等多种数据类型,但所有表达式的类型必须相同。2.字符函数(1)求字符串长度函数格式:LEN()说明:返回指定字符表达式的长度,即所包含的字符个数。示例:? LEN(Visual FoxPro) & 显示结果为:13 ?LEN(你好) & 显示结果为:4(2)空格字符串生成函数格式:SPACE()说明:返回由指定数目的空格组成的字符串。示例:? SPACE(6) & 显示结果为: (3)大小写转换函数格式:LOWER() UPPER()说明:LOWER()将指定表达式中的大写字母转换成小写字母,其他字符不变。 UPPER()将指定表达式中的小写字母转换成大写字母,其他字符不变。示例:? LOWER(Visual FoxPro) & 显示结果为:visual foxpro ? UPPER(Visual FoxPro) & 显示结果为:VISUAL FOXPRO(4)删除前后空格函数格式:TRIM() LTRIM() ALLTRIM()说明:TRIM()返回指定字符表达式值去掉尾部空格后形成的字符串。 LTRIM()返回指定字符表达式值去掉前导空格后形成的字符串。 ALLTRIM()返回指定字符表达式值去掉前导和尾部空格后形成的字符串。示例:STORE SPACE(2)+abc+SPACE(1)TO x ? LEN(x),LEN(TRIM(X),LEN(LTRIM(x),LEN(ALLTRIM(x) & 结果为:6 5 4 3(5)取子串函数格式:LEFT(,) RIGHT(,) SUBSTR(,)说明:LEFT()从指定表达式值的左端取一个指定长度的子串作为函数值。 RIGHT()从指定表达式值的右端取一个指定长度的子串作为函数值。 SUBSTR()从指定表达式值的指定起始位置取指定长度的子串作为函数值。在SUBSTR()函数中,若缺省第三个自变量,则函数从指定位置一直取到最后一个字符。示例:s=ABCDEF ? LEFT(s,2),RIGHT(s,2) & 显示结果为:AB EF ? SUBSTR(s,3,2),SUBSTR(s,3) & 显示结果为:CD CDEF(6)计算子串出现次数函数格式:OCCURS(,)说明:返回第一个字符串在第二个字符串中出现的次数,函数值为数值型。若第一个字符串不是第二个字符串的子串,函数值为0。示例:s=banana ?OCCURS(b,s), OCCURS(a,s),OCCURS(n,s) &结果为:1 3 2 (7)求子串位置函数 格式:AT(,) ATC(,)说明:AT()的函数值为数值型。如果是的子串,则返回值的首字符在值中的位置;若不是子串,则返回0。ATC()与AT()功能类似,但在子串比较时不区分字母大小写。第三个自变量用于指定要在值中搜索值的第几次出现,缺省时默认为1。示例:? AT(pr, appropriate) & 显示结果为:3 ? AT(pr, appropriate,2) & 显示结果为:6 ? AT(A, appropriate,2) & 显示结果为:0 ? ATC(A, appropriate,2) & 显示结果为:9(act不区分大小写)?(8)子串替换函数格式:STRTRAN(,)说明:在中搜索,然后用替换它,再返回得到的新字符串。若未找到,则返回的值。示例:? STRTRAN(AS, A, BB) & 显示结果为:BBS(9)宏替换函数格式:&.说明:“&”的作用是将字符型内存变量的内容替换出来,它的返回类型与字符型内存变量的值去掉字符定界符后的值的类型一致,可以是各种数据类型。如果该函数与其后的字符无明确分界,则要用“.”作函数的结束标识。宏替换可以嵌套使用。示例: x=123 ? &x & 显示结果为:123 y=Fox ? Visual &y.Pro & 显示结果为:Visual FoxPro3.日期和时间函数(1)系统日期和时间函数格式:DATE() TIME() DATETIME()说明:DATE()返回当前系统日期,函数值为日期型。 TIME()以24小时制、hh:mm:ss格式返回当前系统时间,函数值为字符型。 DATETIME()返回当前系统日期时间,函数值为日期时间型。示例:? DATE(),TIME(),DATETIME() & 显示结果为:06/30/03 13:32:18 06/30/03 01:32:18 PM(2)求年份、月份和天数函数格式:YEAR() MONTH() DAY()说明:YEAR()从指定的日期表达式或日期时间表达式中返回年份。 MONTH()从指定的日期表达式或日期时间表达式中返回月份。 DAY()从指定的日期表达式或日期时间表达式中返回天数值。示例:t=2003-06-30 ? YEAR(t),MONTH(t),DAY(t) & 显示结果为:2003 6 30(3)求小时、分和秒函数格式:HOUR() MINUTE() SEC()说明:HOUR()从指定的日期时间表达式中返回小时部分(24小时制)。 MINUTE()从指定的日期时间表达式中返回分钟部分。 SEC()从指定的日期时间表达式中返回秒数部分示例:t=2003-06-30 01:32:18 PM ? HOUR(t),MINUTE(t),SEC(t) & 显示结果为:13 32 184.数据类型转换函数(1)字符与ASCII码值间的转换格式:ASC() CHR()说明:ASC()返回中第一个字符对应的ASCII码值。 CHR()返回ASCII码值为值的字符。示例:? ASC(a),CHR(65) & 显示结果为:97 A注意:CHR函数中的的值必须在0255之间,否则会产生出错信息。(2)数值转换成字符串格式:STR(,)说明:将的值转换成字符串,转换时根据需要自动进行四舍五入。返回字符串的长度应该是值的整数位数(包括负号)加上值,再加上1位小数点。如果给定的值比实际的数字位数大,则在字符串前面加前导空格以满足规定的长度要求;如果给定的值比实际的数字位数小,但又大于等于整数位数,则优先满足整数部分而自动调整小数位数;如果给定的值比实际的数字整数位数还小,则返回给定位数个星号(*),表示数值溢出。的默认值为0,的默认值为10。示例:x=-103.14159 ? STR(x,9,3),STR(x,6,3),STR(x,6) & 显示结果为:-103.142 -103.1 -103? STR(x,5,1),STR(x,3),STR(x) & 显示结果为:-103 * -103(3)字符串转换成数值格式:VAL()说明:将由数字符号(包括正负号、小数点)组成的字符型数据转换成相应的数值型数据。若字符串内出现非数字字符,那么只转换前面部分;若字符串的首位字符不是数字字符,则返回数值零,且忽略前导空格。示例:? VAL(-103.14) & 显示结果为:-103.14? VAL(-103.A14),VAL(A10314) & 显示结果为:-103.00 0.00(4)字符串转换成日期或日期时间格式:CTOD() CTOT()说明:CTOD()将值转换成日期型数据。 CTOT()将值转换成日期时间型数据。示例:?CTOD(01/01/2003) & 显示结果为:01/01/03 ? CTOT(01/01/2003+ +TIME() & 显示结果为:01/01/03 05:18:34 PM(5)日期或日期时间转换成字符串格式:DTOC() TTOC()说明:DTOC()将日期型或日期时间型数据的日期部分转换成字符串。 TTOC()将日期时间型数据转换成字符串。示例:t=2003-05-18 10:10:10 AM ? DTOC(t) & 显示结果为:05/18/03 ? TTOC(t) & 显示结果为:05/18/03 10:10:10 AM5.测试函数在数据处理过程中,有时用户需要了解操作对象的状态。尤其是在运行应用程序时,常常需要根据测试结果来决定下一步的处理方法或程序走向。(1)值域测试函数格式:BETWEEN(,)说明:判断的值是否介于和的值之间,如果介于二者之间,则函数值为.T.。若或有一个是NULL值,那么函数值也是NULL。示例:? BETWEEN(150,100,200) & 显示结果为:.T.? BETWEEN(50,NULL,100) & 显示结果为:.NULL.注意:该函数的自变量类型可以是数值型、字符型、日期型等多种数据类型,但三个自变量的数据类型要一致。(2)空值(NULL)测试函数格式:ISNULL()说明:判断指定表达式的运算结果是否为NULL值,若是NULL值返回逻辑真(.T.),否则返回逻辑假(.F.)。示例:? ISNULL(SPACE(0) & 显示结果为:.F.STORE .NULL.TO x ? x,ISNULL(x) & 显示结果为:.NULL. .T.(3)“空”值测试函数格式:EMPTY()说明:判断指定表达式的运算结果是否为“空”值,如果是返回逻辑真(.T.),否则返回逻辑假(.F.)。这里所说的“空”值NULL值是两个不同的概念。函数EMPTY(.NULL.)的函数值为逻辑假(.F.)。不同类型数据的“空”值有不同的规定,如表1-20所示。表1-20 不同类型数据的“空”值规定数据类型“空”值数据类型“空”值数值型0双精度型0字符型空串、空格、制表符、回车、换行日期型空(如CTOD()货币型0日期时间型空(如CTOT()浮点型0逻辑型.F.整型0备注字段空(无内容)示例:? EMPTY(0),EMPTY(SPACE(0),EMPTY(.F.) & 显示结果为:.T. .T. .T.(4)数据类型测试函数格式:VARTYPE(,)说明:测试的类型,返回一个大写字母,函数值为字符型。字母的含义如表1-21所示。表1-21 用VARTYPE()测得的数据类型返回的字母数据类型返回的字母数据类型C字符型或备注型G通用型N数值型、整型、浮点型或双精度型D日期型Y货币型T日期时间型L逻辑型XNULL值O对象型U未定义若是一个数组,则根据第一个数组元素的类型返回字符型。若的运算结果是NULL值,则根据的值决定是否返回的类型:如果的值为.T.,就返回的原数据类型;如果的值为.F.或缺省,则返回字母X以表明的运算结果是NULL值。示例:x=abc x=.NULL. y=$100 ? VARTYPE(x),VARTYPE(x,.T.),VARTYPE(y) & 显示结果为:X C Y注意:有一个与VARTYPE()函数类似的函数TYPE()(要求表达式带字符串定界符),该函数的功能是计算表达式并返回它的类型。示例:x=3? TYPE(x) & 显示结果为:N(5)条件测试函数格式:IIF(,)说明:测试的值,若为逻辑真(.T.),函数返回的值,若为逻辑假(.F.),函数返回的值。和的类型不要求相同。示例:? IIF(32, TRUE, FALSE) & 显示结果为:TRUEVFP系统对表中的记录是逐条进行处理的。系统为每一个打开的表设置了一个记录指针,指向正在被操作的记录,该记录被称为当前记录。在数据表中,最上面的记录是首记录,记为TOP,最下面的记录是尾记录,记为BOTTOM。在第一个记录之前有一个文件起始标识,称为Beginning of File(BOF);在最后一个记录的后面有一个文件结束标识,称为End of File(EOF)。刚刚打开表时,记录指针总是指向首记录。使用测试函数能够得到指针的位置。下面介绍几个与数据表记录有关的测试函数。(6)表文件首测试函数格式:BOF()说明:测试指定表文件中的记录指针是否指向文件首,若是返回.T.,否则返回.F.。若缺省自变量,则表示测试当前表文件。若在指定工作区上没有打开表文件,函数返回.F.。若表文件中不包含任何记录,函数返回.T.。(7)表文件尾测试函数格式:EOF()说明:测试当前表文件(若缺省自变量)或指定表文件中的记录指针是否指向文件尾,若是返回.T.,否则返回.F.。若在指定工作区上没有打开表文件,函数返回.F.。若表文件中不包含任何记录,函数返回.T.。(8)记录号测试函数格式:RECNO()说明:返回当前表文件(若缺省自变量)或指定表文件中的当前记录(记录指针所指向的记录)的记录号。若指定工作区上没有打开表文件,函数值为0;若记录指针指向表文件首,函数值为1,即与表中第一条记录的记录号相同;若记录指针指向表文件尾,函数值为表文件中的记录总数加1。(9)记录个数测试函数格式:RECCOUNT()说明:返回当前表文件(若缺省自变量)或指定表文件中的记录个数。如果指定工作区上没有打开表文件,函数值为0。示例:USE A1 & 刚打开表A1(假定表中有8条记录),指针指向首记录 ? BOF(),RECNO() & 显示结果为:.F. 1 SKIP 1 & 记录指针向前移动一条记录 ? BOF(),RECNO() & 显示结果为:.T. 1 GO BOTTOM & 移动记录指针到尾记录 ? EOF(),RECNO() & 显示结果为:.F. 8 SKIP & 记录指针向后移动一条记录 ? EOF(),RECNO(),RECCOUNT() & 显示结果为:.T. 9 8注意:RECCOUNT()返回的是表文件中物理上存在的记录个数,不管记录是否被逻辑删除以及SET DELETED的状态如何,该函数都会把它们考虑在内。(10)记录查找测试函数格式:FOUND()说明:测试当前表文件(若缺省自变量)或指定表文件中最近一次记录查找是否成功。若找到函数值为.T.,否则函数值为.F.。常用的记录查找操作命令有:FIND、SEEK、LOCATE。(11)记录删除测试函数格式:DELETED()说明:测试当前表文件(若缺省自变量)或指定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论