1、第三章 数据与数据运算,数据与数据运算,31 常量与变量 32 表达式 33 常用函数,结束,31 常量与变量,311 常量 312 变量 313 内存变量常用命令,返回,311 常量,1、数值型常量 2、货币型常量 3、字符型常量 4、日期型常量 5、日期时间型常量 6、逻辑型常量,返回,1、数值型常量,数值型常量也就是常数,用来表示一个数量的大小,由数字09、小数点和正负号构成。可以使用科学记数法书写。 数值型数据在内存中用8个字节表示,其取值范围是:0.9999999999E+190.9999999999E+20。,返回,2、货币型常量,货币型常量用来表示货币值,其书写格式与数值型类似,
2、但要加上一个前置的符号($)。货币数据在存储和计算时,采用4位小数。如果一个货币型常量多于4位小数,那么系统会自动将多余的小数位四舍五入。 货币型常量没有科学记数法形式,在内存中占用8个字节,取值范围是:922337203685477.5807922337203685477.5807。,返回,3、字符型常量,字符型常量也称为字符串,其表示方法是用半角单引号、双引号或方括号把字符串扩起来。这里的单引号、双引号或方括号称为定界符。许多学理都有定界符。定界符虽然不作为常量本身的内容,但它规定了常量的类型以及常量的起始和终止界限。 字符型常量的定界符必须成对匹配,不能一边用单引号而另一边用双引号,如果
3、某种定界符本身也是字符串的内容,则需要用另一种定界符为该字符串定界。 注意,不包含任何字符的字符串(” “)叫空串。空串与包含空格的字符串(” “)不同。 无格式输出命令,返回,无格式输出命令,? 命令的功能是在下一行显示若干个表达式的值。 ? 命令的功能是在同一行显示表达式的值。,返回,4、日期型常量,日期型常量的定界符是一对花括号。花括号内包括年、月、日三部分内容,各部分内容之间用分隔符分隔。分隔符可以是斜杠(/)、连字号(-)、句号(.)和空格,其中斜杠是系统在显示日期型数据时使用的默认分隔符。 (1)传统的日期格式 (2)严格的日期格式 (3)影响日期格式的设置命令,返回,传统的日期格
4、式,系统默认的日期型数据为美国日期格式“mm/dd/yy”(月月/日日/年年),传统日期格式中的月、日各为2位数字,而年份可以是2位数字,也可以是4位数字。 这种格式的日期型常量要受到命令语句SET DATE TO和SET CENTURY TO设置的影响。也就是说,在不同的设置状态下,计算机会对同一个日期型常量做出不同解释。比如,日期常量10/08/01可以被解释为:2001年10月8日、2001年8月10日、2110年8月1日等。,返回,严格的日期格式,yyyy-mm-dd,用这种格式书写的日期常量能表达一个确切的日期,它不受SET DATE等语句设置的影响。这种格式的日期常量在书写时要注意
5、:花括号内第一个字符必须是脱字符();年份必须是4位;年月日的次序不能颠倒、不能缺省。日期型数据用8个字节表示,取值范围是:0001-01-019999-12-31。 严格的日期格式可以在任何情况下使用,而传统的日期格式只能在SET STRICTDATE TO 0状态下使用。输入日期常量时使用严格的日期格式十分方便。若在SET STRICTDATE TO 1或2状态下使用传统日期格式,系统将弹出错误提示框。,返回,影响日期格式的设置命令,约定:方括号中的内容表示可选,用竖杠分割的内容表示任选其一,尖括号中的内容由用户提供。 命令格式:SET MARK TO 日期分隔符 功能:用于设置显示日期型
6、数据时使用的分隔符,如“-”、“.”等。如果执行SET MARK TO没有指定任何分隔符,表示恢复系统默认的斜杠分隔符。 命令格式: SET DATE TO AMERICAN|ANSI|BRITISH|FRENCH|GERMAN|ITALIAN |JAPAN|USA|MDY|DMY|YMD 功能:设置日期显示的格式。 命令格式:SET CENTURY ON/OFF ROLLOVER 年份参照值 功能:用于设置显示日期型数据时是否显示世纪。“TO”选项确定用2位数字表示年份所处的世纪,具体地说,如果该日期的2位数字年份大于等于年份参考值,则它所处的世纪即世纪值;否则为世纪值+1。 命令格式:SE
7、T STRICTDATE TO 0|1|2 功能:用于设置是否对日期格式进行检查。 0表示不进行严格的日期格式检查,目的是与早期的Visual FoxPro兼容。 1表示进行严格的日期格式检查,它是系统默认的设置。 2表示进行严格的日期格式检查,并且对CTOS()和CTOT()函数的格式也有效。,返回,5、日期时间型常量,日期时间型常量包括日期和时间两部分内容:,。部分与日期型常量相似,也有传统的和严格的两种模式。 部分的格式为:hh:mm:ssa|p。其中hh、mm、ss分别代表时、分、秒,默认值分别为12、0和0。AM(或A)和PM(或P)分别代表上午和下午,默认值为AM。如果指定的时间大
8、于等于12,则自然为下午的时间。 日期时间型数据用8个字节存储。日期部分的取值范围与日期型数据相同,时间部分的取值范围是:00:00:00AM11:59:59PM。,返回,6、逻辑型常量,逻辑型数据只有逻辑真和逻辑假两个值。逻辑真的常量表示形式有:.T.、.t.、.Y.和.y.。逻辑假的常量表示形式有:.F.、.f.、.N.和.n.。前后两个句点作为逻辑型常量的定界符是必不可少的,否则会被误认为变量名。逻辑型数据只占用一个字节。,返回,312 变量,变量值是能够随时更改的。Visual FoxPro的变量分为字段变量和内存变量两大类。由于表中的各条记录对同一个字段可能取值不同,因此,表中的字段
9、名就是变量,称为字段变量。 内存变量是内存中的一个存储区域,变量值就是存放在这个存储区域里的数据,变量的类型取决于变量值的类型。在Visual FoxPro中,变量的类型随着所赋值数据类型的变化而变化。 内存变量的数据类型包括字符型(C)、数值型(N)、货币型(Y)、逻辑型(L)、日期型(D)和日期时间型(T)。 1、简单内存变量 2、数组,返回,简单内存变量,每一个变量都有一个名字,可以通过变量名访问变量。如果当前表中存在一个同名的字段变量,则在访问内存变量时,必须在变量名前加上前缀M.(或M-),否则系统将访问同名的字段变量。 向简单内存变量赋值不必事先定义,变量的赋值命令有以下两种格式:
10、 = STORE TO 功能注释: (1)等号一次只能给一个内存变量赋值。STORE可以同时给若干个变量赋予相同的值,各内存变量名之间必须用逗号分开。 (2)在Visual FoxPro中,一个变量在使用之前并不需要特别的声明或定义。当用STORE给变量赋值时,如果该变量并不存在,那么系统会自动建立它。 (3)可以通过对内存变量重新赋值来改变其内容和类型。,返回,数组,数组是内存中连续的一片存储区域,它由一系列元素组成,每个数组元素可通过数组名及相应的下标来访问。每个数组元素相当于一个简单变量。可以给各元素分别赋值。在Visual FoxPro中,一个数组中各元素的数据类型可以不同。 与简单内
11、存变量不同,数组在使用之前一般要用DIMENSION或DECLARE命令显式创建,规定数组是一维数组还是二维数组,数组名和数组大小。数组大小由下标值的上、下限决定,下限规定为1。 创建数组的命令格式为: DIMENSION (,) , DECLARE (,) , 这两种格式的功能完全相同。数组创建后,系统自动给每个数组元素赋以逻辑假.F.。 在使用数组元素时,就注意如下问题: (1)在一切使用简单内存变量的地方,均可使用数组元素; (2)在赋值和输入语句中使用数组名时,表示将同一个值同时赋给该数组的全部数组元素; (3)在同一个运行环境下,数组名不能与简单变量名重复; (4)在赋值语句中的表达
12、式位置不能出现数组名; (5)可以用一维数组的形式访问二维数组。,返回,313 内存变量常用命令,1、内存变量的赋值 2、表达式值的显示 3、内存变量的显示 4、内存变量的清除 5、表中的数据与数组数据之间的变换,返回,内存变量的赋值,格式1:STORE TO 格式2:= 功能:计算表达式并将表达式值赋值给一个或多个内存变量。,返回,表达式值的显示,格式1:? 格式2:? 功能:计算表达式表中的各表达式并输出各表达式值。 不管有没有指定表达式表,格式1都会输出一个回车换行符。如果指定了表达式表,各表达式值将在下一行的起始处输出。 格式2不会输出一个回车换行符,各表达式值在当前行的光标所在处直接
13、输出。,返回,内存变量的显示,格式1:LIST MEMORY LIKE TO PRINT|TO FILE 格式2:DISPL MEMORY LIKE TO PRINT|TO FILE 功能:显示内存变量的当前信息,包括变量名、作用域、类型、取值。 选用LIKE短语只显示与通配符相匹配的内存变量。通配符包括*和?。 可选子句TO PRINT或TO FILE 用于显示的同时送往打印机,或者存入给定文件名的文本文件中,文件的扩展名为.txt。 LIST MEMORY一次显示与通配符匹配的所有内存变量,如果内存变量多,一屏显示不下,则自动向上滚动。DISPLAY MEMORY分屏显示与通配符匹配的所有
14、内存变量,如果内存变量多,显示一屏后暂停,按任意键之后再继续显示下一屏。,返回,内存变量的清除,格式1:CLEAR MEMORY 格式2:RELEASE 格式3:RELEASE ALL EXTENDED 格式4:RELEASE ALL LIKE |EXCEPT 功能:格式1清除所有内存变量。格式2清除指定的内存变量。 格式3清除所有的内存变量。在人机会话状态其作用与格式1相同。如果出现在程序中,则应该加上短语ENTENDED,否则不能删除公共内存变量。 格式4选用LIKE短语清除与通配符相匹配的内存变量,选用EXCEPT短语清除与通配符不相匹配的内存变量。,返回,表中的数据与数组数据之间的变换
15、,表文件的数据内容是以记录的方式存储和使用的,而数组是把一批数据组织在一起的数据处理方法,为了使它们之间方便地进行数据交换,以利于程序的使用,Visual FoxPro提供了相互之间数据传递的功能,可方便地完成表记录与内存变量之间的数据交换。 (1)将表的当前记录复制到数组 (2)将数组数据复制到表的当前记录,返回,将表的当前记录复制到数组,格式1:SCATTER FIELDS MEMO TO BLANK 格式2:SCATTER FIELDS LIKE |FIELDS EXCEPT MEMO TO BLANK 格式1的功能是将表的当前记录从指定字段表中的第一个字段内容开始,依次复制到数组名中的
16、从第一个数组元素开始的内存变量中;如果不使用LIELDS短语,则复制除备注型M和通用型G之外的全部字段。 如果事先没有创建数组,系统将自动创建;如果已创建数组元素个数少于字段数,系统将自动建立其余数组元素;如果已创建的数组元素多于字段数,其余数组元素的值保持不变。 若选用MEMO短语,则同时复制备注型字段。若选用BLANK短语,则产生一个空数组,各数组元素的类型和大小与表中当前记录的对应字段相同。 格式2的功能是用通配符指定包括或排除的字段。FIELDS LIKE 和FIELDS EXCEPT 可以同时使用。,返回,将数组数据复制到表的当前记录,格式1:GATHER FROM FIELDS M
17、EMO 格式2:GATHER FROM FIELDS LIKE |FIELDS EXCEPT MEMO 格式1的功能是将数组中的数据作为一个记录复制到表的当前记录中。从第一个数组元素开始,依次向字段名表指定的字段填写数据。如果缺省FIELDS选项,则依次向各个字段复制,如果数组元素个数多于记录中字段的个数,则多余部分被忽略。若选用MEMO短语,则在复制时包括备注型字段;不则备注型字段不予考虑。 格式2的功能是用通配符指定包括或排除的字段。FIELDS LIKE 和FIELDS EXCEPT 可以同时使用。,返回,32 表达式,表达式是由常量、变量和函数通过特定的运算符连接起来的式子。在用Vis
18、ual FoxPro编写的程序里,表达式几乎无所不在。前面介绍的大多数命令中都包含表达式语法成分,表达式使这些命令的功能更加灵活、强大。表达式的形式包括: 单一的运算对象(如常量、变量或函数) 由运算符将运算对象连接起来形成的式子 无论是简单的还是复杂的合法表达式,按照规定的运算规则最终均能计算出一个结果,即表达式的值。根据表达式值的类型,表达式可分为数值表达式、字符表达式、日期时间表达式和逻辑表达式。大多数逻辑表达式是带比较运算符的关系表达式。 321 数值、字符与日期时间表达式 322 关系表达式 323 逻辑表达式,返回,321 数值、字符与日期时间表达式,1、数值表达式 2、字符表达式
19、 3、日期时间表达式,返回,数值表达式,数值表达式由算术运算符将数值型数据连接起来形成,其运算结果仍然是数值型数据。数值型数据可以是数值常量或者变量。 (1)算术运算优先级 (2)求余运算,返回,算术运算优先级,数值表达式中的算术运算符有些与日常使用的运算符稍有区别。 算术运算符及其优先级,返回,求余运算,求余运算%和取余函数MOD()的作用相同。余数的正负号与除数一致。当表达式中出现乘*、除/和求余运算%时,它们具有相同的优先级。,返回,字符表达式,字符表达式由字符串运算符将字符型数据连接起来形成,其运算结果仍然是字符型数据。字符串运算符有两个,它们的优先级相同: +:前后两个字符串首尾连接
20、形成一个新的字符串。 -:连接前后两个字符串,并将前字符串的尾部空格移到合并后的新字符串尾部。,返回,日期时间表达式,日期时间表达式中可以使用的运算符也有+和-两个。 日期时间表达式的格式有一定限制,不能任意组合。合法的日期时间表达式格式如下: 日期时间表达式的格式,返回,322 关系表达式,1、关系表达式 2、设置字符的排序次序 3、字符串精确比较与EXACT设置,返回,关系表达式,关系表达式通常也称为简单逻辑表达式,它由关系运算符将两个运算对象连接起来形成,即:。 关系运算符的作用是比较两个表达式的大小或前后。其运算结果是逻辑型数据。 关系运算符 运算符=和$仅适合于字符型数据。其他运算符
21、适用于任何类型的数据,但前后两个运算对象的数据类型要一致。 (1)数值型和货币型数据比较 按数值的大小比较。 (2)日期和日期时间型数据比较 越早的日期或时间越小,越晚的日期或时间越大。 (3)逻辑型数据比较 .T.大于.F. (4)子串包含测试 关系表达式$为子串包含测试,如果前者是后者的一个子字符串,结果为.T.,否则为.F.。,返回,关系运算符,返回,设置字符的排序次序,当比较两个字符串时,系统对两个字符串的字符自左向右逐个进行比较,一旦发现两个对应字符不同,就根据这两个字符的排序序列决定两个字符串的大小。对字符序列的排序设置有人面会话和命令两种方式。 (1)在人机会话方式下设置 在“工
22、具”菜单下选择“选项”,打开“选项”对话框; 单击“数据”选项卡; 从右上方的“排序序列”下拉框中选择“Machine(机器)”、“PinYin(拼音)”、“Stroke(笔画)”; 单击“选项”对话框上的“确定”按钮。 (2)命令方式设置 设置字符比较次序的命令是:SET COLLATE TO “” 排序次序名必须放在引号当中。次序名可以是“Machine”、“PinYin”、“Stroke)”。,返回,字符串精确比较与EXACT设置,在用双等号运算符=比较两个字符串时,只有当两个字符串完全相同(包括空格以及各字符的位置)时,运算结果才为.T.,否则为.F.。 在单等号运算符=比较两个字符串
23、时,运算结果与SET EXACT ON|OFF设置有关,该命令是设置精确匹配与否的开关。该命令可以在命令窗口或在程序执行,也可以通过“数据”选项卡设置。 (1)系统默认OFF状态。当处于OFF状态时,只要右边的字符串与左边字符串的前面部分相匹配,即得到.T.的结果。也就是说,字符串的比较以右面的字符串为目标,右字符串结束即终止比较。 (2)当处于ON状态时,比较到两个字符串全部结束。,返回,323 逻辑表达式,1、逻辑表达式 逻辑表达式由逻辑运算符将逻辑型数据连接起来而形成,其运算结果仍然是逻辑型数据。逻辑运算符有三个:.NOT.或!(逻辑非)、.AND.(逻辑与)以及.R.(逻辑或)。可省略
24、两端的点,定成NOT、AND、OR。其优先顺序依次为NOT、AND、OR。 2、运算优先级 在同一个表达式中出现不同运算时,其优先顺序为:先执行算术运算、字符串运算和日期时间运算符,其次执行关系运算符,最后执行逻辑运算符。 圆括号作为运算符,可以改变其他运算符的运算次序。圆括号中的内容作为整个表达式的子表达式,在与其他运算对象进行各类运算前,其结果首先要被计算出来。圆括号的优先级最高,圆括号可以嵌套。,返回,33 常用函数,函数是用程序来实现的一种数据运算或转换。每一个函数都有特定的数据运算或转换功能。它往往需要若干个自变量,即运算对象,但只能有一个运算结果,称为函数值或返回值。函数用函数名加
25、一对圆括号加以调用,自变量放在圆括号内。 函数调用可出现在表达式里,表达式将函数的返回值作为自己运算的对象。函数也可作为一条命令使用,但此时系统忽略函数的返回值。 331 数值函数 332 字符函数 333 日期和时间函数 334 数据类型转换函数 335 测试函数,返回,331 数值函数,1、绝对值和符号函数 2、求平方根函数 3、圆周率函数 4、求整数函数 5、四舍五入函数 6、求余数函数 7、求最大值和最小值,返回,绝对值和符号函数,格式:ABS()SIGN() 功能:ABS()返回指定的数值表达式的绝对值。SIGN()返回指定数值表达式的符号。当表达式的运算结果为正、负和零时,函数值分
26、别为1、-1、和0。,返回,求平方根函数,格式:SQRT() 功能:返回指定表达式的平方根。自变量表达式的值不能为负。,返回,圆周率函数,格式:PI() 功能:返回圆同率(数值型)。该函数没有自变量。,返回,求整数函数,格式:INT()CEILING()FLOOR() 功能:INT()返回指定数值表达式的整数部分。CEILING()返回大于或等于指定数值表达式的最小整数。FLOOR()返回小于或等于指定数值表达式的最大整数。,返回,四舍五入函数,格式:ROUND(,),返回,求余数函数,格式:MOD(,) 功能:返回两个数相除后的余数。,返回,求最大值和最小值,格式:MAX(,)MIN(,)
27、功能:MAX()计算各自变量表达式的值,并返回其中的最大值。 MIN()计算各自变量表达式的值,并返回其中的最小值。 自变量表达式的类型可以是数值型、字符型、货币型、双精度型、浮点型、日期型和日期时间型,但所有表达的类型必须相同。,返回,332 字符函数,1、求字符串长度函数 2、大小写转换函数 3、空格字符串生成函数 4、删除前后空格函数 5、取子串函数 6、计算子串出现次数函数 7、求子串位置函数 8、子串替换函数 9、字符替换函数 10、字符串匹配函数,返回,求字符串长度函数,格式:LEN() 功能:返回指定字符表达式值的长度,即所包含字符个数。函数值为数值型。,返回,大小写转换函数,格
28、式:LOWER()UPPER() 功能:LOWER()将表达式值中的大写字母转换成小写字母,其他字符不变。 UPPER()将表达式值中的大写字母转换成小写字母,其他字符不变。,返回,空格字符串生成函数,格式:SPACE(),返回,删除前后空格函数,格式:TRIM()LTRIM()ALLTRIM(),返回,取子串函数,格式:LEFT(,)RIGHT(,)SUBSTR(,),返回,计算子串出现次数函数,格式:OCCURS(,),返回,求子串位置函数,格式:AT(,)ATC(,),返回,子串替换函数,格式:STUFF(,),返回,字符替换函数,格式:CHRTRAN(,),返回,字符串匹配函数,格式:
29、LIKE(,),返回,333 日期和时间函数,1、系统日期和时间函数 2、求年份、月份和天数函数 3、时、分和秒函数,返回,系统日期和时间函数,格式:DATE()TIME()DATETIME(),返回,求年份、月份和天数函数,格式:YEAR(|)MONTH(|)DAY(|),返回,时、分和秒函数,格式:HOUR()MINUTE()SEC(),返回,334 数据类型转换函数,1、数据转换成字符串 2、字符串转换成数值 3、字符串转换成日期或日期时间 4、日期或日期时间转换成字符串 5、宏替换函数,返回,数据转换成字符串,格式:STR(,),返回,字符串转换成数值,格式:VAL(),返回,字符串转
30、换成日期或日期时间,格式:CTOD()CTOT(),返回,日期或日期时间转换成字符串,格式:DTOC(|,1)TTOC(,1),返回,宏替换函数,格式:&.,返回,335 测试函数,1、值域测试函数 2、空值(NULL值)测试函数 3、“空”值测试函数 4、数据类型测试函数 5、表文件尾测试函数 6、表文件首测试函数 7、记录号测试函数 8、记录个数测试函数 9、条件测试函数 10、记录删除测试函数,返回,值域测试函数,格式:BETWEEN(,),返回,空值(NULL值)测试函数,格式:ISNULL(),返回,“空”值测试函数,格式:EMPTY(),返回,数据类型测试函数,格式:VARTYPE(,),返回,表文件尾测试函数,格式:EOF(|),返回,表文件首测试函数,格式:BOF(|),返回,记录号测试函数,格式:RECNO(|),返回,记录个数测试函数,格式:RECCOUNT(|),返回,条件测试函数,格式:IIF(,),返回,记录删除测试函数,格式:DELETED(|),返回,