《常量变量表达式和函数.ppt》由会员分享,可在线阅读,更多相关《常量变量表达式和函数.ppt(37页珍藏版)》请在三一办公上搜索。
1、1,第三章 数据与数据运算,第二节 常量与变量,第一节数据类型,第三节 运算符与表达式,第四节 函数,2,第一节 数据类型,(1)字符型:简称C型,是默认的数据类型。一个字符型字段最长为255个字符。用户可按需要确定宽度。(2)货币型:简称Y型。货币单位,如价格。宽度为8,自动取4位小数。(3)数值型:简称N型。整数或小数,如考试分数。需要用户确定其宽度。最多可以有20位数字(包括小数点)。(4)日期型:简称D型。表示年月日,如出生日期等,标准宽度为8个字节长度。(5)日期时间型:简称T型。表示年月日和时分秒,标准宽度为8个字节长度。(6)逻辑型:简称L型。只有两个值,真(.T.)或假(.F.
2、),标准宽度为1个字节。(7)备注型:简称M型。存放不定长文本,如个人简历等。标准宽度度为4个字节。(8)通用型:简称G型。用来存放OLE对象数据,如图片、照片等,标准宽度为4个字节。,3,一、常量1、数值型常量数值型常量也就是常数,是由数字09、小数点和正负号构成的数字序列。例如:123,123.45,-123.45等。2、字符型常量字符型常量又称字符串,是由英文状态的单引号、双引号和方括号括起来的字符序列,这里的单引号、双引号和方括号又称定界符。例如:”Visual FoxPro”,VF系统开发,计算机,Im a student,Im a student 等。3、日期型常量日期型常量是使用
3、花括号括起来的日期型数据序列,花括号内包含年、月、日三部分内容,各部分之间用分割符分割,(/)(-)和(.)。在Visual FoxPro中日期型常量具有以下两种表示格式:(1)传统的日期格式:MM/DD/YY或MM/DD/YYYY,其中MM、DD、YY分别表示月、日、年。例如:04/28/05或04/28/2005(2)严格的日期格式:YYYY-MM-DD格式中的符号“”表明该日期格式是严格的,并按照YMD的格式来解释日期如2005-04-28,第二节 常量与变量,返 回,4,注意:lVisual FoxPro默认日期格式为严格的日期格式,若要使用传统的日期格式须先执行命令SET STRIC
4、TDATE TO 0传统的日期格式中年月日的默认顺序为MDY,若要改变可使用命令 SET DATE TO YMD/MDY/DMY传统的日期格式中分割符的默认值为斜杠(/),若要改变可使用如下命令:格式:SET MARK TO 日期分割符 功能:用于设置日期分隔符,如“-”、“.”等。格式中分隔符要用单引号或双引号定界。l传统的日期格式中年份的默认值为2位,若要显示世纪值即4位数的年份值,可使用如下命令:格式:SET CENTURY ON/OFF功能:用于设置显示日期型数据是否显示世纪,ON表示年份用4位,OFF则只显示2位。,返 回,5,【例3.1】在命令窗口输入如下命令,查看各种日期数据的输
5、出结果。解:SET STRICTDATE TO 0 SET CENTURY OFF?04/28/05&?号用来显示表达式的值 主屏幕显示 04/28/05 接着再输入命令 SET CENTURY ON?04/28/05 主屏幕显示 04/28/2005 接着再输入命令 SET STRICTDATE TO 1?04/28/05 主屏幕提示出错信息如图4-1所示。?2005-04-28主屏屏显示:04/28/2005,图 4-1 错误提示信息,返 回,6,(4)日期时间型常量日期时间型常量是用花括号括起来的日期时间型数据序列,括号内主要包括日期和时间两部分内容:,其中日期部分的表示格式与日期型常量
6、相同,时间部分的表示格式为:HH:MM:SS A|P 这里的HH、MM、SS分别表示时、分和秒,A(或AM)和P(或PM)分别表示上午和下午。【例3.2】在主窗口显示日期时间型常量的内容。解:在命令窗口输入命令:?2005-04-28,11:25:30 A主屏幕显示:04/28/05 11:25:30 AM(5)逻辑型常量逻辑型常量只有两个值:“真”与“假”,用.T.或.t.,.Y.或.y.表示“真”,用.F.或.f.,.N.或.n.表示“假”。注意:逻辑型常量前后两边的小圆点作为逻辑型常量的定界符不能省略。,返 回,7,二、变量,变量是指在程序运行过程中可以变化的量,即变量的值是可以随时更改
7、的。在Visual FoxPro中的变量可以分为字段变量和内存变量两大类。1、字段变量字段变量是指数据表中已定义的任意一个字段,个数据由于在一表中,字段的值是随着记录行的变化而变化的,所以称它为变量。使用字段变量首先要建立数据表,在建立表的过程中创建字段变量。2、内存变量内存变量是指内存中的一个存储单元,该单元的名称称为内存变量名,该单元内存放的数据,称为内存变量的值,而内存变量的类型取决于内存变量值的类型,它可以是数值型、字符型、逻辑型、日期型和日期时间型。(1)内存变量的命名为区分不同的存储单元,对不同的存储单元就应该具有不同的名称,即每个内存变量都应该有自己的名称。在Visual Fox
8、Pro中内存变量名可以由字母(也可以是汉字)、数字和下划线组成,其长度不超过128个字符,且须以字母或下划线开头,不可与保留字同名。,返 回,8,(2)内存变量的赋值命令格式1:=格式2:STORE TO 功能:计算表达式,并将计算结果赋值给内存变量。【例3.3】定义内存变量并将其赋值。解:在命令窗口输入以下命令:Y=VFPSTORE“李平”TO XMSTORE 2 TO n1,n2,n3注意:格式2可以同时为多个变量赋相同的值,格式1只能为单个变量赋值。(3)表达式值的显示命令格式1:?格式2:?功能:计算表达式,并将计算结果在主屏幕中显示。区别:格式1自动产生换行符,表示要换行显示结果,而
9、格式2不会产生换行符,表示要在当前行光标所在位置起显示结果。,返 回,9,注意:系统规定,如果内存变量与打开的当前数据表文件中的字段同名,在显示时字段变量优先于内存变量,此时若要显示内存变量的内容,必须在内存变量名前加写“M-”或“M.”以示区别。(4)内存变量的显示命令格式:LIST|DISPLAY MEMORY LIKE功能:显示内存变量的当前信息,包括变量名、作用范围、类型和值。说明:LIST不分屏显示,DISPLAY分屏显示。通配符中*表示一个或多个字符,“?”表示单个字符。【例3.4】分屏显示所有内存变量。DISPLAY MEMORY,返 回,10,(5)内存变量的清除命令所谓内存变
10、量的清除,是指清除内存存储单元中存放的内容,并收回该内存变量所占用的内存空间。它有以下几种命令格式。格式1:CLEAR MEMORY 格式2:RELEASE 格式3:RELEASE ALL LIKE 功能:清除内存变量。区别:格式1清除所有的内存变量,格式2清除指定的内存变量,格式3清除与通配符相匹配的内存变量。【例3.5】清除所有以n开头的内存变量 解:在命令窗口输入命令 RELEASE ALL LIKE n*(6)宏替换命令格式:&.功能:用字符型内存变量中存放的内容取代&号及其后面的变量名,.中的圆点用作结束的标识。【例3.6】设L=8,M=5,N=L+M,求表达式5+&N的值。解:?5
11、+&N 主屏幕显示结果为:18,返 回,11,(7)数组 数组是按一定顺序排列的一组内存变量,在内存中用一串连续的区域来存放,数组用统一的名称来表示,称为数组名,数组中的每一个内存变量都称为数组的元素,数组元素用数组名及它在数组中的排列标号(简称下标)来表示。例如:A(1)、A(2)、A(3)、A(4)其中A表示数组名,1、2、3、4为下标。根据下标的个数又可以把数组分为一维数组和二维数组,例如A(3)表示一维数组、A(3,4)表示二维数组。数组的定义 与内存变量不同,数组在使用之前必须先定义后使用,具体定义格式如下:格式1:DIMENSION(,)格式2:DECLARE(,)注意:数组元素的
12、下标从1开始,每个数组元素的默认值为逻辑假。数组的赋值数组的赋值和内存变量赋值方法相同,例如:A(1)=张三,当省略下标时表示将一个值赋值给数组的所有元素,例如:A=15。在Visual FoxPro系统中,数组经常用于和表交换数据,使用方法在以后有关内容中介绍。,返 回,12,表达式是指用括号和运算符把常量、变量以及函数连接而成的式子,表达式具有计算、判断和数据类型转换等作用。一、运算符运算符是对数据进行各种操作的一种符号,又称操作符。在Visual FoxPro中运算符分为4类,即:算术运算符、字符运算符、关系运算符和逻辑运算符。1算术运算符算术运算符是对数值型数据进行操作的一种符号,在V
13、isual FoxPro中的算术运算符如表41所示。(),*、,*、/、%,+、-【例3.7】假定变量X的值为5,计算表达式3+4X+53的值。解:?3+4*X+53 主屏幕显示结果为:148.00注意:表达式中4和X之间的乘号不能省略。,第三节 运算符与表达式,返 回,13,作为一种特例,加法和减法运算符也可以用于日期型和日期时间型数据的操作,其操作规则如下:l 日期型数据+数值(天数)&结果为日期型数据加上数值后的一个新日期l 日期型数据-数值(天数)&结果为日期型数据减去数值后的一个新日期l 日期型数据1-日期型数据2&结果为两个日期间相差的天数l 日期时间型数据+数值(秒数)&结果为日
14、期时间型数据加上数值后的一个新日期时间l 日期时间型数据-数值(秒数)&结果为日期型数据减去数值后的一个新日期时间l 日期时间型数据1-日期时间型数据2&结果为两个日期时间相差的秒数l两个日期型或日期时间型数据不能相加,返 回,14,【例3.8】日期型数据操作举例。解:?2010-10-16+20 主屏幕显示结果为:11/05/10?2010-10-16-10主屏幕显示结果为:10/06/10?2011-07-15-2010-10-16主屏幕显示结果为:272?2011-07-15+2010-10-16主屏幕显示“操作符/操作数类型不匹配”的错误信息。,返 回,15,2字符运算符字符运算符是对
15、字符串进行连接操作的一种符号,在Visual FoxPro中的字符运算符如表4-2所示。+:将加号前后的字符串连接起来组成一个新的字符串。-:先将减号前字符串尾部的空格移至减号后字符串的尾部,然后再将两个字符串连接组成一个新的字符串。【例3.9】在命令窗口分别输入A=hello 和B=everyone,求A+B和A-B的值。解:在命令窗口输入?A+B主屏幕显示为:hello everyone 接着再输入:?A-B主屏幕显示为:helloeveryone,返 回,16,3关系运算符关系运算符:大于、=大于等于、=等于、或#或!=不等于、=字符串精确比较、$字符串包含测试。两个数据的比较规则:(1
16、)两个数值型数据比较时,按值的大小直接比较。【例3.10】在命令窗口分别输入A=6和B=9,分别求表达式AB,A=B,A=A+3的值。解:在命令窗口输入:?AB,A=B,A=A+3主屏幕显示结果都为逻辑假.F.,返 回,17,(2)两个日期型数据比较时,按年、月、日顺序比较。例如:?2011-07-152010-10-16 显示结果为逻辑假.T.(3)两个字符型数据比较时,英文字符按ASCII码值的大小比较,汉字按机内码值比较,即对常用的一级汉字而言,根据它们的拼音顺序决定大小。注意:字符串比较具有方向性。字符串比较可以有非精确比较(使用比较符“=”,当右串是左串中从第一个字符开始的子串时结果
17、为真)和精确比较(使用比较符“=”,左、右两串完全相同时结果为真)两种形式,若要使比较符“=”也进行精确比较,必须使用命令SET EXACT ON进行设置。默认是set exact off.$中,当串1是串2的一个子串时结果为真,否则为假。,返 回,18,【例3.11】在命令窗口进行如下关系运算的操作,试给出操作结果。解:?ABCACD 主屏幕显示结果为:.F.?张三李四 主屏幕显示结果为:.T.?ABC=AB 主屏幕显示结果为:.F.?AB=ABC 主屏幕显示结果为:.F.?AB$XABY 主屏幕显示结果为:.T.?XABY$AB 主屏幕显示结果为:.F.,返 回,【例3.12】字符串精确比
18、较示例。解:在命令窗口输入以下命令 SET EXACT OFF?ABC=AB 主屏幕显示结果为:.T.在命令窗口输入以下命令 SET EXACT ON?ABC=AB 主屏幕显示结果为:.F.,19,4逻辑运算符逻辑运算符是对逻辑型数据进行操作的一种符号,其运算结果仍为逻辑值,在Visual FoxPro中的逻辑运算符如表4-5所示。.NOT.或!逻辑非;.AND.逻辑与;.OR.逻辑或 高 低逻辑运算规则的定义:l.NOT.A 当A为真时结果为假,反之结果为真。l A.AND.B 当A和B都为真时结果为真,否则结果为假。l A.OR.B 当A和B当中有一个为真时结果就为真,只有A和B都为假时结
19、果才为假。,返 回,20,二、运算符的优先级别,低,高,21,一、数值函数数值函数是指函数值为数值的一类函数。1绝对值函数格式:ABS(数值表达式)功能:返回数值表达式的绝对值。【例3.13】?AbS(-6)62取整函数 格式:INT(数值表达式)CEILING(数值表达式)FLOOR(数值表达式)功能:INT返回指定数值表达式的整数部分;CEILING向上取整,FLOOR向下取整【例3.14】求表达式5.85的整数值。x=5.85?INT(x),CEILING(x),FLOOR(x)主屏幕显示结果为:5 6 5,第四节 函 数,返 回,22,3四舍五入函数格式:ROUND(数值表达式1,数值
20、表达式2)功能:对数值表达式1进行四舍五入,按数值表达式2给定的位数保留小数的位数。【例3.15】对数123.456做各种四舍五入操作。解:?ROUND(123.456,2),ROUND(123.456,1),ROUND(123.456,0)主屏幕显示结果为 123.46 123.5 123?ROUND(123.456,-1),ROUND(123.456,-2),ROUND(125.456,-1)主屏幕显示结果为:120 100 1304平方根函数格式:SQRT(数值表达式)功能:返回指定数值表达式的平方根值(四舍五入保留两位小数)。?SQRT(2)1.415圆周率函数格式:PI()功能:返回
21、圆周率的值。,返 回,23,6求余数函数格式:MOD(数值表达式1,数值表达式2)功能:返回除以的余数。求余规则:余数符号与除数的符号相同,其绝对值小于除数的绝对值,且满足等式 被除数=除数商+余数【例3.16】用余数函数求两个数相除的余数。解:?MOD(10,3),MOD(10,-3)主屏幕显示结果为:1-2?MOD(-10,3),MOD(-10,-3)主屏幕显示结果为:2-17求最大值和最小值函数格式:MAX(表达式表)功能:MAX返回所有表达式表值的最大值。MIN(表达式表)功能:MIN返回所有表达式表值的最小值。注意:这里的表达式必须为同类的表达式。,返 回,24,【例3.17】求以下
22、数据的最大值和最小值。2,15,3 2,15,13 语文,数学,计算机 解:?MAX(3,27,16),MIN(3,27,17)主屏幕显示结果为 27 3?MAX(3,27,16),MIN(3,27,16)主屏幕显示结果为 3 16?MAX(王一,李明,张三),MIN(王一,李明,张三)主屏幕显示结果为:张三 李明,返 回,25,二、字符函数字符函数处理的对象通常为字符型表达式,但函数的返回值不一定是字符型数据。1求字符串长度函数格式:LEN(字符表达式)功能:返回指定字符表达式的长度,即字符表达式所包含的字符个数。注意:一个汉字占两个字符的宽度,空格也计算在内。【例3.18】求字符串长度。解
23、:?LEN(中国 CHINA 您好!)主屏幕显示结果为:162空格函数格式:SPACE(数值表达式)功能:产生指定长度的空格字符串,长度由数值表达式的值确定。,返 回,26,3删除字符串前后空格的函数 格式:TRIM(字符表达式)LTRIM(字符表达式)ALLTRIM(字符表达式)功能:TRIM删除字符串右边的空格,即字符串末尾的空格。LTRIM删除字符串左边的空格,既字符串前导的空格 ALLTRIM删除字符串两端的空格。注意:以上均不能删除字符串中间的空格。【例3.19】删除字符串前后空格示例。STORE SPACE(3)+“CHINA”+SPACE(2)TO B?LEN(B),LEN(LT
24、RIM(B),LEN(TRIM(B),LEN(ALLTRIM(B)主屏幕显示结果为:10 7 8 5,返 回,27,4取子串函数格式:LEFT(字符表达式,长度)RIGHT(字符表达式,长度)SUBSTR(字符表达式,起始位置,长度)功能:LEFT对字符串从左端开始取指定长度的子串作为函数值。RIGHT对字符串从右端开始取指定长度的子串作为函数值。SUBSTR对字符串从指定的起始位置开始取指定长度的子串作为函数值,若省略长度则从指定的起始位置开始取到最后一个字符的子串作为函数值。【例3.20】在字符串Visual FoxPro程序设计中分别截取子串Visual、程序设计和FoxPro。解:?L
25、EFT(Visual FoxPro程序设计,6)主屏幕显示结果为:Visual,返 回,28,?RIGHT(Visual FoxPro程序设计,8)主屏幕显示结果为:程序设计?SUBSTR(VisualFoxPro程序设计,7,6)主屏幕显示结果为:FoxPro5求子串位置函数格式:AT(字符表达式1,字符表达式2,数值表达式)功能:求字符表达式1在字符表达式2中的开始位置,未找到时结果为0,数值表达式用于表明字符表达式1是第几次出现的,若省略默认为1。【例3.21】求子串位置函数示例。STORE this is a book TO m 解:?AT(is,m),AT(IS,m),AT(is,m
26、,2)主屏幕显示结果为:3 0 6,返 回,29,三、日期和时间函数日期和时间函数的自变量一般是日期表达式或日期时间表达式,但函数的返回值不一定是日期型或日期时间型。1系统日期和时间函数格式:DATE()TIME()DATETIME()功能:DATE()返回当前系统的日期,函数值为日期型。TIME()以24小时制返回当前系统的时间,函数值为字符型。DATETIME()返回当前系统的日期及时间,函数值为日期时间型。【例3.24】显示系统当前的日期、时间。解:?DATE(),TIME(),DATETIME()主屏幕显示结果为:当前系统时间的日期、时间、日期时间。,返 回,30,2年、月、日函数格式
27、:YEAR(日期表达式/日期时间表达式)MONTH(日期表达式/日期时间表达式)DAY(日期表达式/日期时间表达式)功能:YEAR函数返回日期表达式或日期时间表达式中的年份。MONTH函数返回日期表达式或日期时间表达式中的月份。DAY函数返回日期表达式或日期时间表达式中的月份中的天数。【例3.25】显示系统当前的日期。解:?YEAR(DATE(),MONTH(DATE(),DAY(DATE()主屏幕显示结果为:当前系统时间的年月日。,返 回,31,3时、分、秒函数格式:HOUR(日期时间表达式)MINUTE(日期时间表达式)SEC(日期时间表达式)功能:HOUR函数返回日期时间表达式中的小时部
28、分。MINUTE函数返回日期时间表达式中的分钟部分。SEC函数返回日期时间表达式中的秒数部分。三个函数的结果都为数值型。,返 回,32,四、数据类型转换函数数据类型转换函数可以将某一种类型的数据转换成另一种类型的数据。1数值转换为字符函数格式:STR(数值表达式,长度,小数位数)功能:将数值表达式的值转换为字符串,转换时自动四舍五入。默认长度为10,若不指定小数位则保留到整数位,如果长度小于数值表达式值的整数位数,则返回一串*号。长度大于转换后的位数时,右对齐左补空格【例3.26】将数值型数据456.789转换为字符型数据,并显示其结果。解:?STR(456.789)主屏幕显示结果为:凵凵凵凵
29、凵凵凵457,返 回,33,?STR(456.789,7,2),STR(456.789,5,2),STR(456.789,2)主屏幕显示结果分别为:凵456.79 456.8*2字符串转换为数值函数格式:VAL(字符表达式)功能:将字符数据转换为数值型数据(保留两位小数)。但表达式的首字符必须为数字字符,否则转换结果为0。【例3.27】将字符数据1101和6.2分别转换为数值后相加,并显示其结果。解:?VAL(1101)+VAL(6.2)主屏幕显示结果为:1017.20,返 回,34,3字符型转换为日期或日期时间函数格式:CTOD(字符表达式)CTOT(字符表达式)功能:CTOD将日期格式的字
30、符表达式的值转换为日期型数据。CTOT将日期时间格式的字符表达式的值转换为日期时间型数据。【例3.28】分别将字符数据11-28-05和字符数据11-28-05 11:35:45转换为日期型数据和日期时间型数据。解:?CTOD(11-28-05),CTOT(11-28-05 11:35:45)主屏幕显示结果为:11/28/05 11/28/05 11:35:45 AM,返 回,35,4日期或日期时间型转换为字符型函数格式:DTOC(日期表达式/日期时间表达式)TTOC(日期时间表达式)功能:DTOC将日期表达式或日期时间表达式的值转换为字符型数据。TTOC将日期时间表达式的值转换为字符型数据。
31、5大小写字母转换函数格式:LOWER(字符表达式)UPPER(字符表达式)功能:LOWER将字符表达式中的大写字母转换为小写,其他字母不变。UPPER将字符表达式中的小写字母转换为大写,其他字母不变。,返 回,36,五、测试函数1数据类型测试函数格式:VARTYPE(表达式)功能:测试表达式的类型,函数返回的结果是一个字符,各字符的含义如下表所示。,返 回,37,2条件测试函数格式:IIF(逻辑表达式,表达式1,表达式2)功能:若逻辑表达式的值为真,则函数返回表达式1的值,否则函数返回表达式2的值。【例3.29】判断逻辑表达式200300的真假,当为真时显示YES,否则显示NO。解:?IIF(200300,YES,NO)主屏幕显示结果为:NO,返 回,