1第2章VisualFoxPro数据与数据运算2本章概要:VisualFoxpro的语言有哪些要素VFP支持的数据类型VFP常量定义VFP变量定义VFP表达式定义,表达式运算符及其优先级VFP函数类型与功能32.1VisualFoxPro数据2.1.1VisualFoxPro数据类型为了满足存储和处理数据的需要,VisualFoxPro提供了13种类型,它们是字符型、数值型、整型、浮点型、双精度型、货币型、逻辑性、日期型、日期时间型、备注型、通用型、字符型(二进制)和备注型(二进制)。42.1.2常量常量(Constant)是指在程序运行期间,其值不变的量。常量的写法和其类型有关。VisualFoxpro6.0常见的数据类型的常量有:数值型、货币型、字符型、日期型、日期时间型、逻辑型。51.数值型常量数值型常量也就是常数,用来表示数量的大小。数值型常量由数字0~9、小数点和正负号构成,在内存中占8个字节,取值范围是-0.9999999999E+19-0.9999999999E+20。例如:65、8.45、﹣43等。62.字符型常量字符型常量也称字符串,其表示方法是用半角单引号′′、双引号〞〞或方括号[]把字符括起来,这里的单引号′′、双引号〞〞或方括号[]称为“定界符”,其作用是确定字符串的起始和终止界限,它本身不作为字符串的一部分。定界符虽然不作为常量本身的内容,但它规定了常量的类型以及常量的起始和终止界限。例如:金苹果。73.逻辑型常量逻辑型数据只有逻辑真和逻辑假两个值。逻辑真的常量形式有:.T.、.t.、.Y.和.y.,逻辑假的常量表示形式有:.F.、.f.、.N.和.n.。前后两个黑点作为逻辑型常量的定界符是必不可少的,否则会被误认为变量名。逻辑型数据只占用1个字符。84.日期型常量日期型常量是用一对花括号{}括起来包括日期的数据。花括号内包括年、月、日3部分内容,各部分内容之间用分隔符分隔。常用的日期分隔符有斜杠(/)、连字号(﹣)、句点(.)和空格。日期型常量格式传统的日期格式严格的日期格式9常用日期格式短语格式短语格式AMERICANmm/dd/yyANSIyy.mm.ddBRITISH/FRENCHdd/mm/yyGERMANdd.mm.yyITALIANdd-mm-yyJAPANyy/mm/ddUSAmm-dd-yyMDYmm/dd/yyDMYdd/mm/yyYMDyy/mm/dd105.日期时间型常量日期时间型常量包括日期和时间两部分:{日期,时间}。日期部分与日期型常量相似,也有传统和严格的格式。日期部分的格式为:[hh[:mm[:ss]a|p]]。其中hh、mm和ss分别代表时、分和秒。系统默认的格式为AM。日期时间型数据用8个字节存储,第一个4字节保存日期,其余的4字节保存时间。116.货币型常量货币型常量用来表示货币值,其书写格式与数值型常量类似,但在表示货币型常量时,需要在数字前加上货币符号。货币数据在存储和计算时,采用4位小数,占据8字节存储空间。货币型数据用字母Y表示。如果一个货币型常量多于4位小数,则系统会自动将多余的小数四舍五入。例如:常量$9.8756789存储为$9.8757。122.1.3变量变量(Variable)是指在程序运行期间其数值会变化的量。变量的两个特性:变量的名,在程序运行期间是不变的。变量的值,在程序运行期间是可变的。通过变量名引用变量值。13VisualFoxPro创建变量名时,必须遵循以下命名规则:只使用字母、汉字、下划线和数字。以字母、汉字、下划线开头。使用1到128个字符,字段名,自由表名和索引标识最多只能10字符长。避免使用VisualFoxPro保留字。VFP定义的,有特定含义。必须是见名知意,即看见变量名知道变量名的含义。例如要对年龄取变量名,使用age就比使用x好。141.内存变量根据变量的存在方式,分为内存变量和字段变量。字段变量:字段变量是数据库管理系统中的一个重要概念,字段变量就是指数据库表中已经定义的任意一个字段,伴随数据表打开而存在的变量,字段变量随数据表的关闭而消失。内存变量:不是字段变量就一定是内存变量。是一系列机算机内存单元,用于保存对数据库存进行某种分析处理或程序执行过程中的中间结果和最终结果。内存变量的类型在VisualFoxPro中可以为数值型、字符型、逻辑型和日期型。15内存变量常用命令(1)内存变量的赋值内存变量赋值语句格式一如下:变量名|数组名=表达式例:age=20?age20(输出结果)内存变量赋值语句格式二如下:STORE表达式TO变量列表|数组变量列表例:store22toage1,age2?age1,age22222(输出结果)16(2)表达式值的显示格式:?|??表达式列表?每次另起一新行输出结果,而??是在当前行输出结果。例:?[他说:太好了!]输出的结果是:他说:太好了!。例:?“好”,“太好了!”输出结果是:好太好了!17(3)内存变量显示格式1:LISTMEMORY[LIKE通配符][TOPRINTER|TOFILE文件名]格式2:DISPLAYMEMORY[LIKE通配符][TOPRINTER|TOFILE文件名]18(4)清除内存变量格式1:CLEARMEMORY格式2:RELEASE内存变量名表格式3:RELEASEALL[EXTENDED]格式4:RELEASEALL[LIKE通配符|EXCEPT通配符]19(5)内存变量的保存与恢复格式1:SAVETO内存变量文件名[ALLLIKE|EXCEPT通配符]格式2:RESTOREFROM内存变量文件名[ADDITIVE]202.系统变量系统变量是特有的变量,是系统内部提供的,为方便程序设计人员和用户。系统变量由VisualFoxPro自动定义和维护,往往以“_”(下划线)开头,因此在给普通的内存变量命名时最好不要以“_”字符开头,以避免混淆。一般情况下,不要修改系统变量。213.字段变量由于表中的各条记录对同一个字段名可能取值不同,该字段变量的取值会随着当前记录的变化而变化,因此称为字段变量。它是数据库中一个非常重要的概念。但值得注意的是,若内存变量名与当前所打开的数据表的字段变量同名,引用时,系统优先字段变量,若要特指内存变量,应在内存变量名前加上前缀“M.”或“M-”。222.1.4数组变量创建数组的格式:DIMENSION数组名(下标上限1[,下标上限2])[,…]DECLARE数组名(下标上限1[,下标上限2])[,…]23例如:数组的定义及赋值DIMENSIONa(2),b(2,2)&&定义两个数组a=100&&a数组所有元素赋值为100b(1,1)=a(1)&&引用数a的元素给b数组元素赋值STORE.T.TOb(1,1)&&给b数组一个元素重复赋逻辑值b(1,2)=’南京大学’&&给b数组一个元素赋字符值”南京大学”b(2,1)={^2006/11/16}&&给b数组一个元素赋日期值24创建数组的注意项:在一切可以使用简单内存变量的地方,均可以使用数组元素。在赋值和输入语句中使用数组名时,表示将同一个值同时赋给该数组的全部数组元素。在同一个运行环境下,数组名不能与简单变量名重复。在赋值语句中的表达式位置不能出现数组名,可以出现具体的数组元素名。可以用一维数组的形式访问二维数组。252.2表达式及其运算261.数值表达式定义:数值表达式又叫做算术表达式,是最容易理解的一种表达式。数值型数据可以是数值型常量或者变量。算术运算优先级优先级运算符说明1()形成表达式内的子表达式2**或^乘方运算3*、/、%乘、除运算、求余运算4+、—加、减运算2.2.1表达式272.字符表达式定义:由字符串连接运算符将字符型常量、变量或者函数连接起来形成,其运算结果仍然是一个字符型数据。运算符:﹢:前后两个字符串首尾连接形成一个新的字符串。﹣:连接前后两个字符串,并将前字符串的尾部空格移到合并后的新字符串尾部。它们的优先级相同。283.日期时间表达式运算符:日期时间表达式中可以使用的运算符也有﹢和﹣。日期时间表达式的格式格式结果及类型日期﹢天数日期型。指定若干天后的日期天数﹢日期日期型。指定若干天后的日期日期﹣天数日期型。指定若干天前的日期日期﹣日期数值型。两个指定日期相差的天数日期时间﹢秒数日期时间型。指定日期时间若干秒后的日期时间秒数﹢日期时间日期时间型。指定日期时间若干秒后的日期时间日期时间﹣秒数日期时间型。指定日期时间若干秒前的日期时间日期时间﹣日期时间数值型。两个指定日期时间相差的秒数294.关系表达式(1)定义:通常称为简单逻辑表达式,它由关系运算符将两个运算对象连接起来形成。关系运算符运算符说明运算符说明小于=小于等于大于=大于等于=等于==字符串精确比较、#或!=不等于$子串包含测试30(2)设置字符的排序次序人机对话方式方法:•选择“工具”菜单栏下的“选项”,打开“选项”对话框,单击“数据”选项卡。•从右上方的“排序序列”下拉框中选择“Machine(机器)”、“PinYin(拼音)”或者“Stroke(笔画)”。命令方式设置:SETCOLLATETO“排序次序名”31(3)字符串精确比较与EXACT设置SETEXACT对字符串比较的影响比较=(EXACTOFF)=(EXACTON)==(EXACTON或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.325.逻辑表达式定义:由逻辑运算符将逻辑型数据连接而形成的,其运算符结果仍然是逻辑型数据。运算符:.NOT.或!(逻辑非)、.AND.(逻辑与)和.OR.(逻辑或)。其优先级顺序依次为.NOT.、.AND.、.OR.。331112.NOT.1111.AND.1211.OR.12.T..T..F..T..T..T..F..F..F..T..F..T..T..F..T..F..F..T..F..F.逻辑运算规则34运算符小结:优先次序分类运算符符号及优先次序高表达式优先级低算术运算符()**或^*/%+-字串运算符+-字符串连接关系运算符==或#或!====$(所有关系运算符优先级相同)逻辑运算符().NOT.或!.AND..OR.352.3函数函数的一般形式为:函数名([参数1][,参数2]…)362.3.1数值函数1.绝对值和符号函数格式:ABS(数值表达式)SIGN(数值表达式)功能:ABS()函数返回指定的数值表达式的绝对值。SIGN()函数返回指定数值表达式的符号。当表达式的结果为正、负和0时,函数值分别为1、-1和0。372.求平方根函数格式:SQRT(数值表达式)功能:SQRT()函数返回数值表达式的平方根。3.圆周率函数格式:PI()功能:PI()函数返回数值常量π的近似值。384.取整数函数格式:INT(数值表达式)CELING(数值表达式)FLOOR(数值表达式)功能:INT()函数返回数值表达式的整数部分。CELING()函数返回大于或等于数值表达式的最小整数。FLOOR()函数返回小于或等于数值表达式的最大整数。395.四舍五入函数格式:ROUND(数值表达式1,数值表达式2)功能:ROUND()函数返回数据表达式在指定位置四舍五入后的结果。6.求余函数格式: