函数说明:若字符表达式值的首字符是大写英文字母,则函数值为真(.T.);否则,函数值为假(.F.)。
【 例 2.69 】
? Isupper(”aBc”), Isupper(”Abc”) && 输出结果为:.F. .T.
5. 文件存在函数
函数格式:File(<字符表达式>)
函数说明:判断字符表达式值表示的文件名(应包含路径和文件全名)是否存在。若磁盘文件存在,则函数值为真(.T.);否则,函数值为假(.F.)。
【 例 2.70 】假设D:\\XSA.DBF文件存在,而D:\\XSB.DBF文件不存在。
? File(“D:\\XSA.DBF”), File(“D:\\XSA”) && 输出:.T. .F. ? File(‘D:\\XSB.DBF') && 输出:.F.
6. 测试空值函数
函数格式:Empty (<表达式>)
函数说明:判断表达式值是否为空值(Empty)。若表达式值是空值,则函数值为真(.T.);否则,函数值为假(.F.)。VFP中常用数据类型的空值如表2.4。
表2.4 空值(Empty)定义
数据类型 数值型 字符型 货币型 数据类型 0 日期型 空串、空格串、Tab串等 日期时间型 $0 逻辑型 空值定义 空值定义 空日期 空日期时间 .F.
【 例 2.71 】
? Empty(Ctod(space(0))), Empty(Ctot(space(2))) && 输出结果为:.T. .T. ? Empty(Space(0)), Empty(Space(3)) && 输出结果为:.T. .T. ? Empty (2*3-6), Empty ($10) && 输出结果为:.T. .F. ? Empty(2<3), Empty (“ABC”==”AB”) && 输出结果为:.F. .T.
7. 测试.Null.值函数
函数格式:Isnull(<表达式>)
函数说明:若表达式值是不确定的.Null.值,则函数值为真(.T.);否则,函数值为假(.F.)。
.Null.表示没有确定的值。例如,对“商品”表中未定价的商品,可以将“价格”字段设为.Null.。又如,对“成绩”表中没有考试科目的“成绩”字段也可以设为.Null.。
【 例 2.72 】
? Isnull(0),Isnull(.Null.),Empty(.Null.) && 输出:.F. .T. .F.
8. 测试值域函数
函数格式:Between(<表达式1>,<表达式2>,<表达式3>)
函数说明:若表达式1的值大于或等于表达式2的值并且小于或等于表达式3的值,则函数值为真(.T.);否则,函数值为假(.F.)。3个表达式值的数据类型必须一致,可以是数值型、字符型、日期型、日期时间型或货币型数据等。
【 例 2.73 】
? Between(2+5,2*3, 4*3), Between(Date(), Date()-1,Date()+1) && 输出为: .T. .T.
2.7.3 表达式综述
在VFP的同一个表达式中,允许含有多种运算符。各类运算符的优先级别由高到低依次为:数值运算、字符运算、日期运算和日期时间运算同级别;关系运算;逻辑运算。
优先级别相同的运算按从左到右的顺序进行,小括号优先级别最高,可以通过加小括号改变优先级顺序,多个小扩号嵌套时,最里层的小扩号先运算。
【 例 2.74 】
M=5 N='ABC'
? !(M-2)*2>5 Or 'D'+N =='ABC' And M>3
&& 输出:.F.
2.8 宏替换及其使用
在VFP中,使用宏替换函数处理数据可以提高程序的通用性及灵活性。 函数格式:&<字符型内存变量>[.]
函数说明:用字符型内存变量的值替换整个宏替换函数所在的位置。当宏替换函数是命令中最后一项或其后有分隔符(如空格、运算符号和逗号等),则宏替函数末尾的圆点“.”可以省略。宏替换函数的应用如下:
1. 作为常数的一部分 【 例 2.75 】
X=\大学\? \吉林&X\
&& 输出结果为:吉林大学
2. 作为变量名的一部分 【 例 2.76 】
XH1=\N=”1”
? XH&N && 输出结果为:202
3. 作为表达式的一部分 【 例 2.77 】
X=\” Y=\
Y5=”Z” Z=2+4
? 1+&X*3 && 相当于求1+2*3的值,输出结果为:7 ? &Y.&X && 相当于求3/2的值,输出结果为:1.50。
? &Y 5 && 由于有空格作为明显的分隔符,圆点可省略。输出结果为:0.60 ? &Y5 && 相当于输出Z的值:6
4. 替换文件名 【 例 2.78 】
Accept \请输入表名:\输入一串字符作为变量BM的值 Use &BM && 打开以BM变量值为文件名的数据表
5. 替换一条命令 【 例 2.79 】
X=\
&X && 等同于执行命令:? Date( )
2.9 对话框函数
在应用程序执行过程中,有时需要弹出对话框与用户进行交互。利用Messagebox函数,可以创建对话框。
函数格式:Messagebox(<字符表达式1> [,<数值表达式>[,<字符表达式2>]]) 函数说明:定义带按钮和图标的对话框,函数返回值由用户选择的按钮而定(如表2.8)。函数中各个表达式的作用为: (1)字符表达式1:设置对话框中要显示的信息。
(2)数值表达式:用于说明对话框类型,对话框类型由按钮、图标和默认按钮组合而成,数值表达式的值是按钮编码(表2.5)、图标编码(表2.6)和默认按钮编码(表2.7)组合值,系统默认值为0。例如,289=1+32+256,表示对话框有“确定”和“取消”按钮,图标为“?”,默认按钮是第2个(取消)按钮。
(3)字符表达式2:设置对话框的标题。若省略此表达式,则对话框标题为“Microsoft Visual FoxPro”。
表2.5 对话框函数的按钮设置表 表2.6 对话框函数的图标设置表 编码 0 1 2 3 4 5 按钮对象 仅包含”确定”按钮 “确定”和“取消”按钮 “终止”、“重试”和“忽略”按钮 “是”、“否”和“取消”按钮 “是”和“否”按钮 “重试”和“取消”按钮 编码 0 16 32 48 64 图标对象 无图标 × ? ! i 表2.7 对话框函数的默认按钮设置表 表2.8 对话框函数值表 编码 0 256 512 包含对象 第1个按钮是默认按钮 第2个按钮是默认按钮 第3个按钮是默认按钮
选择按钮 确定 终止 忽略 否 函数值 1 3 5 7 选择按钮 取消 重试 是 函数值 2 4 6
【 例 2.80 】
? Messagebox(\请关闭电源\警示\
执行语句时,系统弹出“警示”对话框(如图2.1),显示“请关闭电源”,有“确定”、“取消”按钮和“!”图标,“取消”按钮是默认按钮。如果单击“确定”按钮,则输出1;若单击“取消”按钮,则输出2。
图2.1 例2.80执行效果
通常将Messagebox函数单独作为一条命令使用,忽略函数的返回值,提示用户某些信息。
【 例 2.81 】
If not File (\
Messagebox(\文件默认目录中没有XSB.DBF,退出后检查文件位置\Cancel EndIf
2.10 数组及其使用
数组是一组变量名相同而下标不同的内存变量。其中每个内存变量称为数组元素,简称元素。在VFP中,可以定义一维或二维数组,每个数组中最多可以含65000个元素,同一个数组中各个元素的数据类型可以不同。
2.10.1 定义数组
在使用一个数组之前,必须先对其进行定义。
命令格式:Dimension <数组名1>(<行下标1>[,<列下标1>])
[,<数组名2>(<行下标2>[,<列下标2>])]??
Declare <数组名1>(<<行下标1>[,<列下标1>]])
[,<数组名2>(<行下标2>[,<列下标2>])]??
命令说明:用于定义数组,在命令中用圆括号或方括号将数组的维数括起来,数组中每个元素的初值都是逻辑假(.F.)。两条命令的功能完全相同。各项说明如下:
(1)数组名:数组名必须依据内存变量的命名规则,不允许与系统函数重名,数组名也不能与简单内存变量重名。
(2)行下标:定义数组的行数。
(3)列下标:定义数组的列数。若省略,则定义一维数组。
<行下标>和<列下标>都是数值表达式,执行此命令时自动取整。VFP规定各下标的下界是1。
【 例 2.82 】
Dimension A(3),BC[2,2]
同时定义了两个数组:一维数组A中有A (1)、A (2)和A (3)共3个元素,二维数组BC中有BC(1,1)、BC(1,2)、BC(2,1)和BC(2,2)共4个元素。
2.10.2 使用数组元素
VFP中凡可以使用简单内存变量的地方,都可以使用数组元素;给简单内存变量赋值的方法适用于数组元素。引用数组元素的方法:
引用格式:<数组名>(<行下标>[,<列下标>])
引用说明:在数组名后用圆括号或方括号将行下标和列下标括起来,各下标值是大于或等于1的数值表达式,引用时自动取整。行下标与列下标之积不能超出数组中元素总数。
【 例 2.83 】
Dimension B (2,3)
B[1,1]=7 && B(1,1)赋值为7
B[1,2]={^2008-05-01} && B(1,2)赋值为2008-05-01
B(2,1)= B(1,1)+ B(1,2) && 引用数组元素B(1,1)和B(1,2),并为B(2,1)赋值 ? B[2,1] && 输出B(2,1)的值
在对数组名赋值时,将为数组中每个元素赋相同的值;引用数组名时,实际上是引用数组中的第1个元素。
【 例 2.84 】
Dimension A(2,3)
A=1 && 对数组名A赋值,将数组A中的6个元素都赋值成1 A(1,1)='图书' A(1,2)= 2*3
? A && 仅引用数组名A,实际上引用的是A(1,1),输出:图书