vf常量变量表达式

发布于:2021-09-23 16:01:49

常量、变量、表达式
一 常量 常量是一个命名的数据项,是在命令或程 序中直接引用的实际值,其特征是在所有的操 作中其值不变。 常量类型有以下6种: 1.数值型常量 2.货币型常量 3.字符型常量 4.逻辑型常量 5.日期常量 6.日期时间型常量

? 1 数值型常量 由数字、小数点、正负号组成,数据最大 长度为20位,其中小数点占1位。如:12、 1.34,也可以使用科学记数法形式书写,例如: 用1.23E3表示1.23×103 ? 2 货币型常量 用于表示货币值,书写格式与数值型常量 类似,但要加上货币符号($)。

? 3

字符型常量 是用定界符界定的一串字符。常用的定界符 有单引号、双引号和方括号。如果定界符成为常 量的组成部分,则应使用另外的定界符。字符型 常量最大长度为254位。 ? 4 逻辑型常量 逻辑型常量只有真假两个值。用.T.或.t.、.Y. 或.y.表示逻辑值为真,用.F.或.f.、.N或.n.表 示逻辑值为假。字母两边的英文句点不能省略。

? 5 日期型与日期时间型常量 日期型常量必须用{ }括起来,例如{06/30/2009}, {6/30/2009},空白的日期可表示为{ }或{ / } ? 日期时间型常量的写法例如{9/15/2009 8:45},空白 的日期时间可表示为{ /:}。 ? 还有一种“严格的日期格式”为: ^yyyy-mm-dd[,][hh[:mm[:ss]][a|p]] ? 格式中的符号^表明该日期格式是严格的,并按照YMD 的格式来解释日期和日期时间。其中的-号可用正斜杠 代替,例如{^2009/10/23}。 ? 必须注意,执行命令时VFP6.0默认使用严格的日期格 式,如果要使用通常的日期格式,必须先执行 SET STRICTDATE TO 0 命令,否则会引起出错。 若要设置严格的日期格式,可执行命令 SET STRICTDATE TO 1。

变量 在命令操作和程序运行过程中其值允许变 化的量称变量。变量包括:内存变量、字段变 量和系统变量。 内存变量是独立于数据库以外,存储在内 存中的临时变量。它通常用于存放程序运行过 程中所需要的原始数据、中间结果以及最终结 果。



内存变量与字段的命名规则有所不同。在VFP 中除字段外,所有的用户命名 ,例如内存变量、 函数的取名,均遵守以下规则:以字母(也可汉字) 或下划线开头,由字母、数字和下划线组成的。如 果内存变量与数据表中的字段同名时,用户在引用 内存变量时,要在其名字前加一个m. 。 内存变量的赋值和输出,可以使用store、“=” 或“?”等命令进行操作完成。

内存变量常用命令
? 1 内存变量的赋值 格式1: < 内存变量名 >= < 表达式 > 格式2: STORE <表达式> TO <内存变量名表> 功能: 计算表达式,然后将计算结果赋给内存变量。 例:定义内存变量s,n1,n2,n3 用下面两条命令定义内存变量: s=?VFP? store 2+4 to n1,n2,n3 b1=3 说明:STORE命令的<内存变量表>可包括多个内存变量,但须 用逗号来分隔。该命令可将同一值赋给多个内存变量,而“=”命令仅 可为一个内存变量赋值。

? 2 表达式值的显示 命令格式:?|??[<表达式表>] 功能:计算表达式的值并将其显示在屏幕上。 ? ?表示从屏幕下一行的第一列起显示结果 ? ??表示从当前行的当前列起显示结果。 ? <表达式表>表示可用逗号来隔开多个表达式,命 令执行时时刻刻遇逗号就空一格。例如, ?‘S=?,s &&显示S= VFP

? 3 内存变量的显示 格式1:LIST MEMORY [LIKE<通配符>] 格式2:DISPLAY MEMORY [LIKE<通配符>] 功能:显示内存变量的当前信息,包括变量名、作用域、 类型、取值。 选用LIKE短语只显示与通配符相匹配的内存变量。通配符 包括*和?,*表示任意多个字符,?表示任意一个字符。 LIST MEMORY一次显示与通配符匹配的所有内存变量, 如果内存变量多,一屏显示不下,则自动向上滚动。 DISPLAY MEMORY 分屏显示与通配符匹配的所有内存变 量,如果内存变量多,显示一屏后暂停,按任意键之后再继 续显示下一屏。

? 4 内存变量的清除 格式1:CLEAR MEMORY 格式2:RELEASE ALL 格式3:RELEASE <内存变量名表> 格式4:RELEASE ALL [LIKE<通配符>|EXCEPT<通配符 >]
功能:格式1,格式2清除所有内存变量。 格式3清除指定的内存变量。 格式4 选用LIKE短语清除与通配符相匹配的内存变量。选用 EXCEPT短语清除与通配符不相匹配的内存变量。 例如:RELEASE a1,a2 表示清除变量a1,a2 RELEASE LIKE a* 表示清除以a开头的所有内存变
量。

数组变量 数组是按一定顺序排列的一组内存变量,数组中的各个变量称为 数组元素。数组必须先定义后使用。数组大小由下标值的上、下限决 定,下限规定为1。 格式: DIMENSION <数组名>(下标1[,下标2])[,…] 或: DECLARE <数组名>(下标下限1[,下标上限2])[,…] 数组元素可以包含各种类型的数据,第一次定义时被赋值为.F.。 例:DIMENSION x(5),y(2,3) 表示定义了两个数组,一个是名为x的一维数组,另一个是名为y 的二维数组。 一维数组x包含5个元素:表示为x(1),x(2), x(3),x(4),x(5); 对于二维数组,常将第1个下标称为行标,第2个下标称为列标,故二 维数组y具有2行3列6个元素,分别表示为y(1,1), y(1,2), y(1,3), y(2,1), y(2,2), y(2,3) 说明:二维数组各元素在内存中按行的顺序存储,而且也可按一 维数组来表示其数组元素。例如数组y中的元素y(2,2)排在第2行第2列, 由于第行有3个元素,所以该元素也可用y(5)来表示。

字段变量 表的每一个字段就是一个字段变量。例如rsb.dbf中 的编号、姓名等都是字段变量。说字段是变量,是由于对 于某一字段,它的值允许因记录而异。请年名称字段的值: use rsb ?名称 go 5 ?名称 字段变量在建立表结构时定义,修改表结构时可重 新定义,或增删字段变量。

系统变量
是Visual FoxPro建立并维护的内存变 量。这些变量的名称由系统定义,并且以 “_”开头。系统变量举例如下 : (1)_DIARYDATE:存储当前日期。 (2)_CLIPTEXT:接受文本并送入剪贴板。 例如执行命令_CLIPTEXT=?VFP?后,剪贴板中 就存储了文本VFP。

函数
函数具有特定的功能,VFP提供了200余种函数,具有强大的功能。 一、函数的要素 函数有函数名、参数和函数值3个要素。 (1)函数名起标识作用 (2)参数是自变量,一般是表达式,写在括号内 (3)函数运算后会返回一个值,称为函数值,这就是函数的功能。 二、函数的类型 所谓函数类型就是函数值的类型。在表达式中嵌入函数时须了解函 数值的类型,免得发生数据类型不一致的错误。 使用TYPE函数能返回表达式的类型,也能测出函数的类型。例如, ?TYPE(“DATE()”) &&显示D,表明函数DATE ()是日期型函数。 三、常用函数

? 1数值型函数 ? (1)绝对值函数 格式:ABS(数值表达式) 功能:求数值表达式的绝对值。 例:?ABS(-12.34) 结果为12.34。 ? (2)最大值函数 格式:MAX(数值表达式1,数值表达式2) 功能:计算数值表达式的值,取最大者。 例:?MAX(5*4,60/2) 结果为30 ? (3)最小值函数 MIN(数值表达式1,数值表达式2) 功能:计算数值表达式的值,取最小者。 例:?MIN(5*4,60/2) 结果为20

? (4)*方根函数 格式:SQRT(数值表达式) 功能:计算数值表达式的*方根。 例:?SQRT(25*4) 结果为10。 ? (5)指数函数 格式:EXP(数值表达式) 功能:计算以e为底的指数幂。 例:?EXP(2*2) 结果为54.60。 ? (6)对数函数 格式:LOG(数值表达式) 功能:计算数值表达式的自然对数。 例:?LOG(54.60) 结果为4.00。

? (7)取整函数 格式:INT(数值表达式) 功能:计算数值表达式的值,取整数部分。 例:?INT(-4.68) 结果为-4。 ? (8)四舍五入函数 格式:ROUND(数值表达式,保留小数位数) 功能:计算数值表达式的值,根据保留位数进行四舍 五入。如果保留小数位数为正数n,则对小数点后n+1 位四舍五入,如果保留小数位数为负数n,则对小数点 前n位四舍五入。 例:?ROUND(123.34567,3) 结果为123.346。 ?ROUND(123.34567,-2) 结果为100。

(9)取模函数 格式:MOD(数值表达式1,数值表达式2) 功能:函数值为数值表达式1除以数值表达式2的余数。 例:?MOD(16,5) 结果为1。 (10)正弦函数 格式:SIN(数值表达式) 功能:函数值为数值表达式(弧度)的正弦值。

2 字符型函数 (1)查找子串函数
格式:AT(字符表达式1,字符表达式2,[数值表达式n]) 功能:查找字符表达式1在字符表达式2中的起始位置。如 果有数值表达式n,则确定字符型表达式1在字符型表达式 2中的第n次出现的起始位置;如果未指明数值表达式n, 则确定第一次出现的起始位置;如果字符表达式1不在字 符表达式2中,则返回值为0。 例:?AT(“A”,“BCDE”) 结果为0。 ?AT(“A”,“ABADE”) 结果为1。 ?AT(“A”,“ABCADE”,2) 结果为4。

(2) 截取子串函数
格式:SUBSTR(字符表达式,起始位置,[长度]) 功能:从指定的起始位置开始,在字符表达式中截取指定 长度的字符串。 说明:假设起始位置为m,长度为n。若省略n,则从m开始 截取以后的所有字符串;若n大于从m开始的字符串长度, 则从m开始截取以后的所有字符串;若m大于字符表达式 的长度,则截取的字符串为空白字符串。 例:?SUBSTR(“HARDWORK”,3,4) 结果为 “RDWO” ?SUBSTR(“HARDWORK”,2) 结果为“ARDWORK” ?SUBSTR(“HARDWORK”,3,9) 结果为 “RDWORK” ?SUBSTR(“HARDWORK”,9,5) 结果为“”

(3) 左截取子串函数
格式:LEFT(字符表达式,数值表达式) 功能:从字符表达式左边开始,截取指定长度的字符串。 例:?LEFT(“HARDWORK”,3) 结果为“HAR”

(4) 右截取子串函数
格式:RIGHT(字符表达式,数值表达式) 功能:从字符表达式右边开始,截取指定长度的字符串。 例:?RIGHT(“HARDWORK”,3) 结果为“ORK”

(5) 生成空字符串函数
格式:SPACE(数值表达式) 功能:生成指定空格数的空字符串。 例:?SPACE(3) 结果为“ ”。

? (6) 重复字符串函数
格式:REPLICATE(字符表达式,数值表达式) 功能:返回多次复制后的字符表达式。 例:?REPLICATE(“ABC”,3) 结果为 “ABCABCABC”

(7) 字符串长度函数
格式:LEN(字符表达式) 功能:求字符串的长度(包括空格)。 例:?LEN(“how are you”) 结果为“11”

(8) 字符串替换函数
格式:STUFF(字符表达式1,起始位置,字符个数,字符表达式2) 功能:从指定的起始位置开始,用字符表达式2替换字符表达式1中 指定个数的字符串。 说明:若字符表达式2的长度大于起始位置以后的字符串个数,则 替换起始位置以后的所有字符串。替换与被替换的字符的长度无关。 例:?STUFF(“computer”,3,4,”abc”) 结果为“coabcer” ?STUFF(“computer”,3,1,”abc”) 结果为“coabcputer” ?STUFF(“computer”,3,4,” ”) 结果为“co er”

(9) 删除尾部空格函数
格式:TRIM(字符表达式) 功能:函数值为将字符表达式删除尾部空格得到的字符串。

(10) 删除左端空格函数
格式:LTRIM(字符表达式) 功能:函数值为将字符表达式删除头部空格得到的字符串。

(11) 删除前后空格函数
格式:ALLTRIM(字符表达式) 功能:函数值为将字符表达式删除头部和尾部空格得到的 字符串。

3 日期函数
(1)系统时间函数 格式:TIME( ) 功能:输出系统当前时间。时间格式为HH:MM:SS 例:?TIME( ) (2)系统日期时间 格式:DATE() 功能:输出系统当前日期。系统默认格式为MDY,可 以使用SET DATE命令自行设定日期输出格式。 例:?DATE( ) 假设系统默认输出 03/20/08 SET DATE TO YMD ?DATE( ) 结果为:08/03/20

(3)年函数 格式:YEAR(日期型表达式) 功能:输出日期型表达式的年份。 例:?YEAR(DATE()) (4)月函数 格式:MONTH(日期型表达式) 功能:输出日期型表达式的月份。 例:?MONTH(DATE()) (5)日函数 格式:DAY(日期型表达式) 功能:输出日期型表达式的日期。 例:DAY(DATE())

4. 类型转换函数
数据的运算要求符合数据类型一致的原则,因此,若 要对不同类型的数据进行运算,那么必须通过转换函数 将其转换为一致的数据类型。
(1)数值型转换为字符型函数 格式:STR(数值表达式[,长度][,小数位数]) 功能:将数值表达式按设定的长度和小数位数转换成字符型数 据。 说明:长度为转换后的字符串位数,若长度的设定值大于实 际数值,则转换后的字符串前补“空格”,若长度的设定值小 于实际数值,则用*代替;若小数位数的设定值大于实际数值, 则转换后的字符串后补0,若小数位数的设定值小于实际数值, 则对小数四舍五入。小数点和负号均占有1位。 例: ?STR(123.4567,6,2) 结果为:123.46 ?STR(123.4567,9,2) 结果为: 123.46 ?STR(123.4567,6,3) 结果为:123.46 ?STR(123.4567,1,2) 结果为:*

(2) 字符型转换为数值型函数 格式:VAL(字符型表达式) 功能:将数字字符串转换为数值。 说明:转换时遇到非数字字符时停止;若 第一个字符就不是数字,则值为0.00 例:VAL(“123.45A3”) 结果为123.45 VAL(“A123.45AB”) 结果为0.00

(3) 字符转换为ASCII函数 格式:ASC(字符型表达式) 功能:返回字符表达式第一个字符的ASCII码值 例:ASC(“abc”) 结果为97 (4) ASCII码转换为字符函数 格式:CHR(数值型表达式) 功能: 将ASCII码转化为相应的字符 例:CHR(65) 结果为A

(5) 日期型转换为字符型函数 格式:DTOC(日期型表达式[,1]) 功能:将日期型表达式转换为字符串。 说明:若使用选项[,1],则转换为年月日的形式 例:?DTOC(DATE( ))假设当前日期为2009/3/20,那么结果为03/20/09 ?DTOC(DATE( ),1) 结果为20090320 (6) 字符型转换为日期型函数 格式:CTOD(字符型表达式) 功能: 将字符型表达式转换为日期值 例:? CTOD(“03/20/2009”) 结果为03/20/09

(7) 大写字母转换为小写字母函数 格式:LOWER(字符型表达式) 功能:将字符型表达式的大写字母转换为小写字母 例:?LOWER(“AaBbCc”) 结果为aabbcc (8) 小写字母转换为大写字母函数 格式:UPPER(字符型表达式) 功能: 将字符型表达式中的小写字母转换为大写字母 例:?UPPER(“AaBbCc”) 结果为AABBCC

5. 测试函数
(1) 文件开始测试函数 格式:BOF( ) 功能:测试记录指针是否指向第一条记录之前。 是返回.T.,否则返回.F. (2) 文件结束测试函数 格式:EOF( ) 功能:测试记录指针是否指向最后一条记录之后。是返回.T.,否则返回.F. (3) 检索测试函数 格式:FOUND( ) 功能:测试是否找到符合要求的记录。 (4) 记录号测试函数 格式:RECNO( ) 功能:返回当前记录的记录号。

(5) TYPE(“字符表达式”) 功能:返回表达式类型,以N,C,D,L等之 一表示。

表达式

表达式是指用运算符将常量、变量、字段、函数 连接起来的有意义的式子。其类型由表达式最终计算结 果的数据类型决定,主要有:数值型、字符型、日期型、 关系型、逻辑型。运算符包括:算术运算符、字符串运 算符、日期时间运算符、关系运算符、逻辑运算符。不 同表达式使用的运算符不同,但运算符两边的数据类型 必须相同,否则将导致因数据类型不匹配而出错。

1 数值表达式

数值表达式是由算术运算符将数值型 数据连接起来形成,其结果仍为数值型数据。
优先级 运算符
1 2 3 4 () ** 或 ^ *、/、% +、-

说明
形成表达式内的子表达式 乘方运算 乘、除运算、求余运算 加、减运算

求余运算%和取余函数MOD( )的作用相 同。余数的正负号与除数一致。 例:?15%4,15%-4 store 122 to x,y z=73 ?x%z,mod(x,z),x%(y-200)
1 3   计算数学算式( 60 ? 56 ) ? 18.45 的值

字符表达式 字符表达式是由字符运算符将字符 型数据连接起来形成。其结果仍为字符 型数据。字符运算符有“+”和“-”两种, 它们的优先级相同:

2

字符运算符有“+”和“-”两种。 (1)直接连接(+) 即用“+”将两个或多个字符串首尾连接形成一个新的字 符串。 (2)去空连接(-) 即用“-”将两个或多个字符串相连接。如果前一个字符 串尾部有空格,则将此空格移到后一个字符串的尾部。 例:?“ABC ”+“DEF” 结果为:ABC DEF ?“ABC ”-“DEF” 结果为:ABCDEF

日期表达式 日期时间表达式由+、-运算符将日期连接起 来的表达式,其结果仍为日期型数据。 例:?{11/20/09}+3 结果为{11/23/09} ?{11/20/09}-3 结果为{11/17/09} ?{11/20/09}-{11/10/09} 结果为10 注意:两个日期值相加是无意义的。

3

4

关系表达式 关系表达式是由关系运算符将两个运算对象连接起来形成, 即:表达式1 关系运算符节 表达式2 关系运算符的作用是比较两个表达式的大小或前后。其运 算结果为逻辑型数据(逻辑真和逻辑假)。分别用.T.和.F.表 示。 关系运算符有:>(大于)、<(小于)、>=(大于等于)、 <=(小于等于)、<>(!=、#)(不等于)、=(等于)、==(字 符串精确比较)、$(子串包含测试),它们的优先级相同。 ==和$仅适用于字符型数据。其他运算符适用于任何类型的 数据,但前后两个运算对象的数据类型要一致。

说明: (1)比较大小时,日期早的日期型数据小于日期晚的日期型数 据; .F.小于.T.;字符型数据从左到右依次按其ASCII码值比较。 (2)字符串精确比较与EXACT设置 在用双等号运算符==比较两个字符串时,只有当两个字符串完 全相同(包括空格以及各字符的位置)时,运算结果才会是.T., 否则为.F.。 在用单等号运算符=比较两个字符串时,运算结果与SET EXACT ON|OFF设置有关,该命令是设置精确匹配与否的开关。该命令可以 在命令窗口或在程序中执行,也可以通过“数据”选项卡设置。 a.系统默认OFF状态。当处于OFF状态时,只要右边的字符串与 左边字符串的前面部分内容相匹配,即可得到.T.的结果。 b.当处于ON状态时,比较到两个字符串全部结束,先在较短字 符串的尾部加上若干个空格,使两个字符串的长度相等,然后再进 行比较。

例:set exact off store “计算机” to s1 store "计算机 " to s2 store "计算机世界" to s3 ?s1=s3,s3=s1,s1=s2,s2=s1,s2==s1 set exact on ?s1=s3,s3=s1,s1=s2,s2=s1,s2==s1

(3)子串包含测试运算符“$” 关系表达式: 前字符型表达式 $ 后字符型表达式 为子串包含测试,如果前者是后者的一个子字符串,结果为.T.,否 则为.F.。 例:store “计算机” to s1 store “微型计算机” to s2 ?s1$s2,s2$s1,(s1$s2)>(s2$s1)

5

逻辑表达式 逻辑表达式是由逻辑运算符将逻辑数据连接起来而形成, 其运算结果为逻辑真和逻辑假。 逻辑运算符按优先级高低分别为: .NOT.、.AND.、.OR.。 运算规则为: 使用.NOT.运算的表达式为假,则逻辑表达式的值为真。 使用.AND.连接的两个表达式的值同时为真,逻辑表达式的 值为真。 使用.OR.连接的两个表达式的值,只要有一个为真,逻辑 表达式的值为真。

运算符优先级: 算术运算符 字符串运算符 日期时间运算符 关系运算符 逻辑运算符 例: ?((10%3=1)and (15%2=0))or ?电脑’!=?计算 机’ .T.

宏替换函数 格式:&字符型变量[.] 功能:替换出字符型变量的内容,即&的值是 变量中的字符串.如果该函数与其后的字 符无明确分界,则要用“.”作函数结束标 识.宏替换可以嵌套使用. 如: x="20.56" ?str(&x,2)+"23&x"

条件测试函数 格式:IIF(逻辑表达式,表达式1,表达式2) 功能:测试逻辑表达式的值,若为逻辑真,函 数返回表达式1的值,若为逻辑假,函数返 回表达式2的值.表达式1和表达式2的类 型不要求相同. 例:x=100 ?iif(x>10,x-50,x+50),iif(x<10,x-50,x+50)


相关推荐

最新更新

猜你喜欢