3.1 常量与变量考点1 常量常量用以表示一个具体的、不变的值。
不同类型常量的书写格式不同。
在Visual FoxPro 中,常量主要包括以下几种类型。
1数值型常量数值型常量即常数,用来表示一个数量的大小,由数字0~9小数点和正负号组成。
2货币型常量货币型常量用来表示货币值,其书写格式与数值型常量类似,但要加上一个前置的符号($)。
3字符型常量字符型常量也称为字符串,其表示方法是用半角单引号、双引号或方括号把字符串括起来。
这里的单引号、双引号或方括号称为定界符许多常量都有定界符。
定界符虽然不作为常量本身的内容,但它规定了常量的类型及常量的起始和终止界限。
4日期型常量日期型常量的定界符是一对花括号。
花括号内包括年、月、日3部分内容,各部分内容之间用分隔符分隔。
5日期时间型常量日期时间型常量包括日期和时间两部分内容:{<日期>,<时间>}。
<日期>部分与日期型常量相似,也有传统的和严格的两种格式。
6逻辑型常量逻辑型数据只有逻辑真和逻辑假两个值。
前后两个句点作为逻辑型常量的定界符是必不可少的,否则会被误认为变量名。
逻辑型数据只占用1字节。
考点2 变量Visual FoxPro中变量分为字段变量和内存变量二其中字段变量就是表中的字段。
内存变量是内存中的一块存储区域,变量值就是存放在这个存储区域里的数据,变量的类型取决于变量值的类型。
内存变量的数据类型包括:字符型(C)、数值型(N)、货币型(Y)、日期型(D)、日期时间型(T)和逻辑型(L)。
1简单的内存变量每一个变量都有一个名字,可以通过变量名访问变量。
如果当前表中存在一个同名的字段变量,则在访问内存变量时,必须在变量名前加上前缀M.(或M->),否则系统将访问同名的字段变量。
2数组与简单内存变量不同,数组在使用之前一般要用DIMENSION或DECLARE命令显示创建,规定数组是一维数组还是二维数组,数组名和数组大小。
数组大小由下标值的上、下限决定,下限规定为1。
在使用数组和数组元素时,应注意如下问题。
(1)在一切使用简单内存变量的地方,均可以使用数组元素。
(2)在赋值和输入语句中使用数组名时,表示将同一个值同时赋给该数组的全部数组元素。
(3)在同一个运行环境下,数组名不能与简单变量名重复。
(4)在赋值语句中的表达式位置不能出现数组名。
(5)可以用一维数组的形式访问二维数组。
考点3 内存变量常用命令1内存变量的赋值格式1:<内存变量名>=<表达式>格式2:STORE<表达式>TO<内存变量名表>2表达式值的显示格式1:?<表达式表>格式2:??<表达式表>3内存变量的显示格式1:LIST MEMORY[LIKE<通配符>][TO PRINTER!TO FILE<文件名>]格式2:DISPLAY MEMORY[LIKE<通配符>][TO PRINTER|TO FILE<文件名>]4内存变量的清除格式1:CLEAR MEMORY格式2:RELEASE<内存变量名表>格式3:RELEASE ALL[EXTENDED]格式4:RELEASE ALL[LIKE<通配符>|EXCEPT<通配符>]5表中数据与数组数据之间的交换将表的当前记录复制到数组。
格式1:SCATTER[FIELDS<字段名表>][MEMO]TO<数组名>[BLANK]格式2:SCATTER[FIELDS LIKE<通配符>|FIELDS EXCEPT<通配符>][MEMO]TO<数组名>[BLANK]将数组数据复制到表的当前记录。
格式1:GATHER FROM<数组名>[FIELDS<字段名表>][MEMO]格式2:GATHER FROM<数组名>[FIELDS LIKE<通配符>|FIELDS EXCE<通配符>][MEMO]小提示:如果当前表中存在一个同名的字段变量,则在访问内存变量时,必须在内存变量名前加上前缀M.(或M->),否则系统访问的将是同名的字段变量。
3.2 表达式考点4 数值、字符与日期时间表达式1数值表达式(1)算术运算优先级。
数值表达式中的算术运算符有些与日常使用的运算符稍有Lx=别,算术运算符及其含义和优先级如表3-1所示。
表3-1 算术运算符及其优先级(2)求余运算。
求余运算%和取余函数MOD()的作用相同。
余数的正负号与除数一致当表达式中出现*、/和%运算时,它们具有相同的优先级。
2字符表达式由字符串运算符将字符型数据连接起来形成,其结果仍是字符型数据字符型数据只能进行两种运算(+、-),它们的优先级相同。
“+”首尾连接前后两个字符串形成一个新的字符串;“-”连接前后两个字符串,并将前字符串的尾部空格移到合并后的新字符串尾部3日期时间表达式日期时间表达式中可以使用的运算符也有“+”和“-”两个,其格式也有一定的限制,不能任意组合,如不能用运算符“+”将两个<日期>连接起来。
考点5 关系表达式1关系表达式关系表达式通常也称为简单逻辑表达式,它是由关系运算符将两个运算对象连接起来而形成的,即:<表达式><关系运算符><表达式>。
关系运算符及其含义如表3-2所示,它们的优先级相同。
表3-2 关系运算符2设置字符的排序次序当比较两个字符串时,系统对两个字符串的字符自左向右逐个进行比较;一旦发现两个对应字符不同,就根据这两个字符的排序序列决定两个字符串的大小3字符串精确比较与EXACT设置在用双等号运算符==比较两个字符串时,只有当两个字符串完全相同(包括空格及各字符的位置)时,运算结果才会是逻辑真.T.,否则为逻辑假.F.。
考点6 逻辑表达式1逻辑表达式逻辑运算符的运算规则如表3-3所示,其中<IEl>和<IE2>各代表两个逻辑型常量。
表3-3 逻辑运算规则2运算符优先级.NOT.或!(逻辑非)、.AND.(逻辑与)、.OR.(逻辑或)依次降低。
小提示:表达式是指常量、变量、函数或由它们通过特定的运算符连接起来的式子。
3.3 常用函数数值函数是指函数值为数值的一类函数,它们的自变量和返回值往往都是数值型数据。
1绝对值和符号函数格式:ABS<数值表达式>)SIGN(<数值表达式>)功能:ABS()返回指定的数值表达式的绝对值。
SIGN()返回指定数值表达式的符号。
2求平方根函数格式:SQRT(<数值表达式>)功能:返回指定表达式的平方根,表达式的值不能为负。
3圆周率函数格式:PI()功能:返回圆周率二,该函数没有自变量。
4求整数函数格式:INT(<数值表达式>)CEILING(<数值表达式>)FLOOR(<数值表达式>)功能:INT()返回指定数值表达式的整数部分。
CEILING()返回大于或等于指定数值表达式的最小整数。
FLOOR()返回小于或等于指定数值表达式的最大整数。
5四舍五入函数格式:ROUND(<数值表达式I>,<数值表达式2>)功能:返回<数值表达式I>在指定位置四舍五入后的结果,<数值表达式2>指明四舍五入的位置。
若<数值表达式2>大于等于0,表示的是要保留的小数位,若小于。
,则表示整数部分的舍入位数。
格式:MOD(<数值表达式1>,<数值表达式2>)功能:返回两个数相除后的余数。
余数的正、负号与除数相同。
如果被除数与除数同号,则函数值为两数相除的余数;如果异号,则函数值为两数相除的余数再加上除数的值。
7求最大值和最小值函数格式:MAX(<数值表达式1>,<数值表达式2>[,<数值表达式3>…])MIN(<数值表达式1>,<数值表达式2>[,<数值表达式3>…])功能MAX()返回自变量中的最大值。
MIN()返回自变量中的最小值。
考点8 字符函数1求字符串长度函数格式:LEN(<字符表达式>)功能:返回指定字符表达式值的长度,即字符个数。
2大小写转换函数格式:LOWER(<字符表达式>)UPPER(<字符表达式>)功能:LOWER()将指定表达式中的大写字母转换成小写字母,其他字符保持不变;UPPER()将指定表达式中的小写字母转换成大写字母,其他字符保持不变。
3空格字符串生成函数格式:SAPCE(<数值表达式>)功能:返回由指定数目的空格组成的字符串。
4侧除前后空格函数格式:TRIM(<字符表达式>)LTRIM(<字符表达式>)ALLTRIM(<字符表达式>)功能:TRIM()删除指定表达式尾部的空格。
LTRIM()删除指定表达式前端的空格。
ALLTRIM()删除指定字符串前端和尾部的空格。
5取子串函数格式:LEFT(<字符表达式>,<长度>)RIGHT(<字符表达式>,<长度>)SUBSTR(<字符表达式>,<起始位置>[,<长度>])功能:LEFT()从指定表达式左端截取一个指定长度的子串作为函数值。
RIGHT()从指定表达式右端载取一个指定长度的子串作为函数值。
SUBSTR()从指定表达式指定位置截取一个指定长度的子串作为函数值,若默认<长度>,则截取的子串表示从指定位置开始一直到字符串尾部。
6计算子串出现次数函数格式:OCCURS(<字符表达式1>,<字符表达式2>)功能:返回第一个字符串在第二个字符串中出现的次数。
7求子串位置函数格式:AT(<字符表达式1>,<字符表达式2>[,<数值表达式>])ATC(<字符表达式1>,<字符表达式2>[,<数值表达式>])功能:AT()返回第一个字符串的首字符在第_二个字符串中出现的位置。
前提条件是第一个字符串必须是第二个字符串的子串,否则函数返回值为0。
ATC()功能与AT()类似,但不区分字符串中字符的大小写。
8子串替换函数格式:STUFF<字符表达式1>,<起始位置>,<长度>,<字符表达式2>)功能:用<字符表达式2>的值替换<字符表达式I>中由<起始位置>和<长度>指定的一个子串。