第4讲常量、变量、表达式和函数4.1常量4.1.1数值型常量数值型常量也就是常数,是由数字0~9、小数点和正负号构成 的数字序列。例如:123,123.45,-123.45等。4.1.2字符型常量字符型常量又称字符串,是由英文状态 的单引号、双引号和方括号括起来的字符序列,这里的单引号、双引号和方括号又称定界符。例如:“VisualFoxPro”, ′VF系统开发′,[计算机]等。4.1.3日期型常量日期型常量是使用花括号括起来的日期型数据序列,花括号内包含年、月、日 三部分内容,各部分之间用分割符分割,(/)(—)和(.)。在VisualFoxPro中日期型常量具有以下两种表示格式:( 1)??传统的日期格式:{MM/DD/YY}或{MM/DD/YYYY}其中,MM、DD、YY分别表示月、日、年。例如: {04/28/05}或{04/28/2005}(2)??严格的日期格式:{^YYYY-MM-DD}格 式中的符号“∧”表明该日期格式是严格的,并按照YMD的格式来解释日期。如{^2005-0 4-28}注意:l VisualFoxPro默认日期格式为严格的日期格式,若要使用传统的日期格式须先执行命令SET STRICTDATETO0l 传统的日期格式中年月日的默认顺序为MDY,若要改变可使用命令SETDATE TOYMD/MDY/DMY传统的日期格式中分割符的默认值为斜杠(/),要改变可使用如下命令: 格式:SETMARKTO [日期分割符] 功能:用于设置日期分隔符,如“-”、“.”等。l 传统的日期格式中年份的默认值为2位,若要显示世纪值即4位数 的年份值,可使用如下命令: 格式:SETCENTURYON/OFF 功能:用语设置显示日期型数据是否显示世纪,ON表示年 份用4位,OFF则只显示2位。【例4.1】在命令窗口输入如下命令,查看各种日期数据的输出结果。解:SETSTRICTDAT ETO0SETCENTURYOFF?{04/28/05}&&?号用来显示表达 式的值主屏幕显示04/28/05接着再输入命令SETCENTURYON ?{04/28/05}主屏幕显示04/28/2005接着再输入命令 SETSTRICTDATETO1?{04/28/05}主屏幕提示出错信息如图4-1所示。4.1.4日 期时间型常量日期时间型常量是用花括号括起来的日期时间型数据序列,括号内主要包括日期和时间两部分内容:{<日期>,<时间>}, 其中,日期部分的表示格式与日期型常量相同,时间部分的表示格式为:[HH[:MM[:SS]]][A|P]这里的HH、MM、SS分 别表示时、分和秒,A(或AM)和P(或PM)分别表示上午和下午。【例4.2】在主窗口显示日期时间型常量的内容。解:在命令窗口 输入命令:?{^2005-04-28,11:25:30A}主屏幕显示:04/28/0511:25:30AM4.1. 5逻辑型常量逻辑型常量只有2个值:“真”与“假”,用.T.或.t.,.Y.或.y.表示“真”,用.F.或.f.,.N.或 .n.表示“假”。注意:逻辑型常量前后两边的小圆点作为逻辑型常量的定界符不能省略。4.2变量变量:在程序运行 过程中可以变化的量,即变量的值是可以随时更改的。在VisualFoxPro中的变量可以分为字段变量和内存变量两大类。4.2.1 字段变量字段变量:数据表中已定义的任意一个字段,由于在一个数据表中,字段的值是随着记录行的变化而变化的,所以称它为变量。使 用字段变量首先要建立数据表,在建立表的过程中创建字段变量。4.2.2内存变量内存变量:内存中的一个存储单元,该单元的名称 称为内存变量名,该单元内存放的数据,称为内存变量的值,而内存变量的类型取决于内存变量值的类型,它可以是数值型、字符型、逻辑型、日期 型和日期时间型。1.内存变量的命名为区分不同的存储单元,对不同的存储单元就应该具有不同的名称,即每个内存变量都应该有自己的 名称。在VisualFoxPro中内存变量名可以由字母(也可以是汉字)、数字和下划线组成,其长度不超过128个字符,必须以 字母或下划线开头。2.内存变量的赋值命令格式1:<内存变量名>=<表达式>格式2:STORE<表达式>TO<内存变量名 表>功能:计算表达式,并将计算结果赋值给内存变量。【例4.3】定义内存变量并将其赋值。解:在命令窗口输入以下命令:Y=50 0STORE"张三"TOXMSTORE8TOM,N注意:格式2可以同时为多个变量赋相同的值,格式1只能为单个 变量赋值。例如:STORE8TOM,N就不能改写为M,N=8。3.表达式值的显示命令格式1:?<表达式表>格式 2:??<表达式表>功能:计算表达式,并将计算结果在主屏幕中显示。区别:格式1自动产生换行符,表示要换行显示结果,而格式 2不会产生换行符,表示要在当前行光标所在位置起显示结果。注意:系统规定,如果内存变量与打开的当前数据表文件中的字段同名,在显 示时字段变量优先于内存变量,此时若要显示内存变量的内容,必须在内存变量名前加写"M→"或"M."以示区别。【例4.4】内存变量和 字段变量访问示例解:假定学生表(XSB)已打开,且字段XM的当前值为“汪远东”,在命令窗口输入命令:USEXSB STORE"张三"TOXM?XM系统主屏幕显示汪远东?M.XM 系统主屏幕显示张三4.内存变量的显示命令格式1:LISTMEMORY格式2:DISPLAYMEMORY功能 :显示内存变量的当前信息,包括变量名、作用范围、类型和值。区别:LIST不分屏显示,DISPLAY分屏显示。5.内存变量的清除 命令内存变量的清除:清除内存存储单元中存放的内容,并收回该内存变量所占用的内存空间。它有以下几种命令格式。格式1:C LEARMEMORY格式2:RELEASE<内存变量名表>格式3:RELEASEALL[LIKE< 通配符>]功能:清除内存变量。区别:格式1清除所有的内存变量,格式2清除指定的内存变量,格式3清除与通配符相匹配的内 存变量。【例4.5】清除所有以A开头的内存变量解:在命令窗口输入命令RELEASEALLLIKEA6. 宏替换命令格式:&<字符型内存变量>[.]功能:用字符型内存变量中存放的内容取代"&"号及其后面的变量名,[.]中的圆 点用作结束的标识。【例4.6】设L=8,M=5,N="L+M",求表达式5+&N的值。解:?5+&N 主屏幕显示结果为:184.2.3数组1.概念数组是按一定顺序排列的一组内存变量,在内存中用一片连续的区域来存放, 数组用统一的名称来表示,称为数组名,数组中的每一个内存变量都称为数组的元素,数组元素用数组名及它在数组中的排列标号(简称下标)来表 示。例如:A(1)、A(2)、A(3)、A(4)其中,A表示数组名,1、2、3、4为下标。根据下标的个数又可以把数组分 为一维数组和二维数组,例如,A(3)表示一维数组、A(3,4)表示二维数组。2.数组的定义与内存变量不同,数组在使用之前必 须先定义后使用,具体定义格式如下:格式1:DIMENSION<数组名>(<下标1>[,<下标2>])格式2:DECL ARE<数组名>(<下标1>[,<下标2>])注意:数组元素的下标从1开始,每个数组元素的默认值为逻辑假。3.数组 的赋值数组的赋值和内存变量赋值方法相同,例如:A(1)="张三",当省略下标时表示将一个值赋值给数组的所有元素,例如:A= 15。在VisualFoxPro系统中,数组经常用于和表交换数据,使用方法在以后有关内容中介绍。4.3表达式表达 式:用括号和运算符把常量、变量以及函数连接而成的式子,表达式具有计算、判断和数据类型转换等作用。4.3.1运算符运算 符是对数据进行各种操作的一种符号,又称操作符。在VisualFoxPro中运算符分为4类,即:算术运算符、字符运算符、关系运算符 和逻辑运算符。1.算术运算符算术运算符是对数值型数据进行操作的一种符号,在VisualFoxPro中的算术运算符如表4—1 所示。(),、^,、/、%,+、-【例4.7】假定变量X的值为5,计算表达式3+4X+53的值。解:?3+4X+ 5^3主屏幕显示结果为:148.00注意:表达式中4和X之间的乘号不能省略。作为一种特例,加法和减法运算 符也可以用于日期型和日期时间型数据的操作,其操作规则如下:l??日期型数据+数值(天数)&&结果为日期型数据加上数值后的一个 新日期l??日期型数据-数值(天数)&&结果为日期型数据减去数值后的一个新日期l??日期型数据1-日期型数据2&&结 果为两个日期间相差的天数l日期时间型数据+数值(秒数)&&结果为日期时间型数据加上数值后的一个新日期时间l???日期时间型 数据-数值(秒数)&&结果为日期型数据减去数值后的一个新日期l???日期时间型数据1-日期时间型数据2&&结果为两个日 期时间相差的秒数l????两个日期型或日期时间型数据不能相加【例4.8】日期型数据操作举例。解:?{^2005-04-1 8}+10主屏幕显示结果为:04/28/05?{^2005-04-18}-10主屏幕显示结果为:04 /08/05?{^2005-04-28}-{^2005-04-18}主屏幕显示结果为:10?{^2005-04- 28}+{^2005-04-18}主屏幕显示“操作符/操作数类型不匹配”的错误信息。2.字符运算符字符运算符是对字符串进 行连接操作的一种符号,在VisualFoxPro中的字符运算符如表4-2所示。+:将加号前后的字符串连接起来组成一个新的 字符串。-:先将减号前字符串尾部的空格移至减号后字符串的尾部,然后再将两个字符串连接组成一个新的字符串。【例4.9】在 命令窗口分别输入M="FOX"和N="PRO",求M+N和M-N的值。解:在命令窗口输入?M+N主屏幕显示为: FOXPRO接着再输入:?M-N主屏幕显示为:FOXPRO3.关系运算符关系运算符是 对两个数据进行比较操作的一种符号,关系运算的结果一定是逻辑值,在VisualFoxPro中的关系运算符如表4-3所示。<小 于、<=小于等于、>大于、>=大于等于、=等于、<>或#或!#不等于、==字符串精确比较、$字符串包含测试。两个数据的比较规 则:(1)?两个数值型数据比较时,按值的大小直接比较。【例4.10】在命令窗口分别输入A=5和B=8,分别求表达式A>B,A= B,A=A+1的值。解:在命令窗口输入:?A>B,A=B,A=A+1主屏幕显示结果都为逻辑假.F.(2)?两个日期型 数据比较时,按年、月、日顺序比较。例如:?{^2005-04-28}>{^2005-04-09}显示结果为逻辑假.T. (3)?两个字符型数据比较时,英文字符按ASCII码值的大小比较,汉字按机内码值比较,即对常用的一级汉字而言,根据它们的拼音顺序决 定大小。注意:①字符比较具有方向性。②字符串比较可以有非精确比较(使用比较符“=”)和精确比较(使用比较符“== ”)两种形式,若要使比较符“=”也进行精确比较,必须使用命令SETEXACTON/OFF进行设置。【例4.11】在命令窗口进 行如下关系运算的操作,试给出操作结果。解:?"ABC">"ACD"主屏幕显示结果为:.F.?" 张三">"李四"主屏幕显示结果为:.T.?"ABC"="AB"主屏幕显示结果为:. T.?"AB"="ABC"主屏幕显示结果为:.F.?"AB"$"XABY"主屏 幕显示结果为:.T.?"XABY"$"AB"主屏幕显示结果为:.F.【例4.12】字符串精 确比较示例。解:在命令窗口输入以下命令SETEXACTOFF?"ABC"="AB"主 屏幕显示结果为:.T.在命令窗口输入以下命令SETEXACTON?"ABC"= "AB"主屏幕显示结果为:.F.?4.逻辑运算符逻辑运算符是对逻辑型数据进行操作的一种符号,其 运算结果仍为逻辑值,在VisualFoxPro中的逻辑运算符如表4-5所示。NOT.或!—逻辑非;.AND.—逻辑与; .OR.—逻辑或高←——————————————————→低?逻辑运算规则的定义:l??.NOT.A 当A为真时结果为假,反之结果为真。l??A.AND.B当A和B都为真时结果为真,否则结果为假。l??A.OR.B 当A和B当中有一个为真时结果就为真,只有A和B都为假时结果才为假。4.3.2表达式的值及表达式的类型表达式经 过运算后,总能得到一个结果,该结果就是表达式的值,而表达式的值又可能是各种类型的数据,所以根据表达式的值可以将表达式划分为以下几种 类型,即:数值型表达式、字符型表达式、日期及日期时间型表达式和逻辑型表达式。以上各种表达式中逻辑表达式格外重要,因为在Vi sualFoxPro中很多命令中都有<条件>,这里的<条件>就是逻辑表达式。【例4.14】查询在1981年7月1日之前出生、 高考分数大于560并且性别为"男"的学员,构造查询条件表达式。解:条件表达式为:CSRQ<={^1981-07-01 }.AND.GKFS>560.AND.XB="男"4.4常用函数4.4.1数值函数数值函数是指函数值为数 值的一类函数。1.绝对值函数格式:ABS(数值表达式)功能:返回数值表达式的绝对值。【例4.15】求表达式5-8的绝对值。 解:?ABS(5-8)主屏幕显示结果为:32.取整函数格式:INT(数值表达式)功能:返回指定数值表达式的 整数部分。【例4.16】求表达式5.85的整数值。解:?INT(5.85)主屏幕显示结果为:5注意:取整函数不具 有四舍五入功能。3.四舍五入函数格式:ROUND(数值表达式1,数值表达式2)功能:对数值表达式1进行四舍五入,按数值表达式 2给定的位数保留小数的位数。【例4.17】对数123.456做各种四舍五入操作。解:?ROUND(123.456,2),R OUND(123.456,1),ROUND(123.456,0)主屏幕显示结果为123.46 123.5123?ROUND(123.456,-1),ROUND(12 3.456,-2)主屏幕显示结果为:1201004.平方根函数格式 :SQRT(数值表达式)功能:返回指定数值表达式的平方根值。5.圆周率函数格式:PI()功能:返回圆周率∏的值。6.求余 数函数格式:MOD(数值表达式1,数值表达式2)功能:返回<数值表达式1>除以<数值表达式2>的余数。求余规则:余数符号与除 数的符号相同,当被除数和除数同号时,函数值为两数相除的余数,当被除数和除数异号时,函数值为两数相除的余数再加上除数的值。【例4. 18】用余数函数求两个数相除的余数。解:?MOD(5,3),MOD(-5,-3)主屏幕显示结果为: 2-2?MOD(5,-3),MOD(-5,3)主屏幕显示结果为: -117.求最大值和最小值函数格式:MAX(表达式表)功能:MAX返回所有表达式表值的最大值。 MIN(表达式表)功能:MIN返回所有表达式表值的最小值。注意:这里的表达式必须为同类的表达式。【例4.19】求以 下数据的最大值和最小值。2,15,3"2","15","13" "语文","数学","计算机"解:?MAX(2,5,3),MIN(2,5,3)主屏幕显示结果为 52?MAX("2","15","13"),MIN("2","15","13") 主屏幕显示结果为213?MAX("语文","数学","计算 机"),MIN("语文","数学","计算机")主屏幕显示结果为:语文计算机 4.4.2字符函数字符函数处理的对象为字符型表达式,但函数的返回值不一定是字符型数据。1.求字符串长度函数格式:LE N(字符表达式)功能:返回指定字符表达式的长度,即字符表达式所包含的字符个数。注意:一个汉字占两个字符的宽度。【例4.2 0】求字符串"IBM计算机"的长度。解:?LEN("IBM计算机")主屏幕显示结果为:92.空格函数格式:S PACE(数值表达式)功能:产生指定长度的空格字符串,长度由数值表达式的值确定。3.删除字符串前后空格的函数格式 :TRIM(字符表达式)LTRIM(字符表达式)ALLTRIM(字符表达式)功能:TRIM删除字符 串右边的空格,即字符串末尾的空格。LTRIM删除字符串左边的空格,既字符串前导的空格A LLTRIM删除字符串两端的空格。注意:以上均不能删除字符串中间的空格。【例4.21】先删除字符串“计算机”尾部空格后,再 计算它的长度。解:?LEN(TRIM(“计算机”))主屏幕显示结果为:64.取子串函数格式:LEFT(字 符表达式,长度)RIGHT(字符表达式,长度)SUBSTR(字符表达式,起始位置[,长度])功能: LEFT对字符串从左端开始取指定"长度"的子串作为函数值。RIGHT对字符串从右端开始取指定"长度"的子串作为函数值 。SUBSTR对字符串从指定的"起始位置"开始取指定"长度"的子串作为函数值,若省略"长度"则从指定的"起始位置"开 始取到最后一个字符的子串作为函数值。【例4.22】在字符串"VisualFoxPro程序设计"中分别截取子串"Visual"、 "程序设计"和"FoxPro"。解:?LEFT("VisualFoxPro程序设计",6)主屏幕显示结果为: Visual?RIGHT("VisualFoxPro程序设计",8)主屏幕显示结果 为:程序设计?SUBSTR("VisualFoxPro程序设计",8,6)主屏幕显 示结果为:FoxPro5.求子串位置函数格式:AT(字符表达式1,字符表达式2[,数值表达式])功能:求" 字符表达式1"在"字符表达式2"中的开始位置,未找到时结果为0,[,数值表达式]用于表明"字符表达式1"是第几次出现的,若省略默 认为1。【例4.23】求子串"FoxPro"在"VisualFoxPro程序设计"中的位置。解:?AT("FoxPro" ,"VisualFoxPro程序设计")主屏幕显示结果为:86.子串替换函数格式:STUFF(字符 表达式1,起始位置,长度,字符表达式2)功能:用"字符表达式2"的值替换"字符表达式1"中由"起始位置"和"长度"指明的一个子串 。【例4.24】将字符串"计算机等级考试"中的"等级"替换为"专业",并在主屏幕显示结果。解:?STUFF("计算机等级考 试",7,4,"专业")主屏幕显示结果为:计算机专业考试7.字符串复制函数格式:REPLICATE( 字符表达式,数值表达式)功能:将"字符表达式"的值复制"数值表达式"次。【例4.25】将字符串"计算机等级考试"重复显示3遍 。解:?REPLICATE("计算机等级考试",3)主屏幕显示结果为:计算机等级考试计算机等级考试 计算机等级考试8.字符串匹配函数格式:LIKE(字符表达式1,字符表达式2)功能:比较两个字符串对应位置上的字符,如果所有对 应字符都匹配,则函数返回"真",否则返回"假"。字符表达式1中可以包含通配符和?,号可与任意数目的字符相匹配,?可以与任何 单个字符相匹配。【例4.26】字符串匹配函数使用举例。解:?LIKE("程序设计","VisualFoxPrO程序设 计")主屏幕显示结果为:.T.?LIKE("?程序设计","VisualFoxPrO程序设 计")主屏幕显示结果为:.F.4.4.3日期和时间函数日期和时间函数的自变量一般是日期表达式或日 期时间表达式,但函数的返回值不一定是日期型或日期时间型。1.系统日期和时间函数格式:DATE()TIME() DATETIME()功能:DATE()返回当前系统的日期,函数值为日期型。TIME()以24小时制返回当 前系统的时间,函数值为字符型。DATETIME()返回当前系统的日期及时间,函数值为日期时间型。【例4.27】显示 系统当前的日期、时间。解:?DATE(),TIME(),DATETIME()主屏幕显示结果为:04/28/05 11:34:4504/28/0511:35:40AM2.年、月、日函数格式:YEAR(日期表达式/日期时间 表达式)MONTH(日期表达式/日期时间表达式)DAY(日期表达式/日期时间表达式)功能:YEAR函 数返回日期表达式或日期时间表达式中的年份。MONTH函数返回日期表达式或日期时间表达式中的月份。DAY 函数返回日期表达式或日期时间表达式中的月份中的天数。【例4.28】测试表达式{^2005-04-2811:35:45}中的年份 。解:?YEAR({^2005-04-2811:35:45})主屏幕显示结果为:20053 .时、分、秒函数格式:HOUR(日期时间表达式)MINUTE(日期时间表达式)SEC(日期时间表达式 )功能:HOUR函数返回日期时间表达式中的小时部分。MINUTE函数返回日期时间表达式中的分钟部分。 SEC函数返回日期时间表达式中的秒数部分。三个函数的结果都为数值型。4.4.4数据类型转换函数数据类型转换函数可以将 某一种类型的数据转换成另一种类型的数据。1.数值转换为字符函数格式:STR(数值表达式[,长度][,小数位数]) 功能:将数值表达式的值转换为字符串,转换时自动四舍五入。默认长度为10,若不指定小数位则保留到整数位,如果长度小于数值表达式值的整 数位数,则返回一串号。【例4.29】将数值型数据123.456转换为字符型数据,并显示其结果。解:?STR(123.4 56)主屏幕显示结果为:凵凵凵凵凵凵凵123?STR(123.456,7,2),STR(1 23.456,5,2),STR(123.456,2)主屏幕显示结果分别为:凵123.46123. 52.字符串转换为数值函数格式:VAL(字符表达式)功能:将字符数据转换为数值型数据。但表达式的首字 符必须为数字字符,否则转换结果为0。【例4.30】将字符数据"123"和"3.5"分别转换为数值后相加,并显示其结果。解:? VAL("123")+VAL("3.5")主屏幕显示结果为:126.503.字符型转换为日期或日期 时间函数格式:CTOD(字符表达式)CTOT(字符表达式)功能:CTOD将日期格式的字符表达式的值转 换为日期型数据。CTOT将日期时间格式的字符表达式的值转换为日期时间型数据。【例4.31】分别将字符数据"11 -28-05"和字符数据"11-28-0511:35:45"转换为日期型数据和日期时间型数据。解:?CTOD("11-28 -05"),CTOT("11-28-0511:35:45")主屏幕显示结果为:11/28/05 11/28/0511:35:45AM4.日期或日期时间型转换为字符型函数格式:DTOC(日期表达式/日期时间表达式) TTOC(日期时间表达式)功能:DTOC将日期表达式或日期时间表达式的值转换为字符型数据。TTO C将日期时间表达式的值转换为字符型数据。5.大小写字母转换函数格式:LOWER(字符表达式)UPPER(字 符表达式)功能:LOWER将字符表达式中的大写字母转换为小写,其他字母不变。UPPER将字符表达式中的小写字 母转换为大写,其他字母不变。4.4.5测试函数1.值域测试函数格式:BETWEEN(表达式1,表达式2,表达式3) 功能:判断表达式1的值是否介于表达式2和表达式3的值之间。注意:测试的区间为闭区间。2.空(NULL)值测试函数格式:ISNULL(表达式)功能:判断一个表达式的值是否为NULL,若是函数返回值为.T.,否则为.F.。3.“空”值测试函数格式:EMPTY(表达式)功能:判断一个表达式的值是否为“空”值,若是函数返回值为.T.,否则为.F.。说明:表达式的类型可以是数值型、字符型、逻辑型和日期型等,不同类型表达式的空值见表4-8所示。?【例4.32】空值与“空”值测试举例。解:X=NULLY=0?IFNULL(X),IFNULL(Y),EMPTY(X),EMPTY(Y)主屏幕显示结果为:.T..F..F..T.4.数据类型测试函数格式:VARTYPE(表达式)功能:测试表达式的类型,函数返回的结果是一个字符,各字符的含义如表4-9所示。?5.条件测试函数格式:IIF(逻辑表达式,表达式1,表达式2)功能:若逻辑表达式的值为真,则函数返回表达式1的值,否则函数返回表达式2的值。【例4.33】判断逻辑表达式180>150的真假,当为真时显示"YES",否则显示"NO"。解:?IIF(180>150,"YES","NO")主屏幕显示结果为:YES课后复习、作业及上机安排(1)阅读教材第4讲。(2)完成本讲的习题。(3)预习准备上机实验2:要求把实验内容中的空白部分事先填写相应的操作命令。上一页下一页返回4.2变量4.1 常量4.3表达式4.4常用函数图4-1错误提示信息上一页下一页 |
|