单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,VisualFoxPro数据与数据运算,(第四章),数据类型,数组,常量和变量,表达式与运算符,函数,VisualFoxPro数据与数据运算(第四章)数据类型数,1,数据记录客观事物属性的值,通常分为不同的数据类型,数据类型是数据的基本属性.VisualFoxPro中提供了多种数据类型的数据,数据类型一旦被定义,就确定了他的存储方式和使用方式.VisualFoxPro提供了以下几种数据类型:,4.1 数据类型,数据记录客观事物属性的值,通常分为不同的数据类型,数据类型是,2,类型,说明,数值型,浮点型,双精度型,整型,货币型,字符型,日期型,日期时间型,逻辑型,备注型,通用型,类型说明数值型浮点型双精度型整型货币型字符型日期型日期时间型,3,常量是指在程序运行过程中始终保持不变的数据。,4.2 常量和变量,变量,常量,变量是在程序运行的不同时刻,其值会发生改变的量,常量是指在程序运行过程中始终保持不变的数据。4.2 常量和,4,常量包括备注型和通用型以外的所有数据类型,主要有:,1.数值型常量,由数字、小数点、正负号组成,数据最大精度为16位有效数据;,数据最大长度为20位,其中小数点占1位。,2.字符型常量,字符型常量是用定界符界定的一串字符。,常用的定界符有单引号、双引号“”、和方括号 等。如果定界符成为常量的组成部分,则应使用另外的定界符。字符型常量最大长度为254位。,4.2.1 常量,常量包括备注型和通用型以外的所有数据类型,主要有:4.2.1,5,3.日期型与日期时间型常量,日期型与日期时间型常量是用 括起来的一个包括日期和时间的数据,其有效性取决于格式的设置。空的时间值可用/:表示。,4.逻辑型常量,逻辑型常量只有真假两个值。用.T.或.t.、.Y.或.y.表示逻辑值为真,用.F.或.f.、.N.或.n.表示逻辑值为假。字母两边的英文句点不能省略。,5.货币型常量,货币型常量用于表示货币值。使用时应加上货币符号。,3.日期型与日期时间型常量,6,在Visual FoxPro中,常用的变量类型有:内存变量、字段变量、数组变量和系统变量。,内存变量是独立于数据库以外,存储在内存中的临时变量。它通常用于存放程序运行过程中所需要的原始数据、中间结果以及最终结果。,内存变量的数据类型由它所保存的数据的类型决定。当用户退出Visual FoxPro时,内存变量将自动消失。,需要注意的是:当内存变量与字段同名时,若要使用内存变量,那么要在引用的内存变量名称之前添加“M.”。,4.2.2 变量,在Visual FoxPro中,常用的变量类型有:内存变量、,7,字段变量是用户在定义表结构时所定义的字段名,它是一种多值变量。,数组变量是一种特殊的内存变量。它是指一组有序的数据的集合,数组中的各元素称为数组元素。,系统变量是Visual FoxPro建立并维护的内存变量。这些变量的名称由系统定义,并且以下划线“_”开头。,变量的类型与常量类型相同。每一个变量的具体类型取决于其被赋予的值,因此在不同时刻,一个变量可以存放不同类型的数据。这里我们将主要讨论内存变量。,字段变量是用户在定义表结构时所定义的字段名,它是一种多值变量,8,1.使用STORE命令为内存变量赋值,命令格式:STORE eExpression TO VarNameList|ArrayNameList,命令功能:该命令用于为内存变量或数组变量赋值。,命令说明:,(1)eExpression参数是一个表达式。该表达式可以由常量、变量、函数和运算符组成。该命令将表达式的值赋予内存变量或数组变量。,(2)VarNameList参数是内存变量列表。内存变量列表中的内存变量应用逗号分隔。该命令可以同时为多个内存变量赋值。,(3)ArrayNameList参数是数组变量列表。数组变量列表中的数组变量应用逗号分隔。,(4)该命令可以同时为多个内存变量或数组变量赋值。,【例】store 3*4 to a1,a2,1.使用STORE命令为内存变量赋值,9,2.直接为内存变量赋值,使用“=”可以直接为内存变量赋值。,【例】b1=3 将b1赋值3;,b2=b1+2 将b1加2后的值赋给b2,此时b2等于5;,b2=b2+3 将b2加3后的值再赋给b2,此时b2等于8。,说明:一个变量的值可以不断变化,最终结果是它最后一次的赋值。,3.显示内存变量,可以使用 DISPLAY MEMORY命令或LIST MEMORY命令来查看已定义的变量。,命令格式:DISPLAY MEMORY 或 LIST MEMORY,命令功能:该命令用于显示已定义的变量。,2.直接为内存变量赋值,10,4.释放内存变量,为了节省存储空间,变量使用完以后应及时释放,可以使用以下命令之一来释放存储空间:,l,RELEASE ALL命令,命令格式:RELEASE ALL,命令功能:该命令用于释放全部变量。,l,RELEASE 命令,命令格式:RELEASE,命令功能:该命令用于释放指定的内存变量。,命令说明:MemVarList参数是内存变量列表。,4.释放内存变量,11,l,RELEASE ALL LIKE LIKE Skeleton|EXCEPT Skeleton 命令,命令格式:RELEASE ALL LIKE Skeleton|EXCEPT Skeleton,命令功能:该命令用于释放与指定模式相匹配的变量。,命令说明,(1)LIKE Skeleton子句用于指定要释放与指定的模式相匹配的所有变量。Skeleton参数是含有通配符的模式。通配符“*”可以匹配一个字符串;通配符“?”可以匹配一个字符。,(2)EXCEPT Skeleton子句用于指定要释放除与指定的模式相匹配之外的所有变量。Skeleton参数是含有通配符的模式。,lRELEASE ALL LIKE LIKE Sk,12,l,CLEAR MEMORY命令,命令格式:CLEAR MEMORY,命令功能:该命令用于释放全部变量。,【例】RELEASE a1,a2 释放变量a1,a2,RELEASE ALL LIKE a*释放以字母a开头的变量,VISUALFOXPRO数据与数据运算课件,13,数组是按一定顺序排列的一组内存变量的集合,数组中的变量称为数组元素。,数组必须先定义后使用。,命令格式,DIMENSION ArrayName1(nRows1,nColumns1),ArrayName2(nRows2,nColumns2).,或,DECLARE ArrayName1(nRows1,nColumns1),ArrayName2(nRows2,nColumns2).,命令功能:该命令用于定义一维或二维数组。,3 数组,数组是按一定顺序排列的一组内存变量的集合,数组中的变量称为数,14,命令说明:,(1)DIMENSION命令和DECLARE命令可以一次定义多个数组。,(2)只设置nRows参数时,定义一维数组;同时设置nRows 和nColumns参数时,定义二维数组。,(3)系统规定nRows和nColumns参数的下界为1。,(4)数组元素可以包含各种类型的数据,第一次定义时被赋值为.F.。,【例】DIMENSION A(3),B(2,3),命令说明:,15,表达式是指用运算符将常量、变量、字段或函数连接起来的有意义的式子。,其类型由表达式最终计算结果的数据类型决定,主要有:数值型、字符型、日期型、关系型、逻辑型。运算符包括:算术运算符、字符运算符、关系运算符、逻辑运算符。不同表达式使用的运算符不同,但运算符两边的数据类型必须相同,否则将导致因数据类型不匹配而出错。,4-3 表达式与运算符,数值表达式,日期表达式,字符表达式,关系表达式,逻辑表达式,表达式是指用运算符将常量、变量、字段或函数连接起来的有意义的,16,数值表达式是由算术运算符将常量、变量、字段或函数连接起来的式子,其结果仍为数值型数据。,算术运算符有:+、-、*、/、*或、,优先级为:*()、*、/、+、-,同一优先级的按从左到右计算。,【例】?(3*4+SQRT(25)/5)*4 结果为52,4.3.1 数值表达式,数值表达式是由算术运算符将常量、变量、字段或函数连接起来的式,17,字符表达式是由字符运算符将常量、变量、字段或函数连接起来的式子,其结果仍为字符型数据。,在字符运算符两边的数据必须是字符型数据。,字符运算符有“+”和“-”两种。,(1)直接连接(+),即用“+”将两个或多个字符串首尾连接形成一个新的字符串。,(2)去空连接(-),即用“-”将两个或多个字符串相连接。如果前一个字符串尾部有空格,则将此空格移到后一个字符串的尾部。,【例】?“ABC ”+“DEF”=“ABC DEF”,?“ABC ”-“DEF”=“ABCDEF ”,4.3.2 字符表达式,字符表达式是由字符运算符将常量、变量、字段或函数连接起来的式,18,日期表达式是由、运算符将日期连接起来的表达式,其结果仍为日期型数据。,【例】?04/03/99+20 结果为04/23/99,?04/03/99-20 结果为03/14/99,?04/03/99-03/14/99 结果为20(两日期相距的天数),需要注意的是:两个日期值相加是无意义的。,4.3.3 日期表达式,日期表达式是由、运算符将日期连接起来的表达式,其结果仍为,19,关系表达式是由关系运算符将数值表达式、字符表达式、日期表达式连接起来的表达式,结果为逻辑真和逻辑假,分别用.T.和.F.表示。,关系运算符有:、=、(!=、#)、=、=、$,说明:,(1)=与=不完全相同。前者称为普通比较,后者称为精确比较。当环境设定为SET EXACT ON时,二者并无区别;当环境设定为SET EXACT OFF时,结果是不同的。比较时,使用右字符串去比较左字符串。当右字符串比较完,则比较结束。如果此时的比较结果相同,则=比较的值为.T.,而不管左字符串是否结束;相反,=则要求左右必须完全一致,结果才为.T.。,【例】?“abcde”=“abc”,当设置了SET EXACT OFF时,上述关系表达式结果为.T.,当设置了SET EXACT ON时,上述关系表达式结果为.F.,4.3.4 关系表达式,关系表达式是由关系运算符将数值表达式、字符表达式、日期表达式,20,(2)比较大小时,日期早的日期型数据小于日期晚的日期型数据;字符型数据从左到右依次按其ASCII码值比较。,(3)字符串包含运算符“$”用于比较左字符串是否存在于右字符串中。,如果存在,则为.T.,反之为.F.。,【例】?“王”$“王红”结果为.T.,(2)比较大小时,日期早的日期型数据小于日期晚的日期型数据;,21,逻辑表达式是由逻辑运算符将关系表达式连接起来的表达式,结果为逻辑真和逻辑假。,逻辑运算符有:.NOT.、.AND.和.OR.。,优先级别依此是:.NOT.、.AND.、.OR.。,运算规则为:,使用.NOT.运算的表达式为假,则逻辑表达式的值为真。,使用.AND.连接的两个表达式的值同时为真,逻辑表达式的值为真;,使用.OR.连接的两个表达式的值,只要有一个为真,则逻辑表达式的值为真。,4.3.5 逻辑表达式,逻辑表达式是由逻辑运算符将关系表达式连接起来的表达式,结果为,22,【例】83.and.8“c”.or.“a”“c”,.not.5=28 结果为.T.,?性别=“女”.OR.年龄3.and.8104.3.5 逻辑表达式,23,Visual FoxPro提供了大量的函数,按返回值的类型或功能主要分为以下几类。,4-4 函数,数值型函数,日期函数,字符型函数,转换函数,测试函数,Visual FoxPro提供了大量的函数,按返回值的类型或,24,(,1)绝对值函数,格式:ABS(),功能:求数值表达式的绝对值。,【例】?ABS(-12.34)结果为12.34,(2)最大值函数,格式:MAX(,)