
2.2 VFP 9.0的常量与变量
常量和变量是VFP 9.0数据运算和数据处理的基本对象。
2.2.1 常量
常量指在操作或程序运行过程中其值不变的量,按取值可分为如下6种类型。
1.字符型常量
字符型常量又称为“字符串”,是用英文单引号(' ')、英文双引号(" ")或英文中括号([ ])等定界符括起的一串字符,定界符不作为字符串的一部分。如果某种定界符本身也是字符串的内容,则需要用另一种定界符为该字符串定界。
字符型常量的定界符必须成对匹配。不包含任何字符的字符串(如" ")为空串,它与包含空格的字符串(如" ")不同。
2.数值型常量
数值型常量即常数,由阿拉伯数字、正负号、数字与小数点组成。数值型数据之间可以执行数学运算,整数、小数或用科学记数法表示的数都是数值型。
数值型常量中的小数有小数形式和指数形式两种表示方法,如20、-3.42、6.56是小数形式的数值型常量;指数形式通常用来表示绝对值很大或很小的一些数值,对应于日常应用中的科学计数法,如用6.25E-5表示6.25×10-5。
3.逻辑型常量
逻辑型常量表示逻辑判断的结果,只有“真”和“假”两个值,用.T.、.t.、.Y.、.y.来表示逻辑真(True);用.F.、.f.、.N.、.n.表示逻辑假(False)。注意字母两侧必须用一对英文小数点。
4.货币型常量
货币型常量用来表示货币值,与数值型常量类似(不能采用指数形式),但要添加一个前置的符号$。货币型数据在存储和计算时保留4位小数,如果小数多于4位,系统将自动进行四舍五入。
5.日期型常量
日期型常量是表示日期值的数据,书写格式为“{^yyyy-mm-dd}”,年、月、日3部分之间用分隔符(-)、(/)、(.)或空格隔开。日期型常量的默认显示格式为mm/dd/yy(月/日/年),显示格式的依据为系统设置的日期格式。
6.日期时间型常量
日期时间型常量用来表示一个具体的日期与时间,与日期型常量相似,也用{ }括起。其书写格式为{^yyyy-mm-dd hh:mm:ss},年、月、日3部分之间用分隔符(-)、(/)、(.)或空格隔开,hh:mm:ss为时、分、秒,3个部分之间用冒号分隔。
日期时间型常量与日期型常量一样显示格式与书写格式并不完全相同,显示格式的依据为系统设置的格式。
VFP 9.0系统中与日期格式有关的命令和设置选项如下。
(1)日期格式中的世纪值。
● 命令方式。
格式:SET CENTURY ON|OFF
功能:设置显示日期时是否显示世纪。
说明:ON表示日期值输出时显示10位,年份占4位;OFF为默认值,表示日期值输出时显示8位,年份占2位。
● 菜单方式。
选择“工具”|“选项”|“区域”选项,就可以在日期和时间区域中选择显示日期时是否显示世纪。
(2)设置日期显示格式。
● 命令方式。
格式:SET DATE [TO] AMERICAN | ANSI | BRITISH | FRENCH | GERMAN | ITALIAN | JAPAN | USA | MDY | DMY | YMD | SHORT | LONG
功能:设置日期的显示输出格式。
说明:系统默认为AMERICAN(美国日期格式)。
● 菜单方式。
选择“工具”|“选项”|“区域”选项,就可以在日期和时间区域中选择显示的日期格式。
(3)严格的日期格式。
{^yyyy-mm-dd[, ][hh[:mm[:ss]][a|p]]}即年-月-日[, ][时[:分[:秒]][上午或下午]],其中^符号表示该格式是严格的日期格式,并按照YMD的格式解释日期型和日期时间型数据,系统默认采用严格的日期格式。
● 命令方式。
格式:SET STRICTDATE TO [0|1|2]
功能:设置是否对日期格式进行检测。
说明:“0”表示不进行严格的日期格式检测;“1”表示进行严格的日期格式检测(默认值),要求所有日期和日期时间型数据均按严格格式;“2”表示进行严格的日期格式检测,且对“CTOD()”和“CTOT()”函数的格式有效。
● 菜单方式。
选择“工具”|“选项”|“常规”选项,展开“2000年兼容性”栏中的“严格的日期级别”下拉列表框。选择其中某个选项,然后单击“确定”按钮确认此格式设置。
(4)设置日期分隔符。
● 命令方式。
格式:SET MARK TO [日期分隔符]
功能:设置显示日期时使用的分隔符,如/、-、.等,如没有指定任何定界符,系统默认为斜杠分隔符。
● 菜单方式。
在系统菜单中依次选择“工具”“选项”“区域”,就可以在日期和时间区域中设置日期分隔符。
2.2.2 变量
变量是在命令操作过程中其值可以改变的量。
确定一个变量需要确定变量名、变量类型、变量值3个要素,如cj=100, cj是变量名,100是变量值,数据类型是数值型。
在VFP 9.0中变量命名的规则如下。
(1)使用字母、汉字、下画线和数字,尽量不采用汉字,以提高操作效率。
(2)以字母或下画线开头。
(3)为避免混淆,不应使用VFP 9.0的保留字(命令名、函数名等系统预定义项的名称)。
变量分为如下3种类型。
1.字段变量
字段变量指数据表中的字段名,是表中最基本的数据单元。随着记录的不同字段所对应的内容随之变化,随表的存取而存取。字段变量的类型可以是VFP 9.0规定的任意数据类型,其名字、类型和长度等是在定义表结构时定义的。
2.内存变量
内存变量是一种独立于数据表之外的变量,常用来存储用户经常用到的常量,以及程序运行过程中的中间结果、最后结果和用户输入的信息等。内存变量是内存中存储数据的位置名称,变量值就是存储在这个内存空间中的数据。该类型取决于变量值的类型,可以是字符型、数值型、货币型、逻辑型、日期型和日期时间型等。
内存变量名由字母、数字和下画线组成,不能以下画线开头。不允许有空格,最长不超过254个字符。如果内存变量和字段变量重名,则应该在内存变量名前添加标识符号“M”,并用分隔符“.”或“->”连接,即:
M.<内存变量名> 或M-><内存变量名>
(1)为内存变量赋值。
赋值的同时也创建了内存变量,常用的赋值命令如下。
<内存变量名> = <表达式> STORE <表达式> TO <内存变量名表>
例如:
xx=6 STORE 3 TO x, y, z
(2)输出和显示内存变量的值。
格式:? <表达式表> 或?? <表达式表>
功能:计算并显示表达式的值,?表示结果值显示在下一行;? ?表示结果显示在同一行。
例如:
?xx ?? x, y, z
(3)输出显示内存变量。
格式:LIST MEMORY [LIKE <通配符>][TO PRINT]或DISPLAY MEMORY [LIKE <通配符>] [TO PRINT]
功能:显示当前已经定义的内存变量的名称、数据类型和其值。若选择TO P RINT,则打印当前显示的内容。
例如:
LIST MEMORY &&不分屏显示所有内存变量和系统变量 DISPLAY MEMORY &&分屏显示所有内存变量和系统变量 LIST MEMORY LIKE x* &&不分屏显示所有名称以x开始的内存变量
(4)保存内存变量。
格式:SAVE TO <文件名>[ALL LIKE<通配符>|EXCEPT<通配符>]
功能:将当前已经定义的内存变量的全部或指定部分存入到内存变量文件中,系统将自动生成扩展名为.mem的文件。保存后并没有清除内存变量,仍具有当前值。
例如:
SAVE TO ma SAVE TO bk ALL EXCEPT a*
(5)恢复内存变量。
格式:RESTORE FROM <文件名> [ADDITIVE]
功能:恢复指定的内存变量文件中保存的所有内存变量。若命令中包括可选项ADDITIVE,系统不清除当前的所有内存变量,并追加文件中的内存变量;否则执行后只有内存变量文件中保存的那些变量。
例如:
RESTORE FROM bk
(6)清除内存变量。
格式:CLEAR MEMORY或RELEASE [<内存变量表>][ALL [LIKE|EXCEPT <通配符>]]
功能:清除内存变量并释放相应的内存空间,CLEAR MEMORY清除所有的内存变量,等同于RELEASE ALL; RELEASE [<内存变量表>][ALL [LIKE|EXCEPT <通配符>]]命令清除指定的内存变量。
3.数组变量
数组也是一种内存变量,是内存中连续的一片区域,须先定义后使用。它由一系列元素组成,每个数组元素可通过数组名及相应的下标来访问。每个元素相当于一个简单变量,这些数组元素的数据类型可以不同。
(1)定义。
格式:DIMENSION <数组名>(<下标上界1>[, <下标上界2>])[, …]或DECLARE <数组名>(<下标上界1>[, <下标上界2>])[, …]
功能:定义一维或二维数组。
说明:下标的上界是一正整数值,下界由系统统一规定为1。下标必须用圆括号括起,一维数组的元素只有一个下标,二维数组的元素有两个以逗号分隔的下标。数组定义后系统自动为每个数组元素赋初值逻辑假.F.。
例如:
DIMENSION h(6), j(3,4)
(2)赋值。
可以使用赋值命令分别为数组元素赋值,也可以为整个数组的各个元素赋予相同的值。
注意:数组名不能与简单变量同名。
例如,在命令窗口中输入下列内容,并观察结果:
DIMENSION h(3), j(3,2) h= "系统" j(2,1)=114 j(2,2)=.T. j(3,1)=$12 j(3,2)={^2017/3/20} ?h(1), h(2), h(3) &&显示结果为系统 系统 系统 ?j(1,1), j(1,2) &&显示结果为 .F. F. ?j(2,1), j(2,2) &&显示结果为 114 .T. ?j(3,1), j(3,2) &&显示结果为 12.0000 03/20/17 ?j(1), j(2), j(3), j(4), j(5), j(6)
显示结果为.F. F. 1 14 .T. 12.00 00 03/20/17
4.系统变量
系统变量是VFP 9.0提供的内存变量,使用方法与一般变量相同。系统变量名都以下画线开始,用于控制打印机等外部设备及屏幕输出格式,或者处理有关计算器、日历和剪贴板等方面的信息,因此在定义内存变量名时不能以下画线开始。