第三章  Visual FoxPro 语言基础

125
第第第 第第第 Visual FoxPro Visual FoxPro 第第第第 第第第第 第第 第第第第 Visual FoxPro 第第第第第 第第 第第第第第第第第 、。

description

第三章  Visual FoxPro 语言基础. 本章,我们学习 Visual FoxPro 的主要语法规则、常用命令和函数。. 3.1  数据类型、常量和变量. 数据有 “ 类型 ” 和 “ 值 ” 两个属性, “ 类型 ” 是数据的分类, “ 值 ” 是数据的具体表示。 3.1.1  数据类型   在程序设计中, Visual FoxPro 的数据类型有 字符型 、 数值型 、 逻辑型 、 日期型 、 日期时间型 和 货币型 。. 1 、字符型 : 是由字符串定界括起来的一串字符。 - PowerPoint PPT Presentation

Transcript of 第三章  Visual FoxPro 语言基础

Page 1: 第三章  Visual FoxPro 语言基础

第三章 第三章  Visual FoxProVisual FoxPro 语言基语言基础础

本章,我们学习 Visual FoxPro 的主要语法规则、常用命令和函数。

Page 2: 第三章  Visual FoxPro 语言基础

3.13.1  数据类型、常量和变量 数据类型、常量和变量 数据有“类型”和“值”两个属性,“类型”是数据的分类,“值”是数据的具体表示。 3.1.1  数据类型  在程序设计中, Visual FoxPro 的数据类型有字符型、数值型、逻辑型、日期型、日期时间型和货币型。

Page 3: 第三章  Visual FoxPro 语言基础

1 、字符型 :是由字符串定界括起来的一串字符。  字符型数据由英文字符、数字字符、中文字符、空格和其他专用符号组成。例如 "I am a student" 、 '2004/10/10' 、 [123.456] 等都是字符型数据。2、数值型  数值型数据由数字、小数点和正负号组成,如 123.456 、 -2 都是数值型数据。3、逻辑型   逻辑型数据长度为 1个字节,它只能为真或假。“真”( True , Yes )用 .T. 或 .Y. 表示,“假”( False , No )用 .F. 或 .N. 表示,注意:逻辑值旁边有两个点,这是逻辑型数据的定界符。

Page 4: 第三章  Visual FoxPro 语言基础

4 、日期型  日期型数据占8个字节,范围从 01/01/1000 ( 1000年 1月 1日)到 12/31/9999 ,表示方法是 {^yyyy-mm-dd} ,定界符是一对花括号。其中, yyyy 表示年份, mm 表示月份, dd 表示日期。例如, {^2005-01-01} 就是一个日期型数据。5、日期时间型  日期时间型数据也占8个字节,年份范围从 01/01/1000 ( 1000 年 1月 1日)到 12/31/9999 ,时间范围从 00:00:00a ~ 11:59:59p (凌晨 0点 0分 0秒到午夜 11点 59分 59秒) .书写格式为 {^yyyy-mm-dd [hh[:mm[:ss]] [a|am|p|pm]]} ,定界符也是一对花括号。年月日的约定和日期型数据相同, hh表示小时, mm表示分钟, ss表示秒数, a或 am表示上午, p或 pm表示下午,大小写均可。例如,下面都是合法的日期时间型数据。

Page 5: 第三章  Visual FoxPro 语言基础

表 3.1  合法的日期时间型数据日期时间型数据 意义

{^2005-01-01} 2005 年 1月 1日上午 0点 0分 0秒{^2005-01-01 00:6:10a}

2005 年 1月 1日上午 0点 6分 10 秒

{^2005-01-01 00:6:10am}

2005 年 1月 1日上午 0点 6分 10 秒

{^1995-10-22 09:16:52PM}

1995 年 10 月 22 日下午 9点 16 分 52秒

{^1995-10-22 21:16:52}

1995 年 10 月 22 日下午 9点 16 分 52秒

Page 6: 第三章  Visual FoxPro 语言基础

6 、货币型  货币型数据的范围是 -922337203685477.5808 ~ 922337203685477.5807 ,可精确到小数点后四位。所以,给货币型变量赋的值如果小数位数超过 4位, Visual FoxPro 会在对数据进行处理前自动四舍五入。为了区分货币型数据和数值型数据,货币型数据前要加美元符号“ $”,这是货币型数据的定界符,如 $123.456 、 $-123.45678 等,但 $-123.45678 在进行处理前会自动四舍五入,变为 $-123.4568 。

Page 7: 第三章  Visual FoxPro 语言基础

综上所述,在程序设计中, Visual FoxPro的数据类型如表 3.2 所示

表 3.2  程序设计中的数据类型数据类型 类型标识字符型 C,表示“ Character”数值型 N,表示“ Numeric”逻辑型 L,表示“ Logical”日期型 D,表示“ Date”

日期时间型 T,表示“ DateTime”货币型 Y,表示“ Currency”

Page 8: 第三章  Visual FoxPro 语言基础

3.1.2  常量  常量( Constant )是一个不变的值 .按数据类型区分,可分为字符型、数值型、逻辑型、日期型、日期时间型和货币型。1、字符型常量  字符型常量也称为字符串,需要注意的是:

Page 9: 第三章  Visual FoxPro 语言基础

字符串中的字母,大小写并不等价,如 "ABC" 并不等价于 "abc" 。不包含任何字符的字符串 "" 称为空串,它 的 长 度 为 0 , 与 包 含 空 格 的 字 符串 " " 不同。定界符必须成对匹配,不能出现一头为单引号而另一头为双引号等情况。如果某种定界符本身也是字符串的内容,则需要用另一种定界符表示该字符串。

Page 10: 第三章  Visual FoxPro 语言基础

表 3.3列出了一些字符串的表示方法

表 3.3  字符型常量表示方法举例

本身的值 表示方法

abc "abc"

"abc"de '"abc"de'

'"abc"de'fg ['"abc"de'fg]

Page 11: 第三章  Visual FoxPro 语言基础

2 、数值型常量  数值型常量也称为常数,由数字、小数点和正负号组成。注意,在程序中,数值型常量的值可以很大,要存储范围更广的数值,需要将字段定义为其他类型。3、逻辑型常量  逻辑型常量只有 .T. 、 .Y. 、 .F. 、 .N. ,实际上只有两个值: .T. 和 .F. 。4、日期型常量  日期型常量的表示方法是 {^yyyy-mm-dd} 。空日期用{}表示。

Page 12: 第三章  Visual FoxPro 语言基础

5 、日期时间型常量  日期时间型常量的表示方式是 {^yyyy-mm-dd [hh[:mm[:ss]] [a|am|p|pm]]} 。 需要注意的是, Visual FoxPro传统的日期和日期时间格式不带“ ^”,在日期型或日期时间型常量前加“ ^”是 Visual FoxPro 6.0 以后规定的严格日期格式,并且是默认设置。

6、货币型常量  货币型常量前要加美元符号“ $”,不再赘述。

Page 13: 第三章  Visual FoxPro 语言基础

3.1.3  变量  变量是程序的基本单元。在 Visual FoxPro中,变量分为内存变量、数组变量、系统变量、字段变量和对象变量 5种。本章介绍前三种变量。

1、内存变量  在很多情况下,内存变量可简称变量,它是由用户或程序员定义的内存中的一个或一组存储单元,由变量名进行标识,并通过变量名来读写。

Page 14: 第三章  Visual FoxPro 语言基础

例如,在“命令”窗口中可以输入以下两条命令:     STORE "张莉 " TO sname     age = 20 在输入时注意,命令要逐个输入,并且以回车结束。  赋值运算符在一条命令中只能为一个变量赋值,而 STORE命令可以在一条命令中给多个变量赋值,例如:   STORE "张莉 " TO sname1, sname2  怎样输出内存变量呢?  要输出内存变量,可以使用“ ?” 或“ ??” 命令,语法格式为:   ?|?? <表达式 1> [AT < 显示列位置 >] 其中,“ ?”命令表示输出结果后回车换行,“ ??” 命令表示输出结果后不回车换行,“ AT < 显示列位置 >”指定从第几列开始显示。

Page 15: 第三章  Visual FoxPro 语言基础

Visual FoxPro 默认数值型数据的整数部分占 10 列。屏幕左边的第一列的列号是第 0 列,默认是从第 0 列开始显示;当用一条“ ?” 命令显示多个变量值时,各值以逗号分隔。

图 3.2 “ ?”和“ ??”命令的使用

例如,如果我们要显示上面已经定义了的例如,如果我们要显示上面已经定义了的 snamesname 和和 ageage变量,一些例子如图变量,一些例子如图 3.23.2 所示。所示。

Page 16: 第三章  Visual FoxPro 语言基础

2 、数组变量  数组是一组对象的集合。 Visual FoxPro允许定义一维和二维数组,创建数组的命令格式为:DIMENSION 数组名 1( 行数 1 [, 列数1 ])[, 数组名 2(行数 2 [, n列数 2])] ...或者:DECLARE 数组名 1(行数 1 [, 列数1 ])[, 数组名 2(行数 2 [, n列数 2])] ...可以看出, DIMENSION 命令和 DECLARE命令的格式完全相同,它们的功能也一样。在两条命令中,如果省略数组的列数,则数组为一维数组。

Page 17: 第三章  Visual FoxPro 语言基础

图 3.3  数组的使用

数组的定义和使用的例子如图数组的定义和使用的例子如图 3.33.3 所示。所示。

Page 18: 第三章  Visual FoxPro 语言基础

注意 :Visual FoxPro 中的数组的下标从1 开始,例如,在定义了数组 B ( 2,3 )之后,下面的语句是错误的: B(0,1) = 10 &&行下标应该从 1开始  B(1,0) = 10 && 列下标也应该从 1开始

Page 19: 第三章  Visual FoxPro 语言基础

3 、系统变量   Visual FoxPro 提供了很多事先定义好的变量,称为系统变量。例如, Visual FoxPro 用系统变量“ _DIARYDATE”存储当前日期,我们可以显示并修改它。假设当前日期是 2003 年 8 月 12日,如图 3.4 所示,可以将 _DIARYDATE 修改为 2005 年 10 月 1日。

Page 20: 第三章  Visual FoxPro 语言基础

3.4  使用 _DIARYDATE 系统变量

Page 21: 第三章  Visual FoxPro 语言基础

然后,在“命令”窗口执行下面的     ACTIVATE WINDOW calendar && 激活“日历 / 日记”窗口 执行后, Visual FoxPro将激活“日历/ 日记”窗口,显示的日期是 2005 年 10月 1日,如图 3.5 所示。

Page 22: 第三章  Visual FoxPro 语言基础

图 3.5  激活“日历 / 日记”窗口

输入并回车

激活“日历 / 日记”窗口

Page 23: 第三章  Visual FoxPro 语言基础

修改 _DIARYDATE 系统变量影响范围有限,只影响 Visual FoxPro 内部的“日历 / 日记”窗口的显示,而不会影响 Windows 的日期设置。例如,如果在“日历 / 日记”窗口中单击“今天”按钮,则 _DIARYDATE变量又被设置回 2003年 8月 12 日,如图 3.6 所示。

图 3.6  将 _DIARYDATE 的值改回当前日期

Page 24: 第三章  Visual FoxPro 语言基础

4 、内存变量的显示 显示内存变量,可以使用“ DISPLAY MEMORY”或“ LIST MEMORY”命令。“DISPLAY MEMORY”命令的格式为:DISPLAY MEMORY[LIKE FileSkeleton][TO PRINTER [PROMPT] |; TO FILE FileName][NOCONSOLE]该命令显示内存变量和数组的名称、类型、内容和状态,也显示有关系统变量、菜单、菜单栏、菜单标题和窗口的信息。各参数的意义如下:

Page 25: 第三章  Visual FoxPro 语言基础

“LIKE FileSkeleton” :只显示匹配 FileSkeleton 的变量和数组的内容, FileSkeleton支持文件名通配符。“TO PRINTER [PROMPT]” :将显示的结果输出到打印机。“ PROMPT” 是在打印前显示一个对话框,可以调整打印机的设置。“ PROMPT”必须放在“ TO PRINTER”之后。“TO FILE FileName” :将显示的结果输出到文件。如果文件已存在,并且“ SET SAFETY” 设置为“ ON” (见本章),系统就会问您是否覆盖文件。“NOCONSOLE”:不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出。

Page 26: 第三章  Visual FoxPro 语言基础

例如,当执行了不带任何参数的:     DISPLAY MEMORY执行后, Visual FoxPro 主窗口如图 3.7 所示。

图 3.7  执行“ DISPLAY MEMORY” 命令时的首屏显示

Page 27: 第三章  Visual FoxPro 语言基础

如果尚未定义内存变量,执行下面的语句:     STORE "Hello" TO a1     STORE "World" TO a2     STORE "Fox" TO b2     CLEAR     DISPLAY MEMORY LIKE a* && 显示所有以字母 A开头的变量信息     DISPLAY MEMORY LIKE ?2 && 显示所有以 2结尾的名称为两个字符的变量信息后,显示的信息如图 3.8 所示。

Page 28: 第三章  Visual FoxPro 语言基础

图 3.8 定义并显示内存变量信息

Page 29: 第三章  Visual FoxPro 语言基础

5 、内存变量的清除 可以用四种命令清除内存变量:  ( 1) CLEAR MEMORY  ( 2) RELEASE 内存变量名表  ( 3) RELEASE ALL [EXTENDED]  ( 4 ) RELEASE ALL [LIKE 通配符 | EXCEPT 通配符 ]  命令命令( 4 )选用“ LIKE”短语清除与通配符相匹配的内存变量,选用“ EXCEPT”短语清除与通配符不相匹配的内存变量。  例如:     RELEASE a1, a2 && 清除内存变量 a1和 a2     RELEASE ALL && 清除所有内存变量     RELEASE ALL LIKE ?2 && 清除所有名称包含两个字符且以 2结尾的内存变量     CLEAR MEMORY && 清除所有内存变量注意,系统变量不会被清除。

Page 30: 第三章  Visual FoxPro 语言基础

3.1.43.1.4    Visual FoxProVisual FoxPro 的名称命名规则的名称命名规则

常量、变量以及我们今后将要学习的自定义函数、过程、数据容器等都需要一个名称,建立这些名称时,必须遵循以下规则:   名称中只能包含字母、下划线“ _” 、数字和汉字。   名称的开头只能是字母、汉字或下划线“ _” ,不能是数字,但表的字段名不能以下划线开头。  例如,下面的名称是合法的:     abc 、 a2b3 、 _sum_of_number 、张三  下面的名称是不合法的:     3abc 、 a-to-z 、 number$one 、  诸如“ CLEAR = 1” 、“ QUIT = 2” 之类的语句虽然没有错误,但应该避免使用系统关键字作为变量名。

Page 31: 第三章  Visual FoxPro 语言基础

3.23.2 运算符和表达式 运算符和表达式3.2.1  运算符运算符是对变量操作的符号用于操作同类型数据 。1、算术运算符  算术运算符也称为数值运算符,用于操作数值型数据。运算符有优先级高低之分,例如,乘除运算的优先级高于加减运算。

Page 32: 第三章  Visual FoxPro 语言基础

按优先级高低排列,算术运算符如表 3.4 所示。

表 3.4 数值运算符

运算符 操作 示例 示例结果

( ) 分组括号,优先级最高 ? (10-5) * 10/5

10

**或 ^ 乘方 ? 10**2 100

*、 / 乘、除 ? 3 * 8/2 12

% 模(取余数) ? 23%5 3

+、 - 加、减 ? a1 + a2 – a3

Page 33: 第三章  Visual FoxPro 语言基础

2 、字符运算符  对字符串的操作有 +、 - 和 $ 等几种,用语连接和比较字符串。

Page 34: 第三章  Visual FoxPro 语言基础

按优先级的顺序排列,字符运算符如表 3.5 所示。表 3.5  字符运算符

运算符 操作 示例 示例结果

+将字符串连接在一起,结果仍然是字符串。

? "Visual" + " FoxPro"

?"Visual" + ' FoxPro'

Visual FoxProVisual FoxPro

-删除运算符左侧字符串尾部的空格后,将两字符串连接起来,结果是字符串。

?"Visual " – "FoxPro"

?"Visual" – " FoxPro"

VisualFoxPro

Visual FoxPro

$查看左串是否包含在右串中,结果是逻辑值。

?"win"$"windows"?"Win"$"windows"

.T.

.F.

Page 35: 第三章  Visual FoxPro 语言基础

3 、日期和日期时间运算符 对日期和日期时间型数据,可以使用的运算符只有“ +”和“ -”两个。日期和日期时间型数据只能和数值型数据相加,对日期型数据来说,数值型数据代表增加的天数,对日期时间型数据来说,数值型数据代表增加的秒数,只取数值型数据的整数部参加运算。例如:     ? {^2005-7-1} + 10 && 结果为“ 07/11/05”,日期型     ?{^2005-7-1 1:0:10} + 10 && 结果为“ 07/01/05 01:00:20 AM”,日期时间型  对于减法来说,减数可以是数值型,表示减去的天数或秒数。例如:     ? {^2005-7-1} – 10 && 结果为“ 06/21/05”,日期型     ?{^2005-7-1 1:0:10} - 10 && 结果为“ 07/01/05 01:00:00 AM”,日期时间型  减数也可以是同类型数据,结果为数值型数据,表示天数或秒数。例如:     ? {^2005-7-1} - {^2004-7-1} && 结果为“ 365” ,数值型,表示天数     ?{^2005-7-1 1:0:10} - {^2005-6-1 1:0:10} && 结果为“ 2592000”,数值型,表示秒数

Page 36: 第三章  Visual FoxPro 语言基础

4 、关系运算符  关系运算符可用于任意数据类型的数据比较,但要求运算符两边的操作数的类型相同。运算结果为逻辑值。

Page 37: 第三章  Visual FoxPro 语言基础

关系运算符如表3.6所示。

表 3.6  关系运算符运算符 操作 示例 示例结果

< 小于?2<3

?2<"3"?3<2

.T.出错,数据类型不匹配

.F.

> 大于 ?2>3 .F.

= 等于 ?"ABC" = "abc" .F.

<>或 !=或 # ?"ABC" != "abc" .T.

<= 小于等于 ? 6<=9 .T.

>= 大于等于 ?"ABC" >= "abc".T.(因为 A的 ASCII码值比 a

大)

== 精确比较 ?"ABC"=="ABC"?"ABC "=="ABC"

.T.

.F.

Page 38: 第三章  Visual FoxPro 语言基础

5 、逻辑运算符  逻辑运算符用于操作逻辑型数据,并返回一个逻辑值。逻辑运算符有逻辑与( AND )、逻辑或( OR)、逻辑非( NOT 或 !),

Page 39: 第三章  Visual FoxPro 语言基础

它们的基本运算规则如表 3.7 ~表 3.9 所示。

表 3.7 AND运算的规则

左操作数 运算 右操作数 结果

.T. AND .T. .T.

.T. AND .F. .F.

.F. AND .T. .F.

.F. AND .F. .F.

Page 40: 第三章  Visual FoxPro 语言基础

表 3.8   OR 运算的规则

表 3.8   OR 运算的规则

左操作数 运算 右操作数 结果

.T. OR .T. .T.

.T. OR .F. .T.

.F. OR .T. .T.

.F. OR .F. .F.

Page 41: 第三章  Visual FoxPro 语言基础

表 3.9   NOT 或 ! 运算的规则

表 3.9   NOT 或 ! 运算的规则

运算 右操作数 结果

NOT .T. .F.

NOT .F. .T.

Page 42: 第三章  Visual FoxPro 语言基础

在三个逻辑运算符中, NOT 的优先级最高,再次是 AND ,而 OR的优先级最低。但括号的优先级比它们都高。例如:? .T. AND .F. && 结果为.F. ? !.F. AND .F. && 结果为.F.,先运算!? NOT .F.=.T. && 结果为.T.,先运算 NOT? (.F. OR .T.) AND NOT .F. && 结果为.T.

Page 43: 第三章  Visual FoxPro 语言基础

3.2.2  表达式 所谓表达式,就是变量、常量、运算符等组合在一起,得到的一个有意义的序列,用来说明一个计算过程。表达式可以更复杂,包含多种运算。例如:  a = 30*2 -5 <100 OR "abc"=="ABC“ 如果非要用复杂的表达式,最好在表达式中多用括号,这样可增加可读性,减少出错的机会。例如,上述表达式可改写为:  a = ((30*2 -5) <100) OR ("abc"=="ABC")

Page 44: 第三章  Visual FoxPro 语言基础

3.2.3  对“命令”窗口的进一步操作 在本节最后,我们学习一下怎样在“命令”窗口中执行多行程序。  首先,在“命令”窗口中选中已经书写的多行命令。选中命令的方法可以用鼠标的方式,如图 3.10 所示,选中区域后松开鼠标。然后按回车键, Visual FoxPro 就会一次执行所选中的多条命令了。

Page 45: 第三章  Visual FoxPro 语言基础

图 3.10  选中“命令”窗口中的多条命令

按住鼠标左键不放

拖动鼠标选中多条命令

Page 46: 第三章  Visual FoxPro 语言基础

执行命令还可以利用快捷菜单。当我们在选中的多条命令上单击鼠标右键时,系统弹出的快捷菜单如图 3.11 所示,然后,执行快捷菜单上的“运行所选区域”命令即可。

图 3.11  “命令”窗口的快捷菜单

在选中的内容上右击鼠标。

Page 47: 第三章  Visual FoxPro 语言基础

从快捷菜单中可以看出,我们可以剪切、复制、粘贴文本。“命令”窗口是一个编辑窗口,所以在编辑命令时可以使用 Visual FoxPro提供的编辑工具。 此外,在菜单和对话框中所作的选择,可以马上转换为“命令”窗口中的命令。例如,单击“文件”菜单下的“新建”选项,就会打开如图 3.12左边所示的“新建”对话框。在此对话框中,选中单选按钮“程序”,然后单击“新建文件”按钮,就会打开一个标题以“程序”开头的窗口,同时,在“命令”窗口中出现了一条命令“ MODIFY COMMAND” ,如图 3.12 右边所示。 “ MODIFY COMMAND”是创建和打开程序文件的命令。

Page 48: 第三章  Visual FoxPro 语言基础

图 3.12  利用菜单命令新建程序文件

Page 49: 第三章  Visual FoxPro 语言基础

3.3  常用的设置命令 在程序设计时,一般通过“设置命令”来改变设置。例如,改变系统默认目录的命令是:     SET DEFAULT TO [路径说明 ]  其中,“路径说明”是可选项,它可以是一个驱动器标识,也可以是带驱动器标识的目录名,也可以是子目录。一些例子如下:

Page 50: 第三章  Visual FoxPro 语言基础

SET DEFAULT TO &&不改变默认路径SET DEFAULT TO C: &&设置 C盘为默认驱动器SET DEFAULT TO C:\ &&设置 C盘的根目录为默认目录SET DEFAULT TO .. && 设置当前目录的上一级目录为默认目录SET DEFAULT TO \bookstore\prg &&设置当前驱动器下的 \bookstore\prg子目录为默认目录SET DEFAULT TO D:\bookstore\prg &&设置 D盘下的 \bookstore\prg子目录为默认目录

Page 51: 第三章  Visual FoxPro 语言基础

获得默认驱动器信息的函数是 SYS( 5 ),获得默认驱动器上当前目录信息的函数是 SYS( 2003 )。例如,可以这样写代码:  ? SYS(5) && 获得默认驱动器信息 ? SYS(2003) && 默认驱动器上当前目录信息 SET DEFAULT TO "C:\program files" ? SYS(5) + SYS(2003) 执行以上代码后,如果打开“选项”对话框,找到“文件位置”页框下的“默认目录”设置,就会发现它已经被设置成“ c:\program files”了。

Page 52: 第三章  Visual FoxPro 语言基础

下面,我们首先以命令设置为核心,介绍几条常用的设置命令,并附带介绍相关函数,然后再以函数为核心,分类介绍一些最常用的函数,并附带介绍相关命令。 1、 SET BELL ON | OFF 和 SET BELL TO [wav声音文件名 ]  “ SET BELL ON|OFF” 是打开或关闭计算机铃声,默认设置是打开( ON )。当到达一个字段的末尾或进入非法数据域时,如果 BELL被设置成“ ON” ,则会响铃,铃声可以通过“ SET BELL TO”设置。例如:  STORE SET('BELL') TO oldbell &&保存原来的

Page 53: 第三章  Visual FoxPro 语言基础

铃声开关设置SET BELL ONSET BELL TO 'C:\WINDOWS\Media\ding.wav' &&设置铃声文件? CHR(7) &&测试铃声SET BELL &oldbell &&恢复原来的铃声开关设置SET BELL TO &&恢复默认的铃声文件其中函数 CHR()的格式为:     CHR(nANSICode)功能是返回数值型参数 nANSICode 对应的字符

Page 54: 第三章  Visual FoxPro 语言基础

2 、 SET TALK ON | OFF 执行拷贝文件命令时,“ TALK” 设置为 ON和 OFF 的差异如图 3.14 所示。图 3.14   SET TALK ON|OFF 命令的效果

图 3.14   SET TALK ON|OFF 命令的效果

Page 55: 第三章  Visual FoxPro 语言基础

3 、 SET CLOCK ON | OFF | STATUS此命令的说明如下:SET CLOCK ON &&在 Visual FoxPro 主窗口

右上方的位置显示时间SET CLOCK STATUS &&在状态栏上显示时间 SET CLOCK OFF && 取消显示时间,是默认设置此命令的效果如图 3.15 所示。

Page 56: 第三章  Visual FoxPro 语言基础

图 3.15  执行“ SET CLOCK ON” 和“ SET CLOCK ON STATUS” 后的效果

Page 57: 第三章  Visual FoxPro 语言基础

4 、 SET SAFETY ON | OFF 在改写已有文件前,确定是否显示提示对话框,默认设置是“ ON”。例如,如果 temp1.prg 文件已经存在,当我们执行“ COPY FILE myprog1.prg TO temp1.prg”时,如果“ SAFETY”的状态是“ ON”,则在覆盖原来的 temp1.prg 文件前,系统会出现如图 3.16 所示的提示对话框;而如果“ SAFETY” 的状态是“ OFF” ,则系统直接进行拷贝操作,将原来的 temp1.prg 文件改写,而不显示提示对话框。

Page 58: 第三章  Visual FoxPro 语言基础

图 3.16 改写文件前的提示信息

Page 59: 第三章  Visual FoxPro 语言基础

5 、 SET DATE [TO] AMERICAN | ANSI | BRITISH | FRENCH | GERMAN| ITALIAN | JAPAN | USA | MDY | DMY | YMD | SHORT | LONG 设置日期表达式和日期时间表达式的显示格式。

Page 60: 第三章  Visual FoxPro 语言基础

其中各项设置的含义如表 3.10 所示。表 3.10   SET DATE命令中各个设置选项的日期格式

AMERICAN(默认设置) mm/dd/yy

ANSI yy.mm.dd

BRITISH/FRENCH dd/mm/yy

GERMAN dd.mm.yy

ITALIAN dd-mm-yy

JAPAN yy/mm/dd

USA mm-dd-yy

MDY mm/dd/yy

DMY dd/mm/yy

YMD yy/mm/dd

SHORT 由Windows控制面板确定的短日期格式

LONG由Windows控制面板确定的长日期格式,Windows中文版一般显示汉语

Page 61: 第三章  Visual FoxPro 语言基础

6 、 SET MARK TO [ 日期分隔符 ] 7 、 SET CENTURY ON | OFF | TO [nCentury [ROLLOVER nYear]]无任何参数的“ SET CENTURY TO” 命令会用当前世纪的值设置世纪值。  假设当前日期是 2003 年 8 月 16 日,一些显示日期的例子如下,显示结果写在命令的注释中。STORE SET('DATE') TO olddateSTORE SET('CENTURY') TO oldcenturySTORE SET('MARK') TO oldmarkSTORE SET('STRICTDATE') TO oldstrictdate &&保存原有设置*********************************SET DATE TO AMERICANSET CENTURY OFFSET MARK TO &&设置日期分隔符为默认符号“ /”    

Page 62: 第三章  Visual FoxPro 语言基础

SET STRICTDATE TO 1 && 以上是 Visual FoxPro 的默认设置? DATE( ) && 显示 08/16/03SET MARK TO "#" && 设置日期分隔符为“ #”? DATE( ) && 显示 08#16#03SET MARK TO && 测试完“ SET MARK” 命令,恢复默认分隔符设置SET DATE TO YMD? DATE( ) && 显示 03/08/16SET CENTURY ON? DATE( ) && 显示 2003/08/16 ,四位年份SET DATE TO ANSI && 以下测试一些“ SET DATE” 命令选项? DATE(2005, 5, 22) && 显示 2005.05.22    

Page 63: 第三章  Visual FoxPro 语言基础

SET DATE TO SHORT? DATE(2005, 5, 22) && 显示 2005-5-22SET DATE TO LONG? DATE(2005, 5, 22) && 显示 2005 年 5月 22 日*********************************SET DATE TO &olddate &&恢复原有设置SET CENTURY TO &oldcenturySET MARK TO &oldmarkSET STRICTDATE TO &oldstricture

Page 64: 第三章  Visual FoxPro 语言基础

8 、 SET SECONDS ON | OFF当 显示日期时间值时,是否显示时间部分的秒,默认设置是“ ON”。例如:SET SECONDS ON? DATETIME( ) & 显示带秒数的日期时间值,例如 08/16/03 04:08:25 PM    SET SECONDS OFF     ? DATETIME( ) && 显示不带秒数的日期时间值,例如 08/16/03 04:08 PM

Page 65: 第三章  Visual FoxPro 语言基础

9 、 SET EXACT ON | OFF  当用等号“ =”比较两个字符串是否相同时,此命令设置不同长度字符串的比较规则,默认设置是“ OFF”。  如果设置为“ ON” ,则比较两个字符串时,在较短一个的右边加上空格,使两者相等,然后再进行比较; 如果设置为“ OFF” ,则右边字符串的每一个字符必须和左边字符串的每一个字符都相等,两个字符串才被认为“相等”。例如:

Page 66: 第三章  Visual FoxPro 语言基础

SET EXACT OFF   ?"abcde" = "abc" && 返回 .T.      ?"abc" = "abcde" && 返回 .F.     ?"abc " = "abc" && 返回 .T.      ?"abc" = "abc " && 返回 .F.    SET EXACT ON     ?"abcde" = "abc" && 返回 .F.  ?"abc" = "abcde" && 返回 .F.    ?"abc " = "abc" && 返回 .T.    ?"abc" = "abc " && 返回 .T.

Page 67: 第三章  Visual FoxPro 语言基础

10 、 SET ESCAPE ON | OFF3.4  常用函数  函数是一种预先编制好的程序代码,用于实现一定的功能,并供别的程序或函数调用。函数的语法格式是: 函数名([参数 1 [ , 参数 2 [ , …]]])3.4.1  数值函数  数值函数用于处理数值型数据,返回值也为数值型。常用的数值函数有 ABS()、 MAX()、 MIN ()、 INT ()、 MOD ()、 ROUND ()、 ISDIGIT ()等。

Page 68: 第三章  Visual FoxPro 语言基础

3.4.13.4.1 数值函数 数值函数

  数值函数用于处理数值型数据,返回值也为数值型。常用的数值函数有 ABS()、 MAX()、 MIN ()、 INT ()、 MOD ()、 ROUND ()、 ISDIGIT ()等。

Page 69: 第三章  Visual FoxPro 语言基础

1 、 ABS ()函数  返回指定数值表达式的绝对值,格式为:    ABS(nExpression) 其中 nExpression 为数值表达式。例如 ?ABS(-45) && 显示 45 ? ABS(20-30) && 显示 102 、 MAX ()函数  返回几个表达式的最大值,格式为:MAX(eExpression1, eExpression2 [, eExpression3 ...]) 其中,返回值可以是字符型、数据型、货币型、日期或日期时间型数据,依据参数类型的不同而不同。例如:    ? MAX(20, 30, 60) && 显示 60    ? MAX('abc', '123') && 显示 abc

Page 70: 第三章  Visual FoxPro 语言基础

3 、 MIN ()函数  返回几个表达式的最小值,格式为:MIN(eExpression1,eExpression2 [,eExpression3 ...]) 其中,返回值也可以是多种类型,依据参数类型的不同而不同。例如:   ? MIN(20, 30, 60) && 显示 20   ? MIN('abc', '123') && 显示 123

Page 71: 第三章  Visual FoxPro 语言基础

4 、 INT ()函数  返回一个数值表达式的整数部分,格式为:     INT(nExpression)返回值是数值型。例如:     ? INT(12.56) && 显示 12     ? INT(-12.56) && 显示 -125 、 MOD ()函数  返回一个数值表达式除以另一个数值表达式的余数,格式为:     MOD(nDivided, nDivisor)

Page 72: 第三章  Visual FoxPro 语言基础

返回值是数值型,被除数 nDivided 的精度决定了返回值的精度。除数表达式为正数,返回值为正数,否则为负数。例如:     ? MOD(12, 5) && 显示 2     ? MOD(12.60, 5) && 显示 2.60     ? MOD(12.6, -5) && 显示 -2.4     ? MOD(-12.6, 5) && 显示 2.4     ? MOD(-12.6, -5) && 显示 -2.6

Page 73: 第三章  Visual FoxPro 语言基础

6 、 ROUND ()函数  返回一个数值表达式的指定小数位的精度值,四舍五入。格式为:   ROUND(nExpression, nDecimalPlaces)返回值是数值型。此函数的显示格式和“ SET DECIMALS” 、“ SET FIXED” 命令设置密切相关。“ SET DECIMALS” 命令的格式为:   SET DECIMALS TO [nDecimalPlaces] 其中, nDecimalPlaces 设置了显示小数的最少位数,值在 0~ 18 之间,默认是两位小数。  “ SET FIXED” 命令的格式为:     SET FIXED ON | OFF

Page 74: 第三章  Visual FoxPro 语言基础

     SET FIXED ON | OFF 如果设置为“ ON” ,则使用“ SET DECIMALS”命令设置的显示小数的位数作为固定位数,显示数值结果;如果设置为“ OFF” ,则根据数据的情况来显示小数,这是默认设置。 下面的语句段演示了不同设置的显示结果。  STORE SET('DECIMALS') TO olddeci  STORE SET('FIXED') TO oldfixed && 保存原来的设置     CLEAR     SET DECIMALS TO 4    

Page 75: 第三章  Visual FoxPro 语言基础

SET FIXED ON && 固定小数位为 4 位? ROUND(1234.1962, 3) && 显示 1234.1960

? ROUND(1234.1962, 2) && 显示 1234.2000

SET FIXED OFF && 不再固定小数位数图 3.19 运行结果

? ROUND(1234.1962, 3) && 显示 1234.196

? ROUND(1234.1962, 2) && 显示 1234.20

Page 76: 第三章  Visual FoxPro 语言基础

SET DECIMALS TO 2

SET FIXED ON && 固定小数位为 2 位? ROUND(1234.1962, 3) && 显示 1234.20

? ROUND(1234.1962, 2) && 显示 1234.20

SET DECIMALS TO &oldeci && 恢复原来的设置SET FIXED &oldfixed  程序运行结果如图 3.19 所示。这里,我们没有必要追究 Visual FoxPro 显示数据的非常细节的问题,因为可以结合数据类型转换函数,自己精确定义数据的显示格式。

Page 77: 第三章  Visual FoxPro 语言基础

图 3.19  运行结果

Page 78: 第三章  Visual FoxPro 语言基础

7 、 SQRT ()函数  返回一个数值表达式的平方根,格式为:     SQRT(nExpression) 返回值是数值型,表达式 nExpression当然不能为负数。返回值的精度由“ SET DECIMALS”命令设置。例如:

Page 79: 第三章  Visual FoxPro 语言基础

SET DECIMALS TO 2

? SQRT(3) && 显示 1.73

SET DECIMALS TO 4

? SQRT(3) && 显示 1.7321

8 、 RAND ()函数  返回一个 0~ 1 之间的随机数,格式为: RAND([nSeedValue]) 返回值是数值型, nSeedValue 是“种子”,用于产生随机数,缺省值为 0 。例如:? RAND( )

Page 80: 第三章  Visual FoxPro 语言基础

9 、 ISDIGIT ()函数  格式为:     ISDIGIT(cExpression) 确定字符串表达式 cExpression最左边的字符是否是数字,返回值是逻辑型,例如:? ISDIGIT('123' ) && 返回 .T.  

Page 81: 第三章  Visual FoxPro 语言基础

另外还有一些数值串函数比较常用,为节省篇幅,简要列在表 3.11 中。

表 3.11  另一些比较常用的数值函数函数格式 说明PI () 返回圆周率( 3.1415926 )

CEILING ( nExpression ) 返回大于或等于 nExpression 的最小整数,返回数值型

FLOOR ( nExpression ) 返回小于或等于 nExpression 的最大整数,返回数值型

SIGN ( nExpression ) 返回指定 nExpression 的符号。当 nExpression 为正、负和零时,分别返回 1 、 -1 和 0 ,返回值是数值型

EXP ( nExpression ) 返回 enEpression ,其中 e = 2.71828 ,返回数值型

LOG ( nExpression ) 返回 nExpresion 的自然对数值,数值型

LOG10 ( nExpression ) 返回 nExpresion 的以 10 为底的对数值,数值型

Page 82: 第三章  Visual FoxPro 语言基础

3.4.2  字符串函数   字符串函数用于字符型数据,常用的函数有 LEN ()、 ALLTRIM()、 TRIM()、 AT()、 SUBSTR()、 LEFT ()、 RIGHT ()、SPACE()、 UPPER()、 LOWER()等。

Page 83: 第三章  Visual FoxPro 语言基础

1 、 LEN ()函数  返回字符串表达式的长度,格式为:LEN(cExpression)返回值是数值型,例如:? LEN("abcde") && 显示 5mystring = " Visual " && “Visual” 前面有两个空格,后面有一个空格? LEN(mystring) && 显示 9? LEN(mystring + "FoxPro") && 显示 15

Page 84: 第三章  Visual FoxPro 语言基础

2 、 ALLTRIM()函数  返回删除前导和后缀空格的字符串,格式为:     ALLTRIM(cExpression)返回值是字符型,例如:mystring = ALLTRIM(" Visual ")? LEN(mystring) && 显示 63、 TRIM()和 RTRIM()函数  返回删除后缀空格的字符串,格式为:

Page 85: 第三章  Visual FoxPro 语言基础

TRIM(cExpression)返回值是字符型, RTRIM()函数的格式和功能和 TRIM()函数一样。例如:mystring = TRIM(" Visual ") && “Visual” 前边有两个空格? LEN(mystring) && 显示 84、 LTRIM()函数  返回删除前导空格的字符串,格式为:     LTRIM(cExpression)返回值是字符型。

Page 86: 第三章  Visual FoxPro 语言基础

5 、 AT ()和 ATC ()函数  格式为:AT(cSearchExpression, cExpressionSearched [, nOccurrence]) 其中, cSearchExpression 是要搜索的字符串(“子串”), cExpressionSearched 是要被搜索的字符串(“母串”), nOccurrence 定义第几次出现,默认值是 1。此函数的功能是搜索子串在母串中第几次出现的位置。如果返回值是 0,表示在母串中并没有适合条件的子串。例如:

Page 87: 第三章  Visual FoxPro 语言基础

  gcFindString = "巴西巴拉圭是南美国家 "? AT("巴 ", gcFindString) && 显示 1 ,字符串的第一个位置序号是 1

? AT("巴 ", gcFindString, 2) && 显示 5 ,因为中文字符占两个字节? AT("巴 ", gcFindString, 3) && 显示 0

 注意: AT ()函数区分搜索字符串的大小写。如果不区别搜索字符的大小写,可以使用 ATC ()函数,它的格式和 AT ()函数一致。例如:gcFindString = "Visual FoxPro"? AT("FOX", gcFindString) && 显示 0

? ATC("FOX", gcFindString) && 显示 8

Page 88: 第三章  Visual FoxPro 语言基础

6 、 SUBSTR ()函数  取得一个字符串的一部分,格式为: SUBSTR(cExpression, nStartPosition[, nCharactersReturned]) 其中, cExpression 是要从中取出子串的字符串或备注字段(“母串”), nStartPosition 是子串的起始位置, nCharactersReturned是取出子串的长度,缺省时返回从起始位置到终止位置的全部字符。例如: gcFindString = "Microsoft_Windows"? SUBSTR(gcFindString, 6) && 显示 soft_Windows

? SUBSTR(gcFindString, 6, 4) && 显示 soft

Page 89: 第三章  Visual FoxPro 语言基础

7 、 LEFT ()函数  格式为:LEFT(cExpression, nExpression)该函数返回值是字符型,返回 cExpression左边nExpression 个字符,例如:gcFindString = "Microsoft_Windows"? LEFT(gcFindString, 5) && 显示 Micro

Page 90: 第三章  Visual FoxPro 语言基础

8 、 RIGHT ()函数  格式为:RIGHT(cExpression, nExpression)该函数返回值是字符型,返回 cExpression右边 nExpression 个字符,例如:gcFindString = "Microsoft_Windows"? RIGHT(gcFindString, 5) && 显示 ndows

Page 91: 第三章  Visual FoxPro 语言基础

9、 SPACE ()函数  格式为:     SPACE(nSpaces)该函数返回由 nSpaces 指定空格数目的字符串,例如:? '[' + SPACE(2) + ']' && 显示 [ ] ,方括号中包含两个空格10 、 UPPER ()函数  格式为:     UPPER(cExpression)该函数返回大写字符串,但只对 cExpression 中的小写字母 a~ z进行处理,例如:? UPPER("FoxPro 7.0") && 显示 FOXPRO 7.0

Page 92: 第三章  Visual FoxPro 语言基础

11 、 LOWER()函数  格式为:     LOWER(cExpression) 该函数返回小写字符串,但只对 cExpression中的大写字母 A~ Z进行处理,例如:? LOWER("FoxPro 7.0") && 显示 foxpro 7.0  另外还有一些较常用的字符串函数,为节省篇幅,简要列在表 3.12 中。

Page 93: 第三章  Visual FoxPro 语言基础

表 3.12  另一些比较常用的字符串函数函数格式 说明

ISALPHA(cExpression) 测试 cExpression最左边的字符是否是字母,返回逻辑值

ISUPPER(cExpression) 测试 cExpression最左边的字符是否是大写字母,返回逻辑值

ISLOWER(cExpression) 测试 cExpression最左边的字符是否是小写字母,返回逻辑值

REPLICATE(cExpression, nTimes) 复制 nTimes次 cExpression ,返回字符串OCCURS(cSearchExpression, cExpr

essionSearched)返回第一个字符串在第二个字符串中出现的次数,返回数值

STUFF(cExpression, n起始替换位置 ,

n替换的字符数量 , cReplacement)

用 cReplacement去替换 cExpression 中由 n起始替换位置和 n替换的字符数量指明的一个子串,返回字符串

LIKE(cExpression1, cExpression2) 比较两个字符串表达式是否匹配,可以用通配符 *和 ? ,返回逻辑值

CHRTRAN(cSearched, cSearch, cReplacement)

将 cSearched 字符串中所有 cSearch 字符串,替换为cReplacement ,返回字符串

Page 94: 第三章  Visual FoxPro 语言基础

3.4.3  日期 /时间函数  日期 / 时间函数用于处理日期、日期时间数据,除了 DATE()和 DATETIME()外,常用的函数还有 DAY()、 MONTH()、 YEAR()、 DOW()、 TIME()等。1、 DAY ()函数  格式为:     DAY(dExpression | tExpression)该函数的参数是日期或日期时间型表达式,返回数值型数据,是该日期或日期时间在月份中的日期号,例如:? DAY({^2006-10-20}) && 显示 20

Page 95: 第三章  Visual FoxPro 语言基础

2 、 MONTH()函数  格式为:     MONTH(dExpression | tExpression)该函数返回日期或日期时间表达式的月份号,例如:? MONTH({^2006-10-20}) && 显示 203 、 YEAR()函数  格式为:     YEAR(dExpression | tExpression)该函数返回日期或日期时间表达式的年份号,返回值总是四位数年份,“ SET CENTURY” 设置并不影响它的返回值。例如:? YEAR({^2006-10-20}) && 显示 2006

Page 96: 第三章  Visual FoxPro 语言基础

4 、 DOW()函数  格式为:DOW(dExpression | tExpression [, nFirstDayOfWeek ]) 该函数返回日期或日期时间表达式在一周中是第几天, nFirstDayOfWeek定义哪一天算一周的第一天,默认是 1 ,表示星期天是第一天。例如:? DOW({^2006-10-20}) && 显示 6 ,说明当天是星期五? DOW({^2006-10-20}, 2) && 定义星期一为一周的第一天,显示 5

Page 97: 第三章  Visual FoxPro 语言基础

5 、 TIME()函数  格式为:     TIME([nExpression])该函数是以 24 小时制、 8 位字符串格式( hh:mm:ss )返回当前系统时间,如果定义了 nExpression ,则显示时间精度到 1/100 秒。 nExpression 可以是任意数值,例如:? TIME( ) && 显示当前时间,如 11:38:33 ? TIME(1) && 显示当前时间,如 11:38:34.81  由于 Windows操作系统本身难以达到 1/100 秒的计时精度,所以时间显示过于精确在很多情况下没什么意义。

Page 98: 第三章  Visual FoxPro 语言基础

另外一些比较常用的日期 / 时间函数如表 3.13所示。

表 3.13  另一些比较常用的日期 /时间函数

函数格式 说明

CMONTH(dExpression | tExpression) 返回英文月份名,如 CMONTH({^2001-8-8}) 返回 August

CDOW(dExpression | tExpression) 返回英文星期号,如 CDOW({^2001-8-8}) 返回 Wednesday

HOUR(tExpression) 以 24小时格式为依据,返回日期时间型数据的小时值

MINUTE(tExpression) 返回日期时间型数据的分钟值SEC(tExpression) 返回日期时间型数据的秒数值

SECONDS( )返回自午夜以来经过的秒数,如果在 Windows95 、 Windows98 、 Windows XP 上运行,精度为 1毫秒;如果在 Windows NT 或 Windows2000 上运行,精度为 10毫秒

WEEK(dExpression | tExpression [, nFirstWeek] [, nFirstDayOfWeek])

返回日期或日期时间型表达式在一年中的星期号。如 WEEK({^2001-8-8}) 返回 32

Page 99: 第三章  Visual FoxPro 语言基础

3.4.4  数据类型转换函数  数据类型转换函数用于在数据在各种数据类型之间的转换,例如 CHR()函数就是一个数据类型转换函数,它以数值型数据为参数,返回相应的 ASCII码字符。常用的函数还有 ASC ()、 VAL ()、 DTOC()、 TTOC ()、 CTOD ()、 CTOT ()、 MTON ()、 NTOM()、 STR()、 &等。

Page 100: 第三章  Visual FoxPro 语言基础

1 、 ASC ()函数  格式为:     ASC(cExpression)  该函数返回字符串表达式最左边的字符的 ASCII码值,它可以看成和 CHR()对应的函数。例如:? ASC("FoxPro") && 显示 F的 ASCII码值 702 、 VAL ()函数  格式为:     VAL(cExpression)  该函数返回字符串表达式的数字值,直到遇到非数值型字符为止(忽略前面的空格),若 cExpression 的第一个字符不是数字,也不是正负号,则函数返回 0 。例如:

Page 101: 第三章  Visual FoxPro 语言基础

SET DECIMALS TO 2? VAL("25") + VAL("10") && 显示 35.00? VAL("a35") && 显示 0.003 、 DTOC ()和 TTOC ()函数  格式为:DTOC(dExpression | tExpression [, 1])    TTOC(tExpression [, 1 | 2])

Page 102: 第三章  Visual FoxPro 语言基础

功能是将日期或日期时间型表达式转换为字符型数据返回,参数“ 1” 用于指定以年月日顺序且无分隔符的形式,返回字符型数据;参数“ 2”用于指定仅返回含时间部分的字符型数据。例如:SET STRICTDATE TO 1SET MARK TOSET CENTURY ONSET DATE TO AMERICAN? DTOC({^1998-10-7}) && 显示 10/07/1998?DTOC({^1998-10-7}, 1) && 显示 19981007  ?TTOC({^1998-10-7 9:25:35}) && 显示 10/07/1998 09:25:35 AM? TTOC({^1998-10-7 9:25:35}, 1) && 显示 19981007092535? TTOC({^1998-10-7 9:25:35}, 2) && 显示 09:25:35 AM

Page 103: 第三章  Visual FoxPro 语言基础

4 、 CTOD ()和 CTOT ()函数  格式为:     CTOD(cExpression)     CTOT(cExpression)  功能是将字符型表达式转换为日期或日期时间型数据返回,例如:SET STRICTDATE TO 1SET CENTURY OFFSET MARK TOSET DATE TO AMERICAN? CTOD(“7/4/1976”) && 显示 07/04/76?CTOT(“7/4/1976 12:12:12”) && 显示 07/04/76

12:12:12 PM

Page 104: 第三章  Visual FoxPro 语言基础

5 、 MTON ()和 NTOM()函数  格式为:     MTON(mExpression)     NTOM(nExpression)  功能是将货币型数据转化为数值型数据,或者相反。例如:mymoney = $12.5 && mymoney 是货币型变量my_money = MTON(mymoney) && my_money 是数值型变量your_money = NTOM(my_money) && your_money 是货币型变量

Page 105: 第三章  Visual FoxPro 语言基础

6 、 STR()函数   STR()函数的功能是将数值表达式的值转换为对应的字符串,格式为:STR(nExpression [, nLength [, nDecimalPlaces]])其中, nLength指定返回的字符串长度,缺省是 10 ,该长度包含小数点所占的字符和小数点后面数字的位数。如果指定长度大于数值宽度, STR()用前导空格填充,如果指定长度小于数值宽度, STR()返回一串星号,表示溢出。 nDecimalPlaces 用于指定返回字符串中的小数位数,缺省是 0 。如果指定的小数位数小于数值表达式 nExpression 中的小数位数,则截去多余的数字。例如:

Page 106: 第三章  Visual FoxPro 语言基础

CLEAR? STR(103.1416) && 默认宽度是 10 ,没有指定小数位数? STR(103.1416, 2) && 宽度是 2 ,没有指定小数位数? STR(103.1416, 4) && 宽度是 4 ,没有指定小数位数

图 3.20  运行结果 ? STR(103.1416, 5, 2)     * 因整数部分和小数点共占 4 位,所以小数部分只能占 1位? STR(103.1416, 6, 2)  

Page 107: 第三章  Visual FoxPro 语言基础

? STR(103.1416, 10, 2)? STR(103.1416, 10, 3)? STR(103.1416, 10, 4)  程序显示结果如图 3.20 所示。

图 3.20  运行结果

Page 108: 第三章  Visual FoxPro 语言基础

7 、宏替换函数  格式为:     & VarName[.cExpression] 它的功能是替换出字符型变量 VarName 中的内容,即: &的值是变量 VarName 中的字符串。句点分隔符和 cExpression选项用于在宏后面增加额外的字符,一般不用。  宏替换对于替换命令中的关键字很有用。例如:STORE SET('ESCAPE') TO oldescapeSET ESCAPE OFF     *……其他代码段……SET ESCAPE &oldescape &&恢复原有设置

Page 109: 第三章  Visual FoxPro 语言基础

3.4.5  其他常用函数  其他类型的函数,如 BETWEEN ()、 ISNULL()、 EMPTY ()、 INKEY ()、 TYPE()、 VARTYPE()、 IIF ()、 MESSAGEBOX()等,也很常用。1、 BETWEEN ()函数  格式为:BETWEEN(eTestValue, eLowValue, eHighValue)   BETWEEN ()函数用于判断 eTestValue 的值是否在另外两个相同数据类型的表达式 eLowValue 和 eHighValue 的值之间,返回值是逻辑型数据。

Page 110: 第三章  Visual FoxPro 语言基础

如果 eLowValue 或 eHighValue 为空值( NULL ),则函数返回空值 .NULL. 。例如:? BETWEEN(3, 14, 15) && 返回 .F.? BETWEEN('A', 'a', 'Z') && 返回 .T.? BETWEEN('A', 'a', NULL) && 返回 .NULL.2 、 ISNULL ()函数  格式为:     ISNULL(eExpression)

Page 111: 第三章  Visual FoxPro 语言基础

用于判断表达式 eExpression 的结果是否为空值。若是 NULL 值,则返回逻辑真 .T. ,否则返回逻辑假 .F. 。例如:STORE .NULL. TO x? x, ISNULL(x) && 返回 .NULL. .T. 3 、 EMPTY ()函数  格式为:     EMPTY(eExpression)用于判断表达式 eExpression 的结果是否为“空值”。若是,则返回逻辑真 .T.,否则返回逻辑假 .F.。  注意,这里的“空值”( EMPTY )和空值( .NULL. )是两个概念,它们的英语不同,而汉语翻译恰好相同。

Page 112: 第三章  Visual FoxPro 语言基础

EMPTY ()函数认为的“空值”如表 3.14 所示。

表 3.14   EMPTY ()函数的“空值”规定数据类型 “空值”

字符型 空串,空格,制表符,回车,换行

数值型 0

日期型 空(如 CTOD('') )

日期时间型 空(如 CTOT('') )

逻辑型 .F.

货币型 0

Page 113: 第三章  Visual FoxPro 语言基础

例如:STORE .NULL. TO x? EMPTY(x) && 返回 .F. , NULL 值不是“空值”? EMPTY(CHR(13))&& 返回 .T. , CHR(13)是回车符? ISNULL(CTOD('')) && 返回 .F.? EMPTY(CTOD('')) && 返回 .T. ,“空值”和空值不一样

Page 114: 第三章  Visual FoxPro 语言基础

4 、 INKEY ()函数  格式为:     INKEY([nSeconds] [, cHideCursor])函数功能是返回一个键码值,该值是在键盘缓冲区中第一个按键值。其中, nSeconds 是 INKEY ()函数对按键的等待时间,单位是秒,如果为0,表示函数一直等待直到用户击键为止; cHideCursor 用于显示或隐藏光标,或检查鼠标击键。如果要显示光标,在 cHideCursor 中要包含字符 S,这是默认设置;如果要隐藏光标,在 cHideCursor中要包含字符 H。

Page 115: 第三章  Visual FoxPro 语言基础

如果在规定时间内没有按键,则 INKEY ()函数返回 0 ,否则返回按下的键值。例如:? INKEY(0) && 一直等待击键,同时闪烁光标。若按下空格键,则显示 32? INKEY(20) && 等待击键 20 秒,若在 20 秒内按下空格键,则显示 32? INKEY(20, "H") && 等待击键 20 秒,不闪烁光标

Page 116: 第三章  Visual FoxPro 语言基础

5 、 TYPE()函数  格式为:     TYPE(cExpression)返回表达式的值的类型,其中,表达式必须用引号括起来,否则返回“ U” (未定义类型)或出错。例如:? TYPE("21+3 * 5") && 显示 N? TYPE("DATE( )") && 显示 D? TYPE("21 % 3 == 0") && 显示 L

Page 117: 第三章  Visual FoxPro 语言基础

6 、 VARTYPE()函数  格式为: VARTYPE(eExpression [, lNullDataType ])返回表达式的值的类型,返回值为字符型。 VARTYPE()类似于 TYPE()函数,但 VARTYPE()函数更快,而且表达式 eExpression外面不需要引号。   lNullDataType 用于指定当 eExpression 包含 .NULL.值时, VARTYPE()是否返回它的数据类型。如果 lNullDataType 为 .T. ,则函数返回 eExpression 的数据类型;如果 lNullDataType 为 .F. (这是默认设置),则函数返回“ X”,表明 eExpression 中包含 .NULL. 值。例如:? VARTYPE(.NOT. .NULL. , .T.) && 显示 L

Page 118: 第三章  Visual FoxPro 语言基础

7 、 IIF ()函数  格式为:IIF(lExpression, eExpression1, eExpression2)其中, lExpression 是逻辑表达式, eExpression1和 eExpression2 是两个同类型的表达式。当 lExpression 的值为真时,函数返回 eExpression1 ,否则返回 eExpression2 。例如:? IIF(21%3 == 0, ' 能整除 ',' 不能整除 ')? IIF(21%4 == 0, ' 能整除 ',' 不能整除 ')

Page 119: 第三章  Visual FoxPro 语言基础

8 、 MESSAGEBOX()函数  此函数在显示提示信息、调试程序时经常用到,它的功能是显示一个对话框,格式为:MESSAGEBOX(cMessageText [, nDialogBoxType [, cTitleBarText]])其中,字符表达式 cMessageText指定在对话框中显示的文本,如果要显示多行,要在文本中包含 CHR ( 13 )字符(表示回车); nDialogBoxType 是对话框类型,用数值表示; cTitleBarText 是对话框标题,默认是“ Microsoft Visual FoxPro” 。例如: ? MESSAGEBOX(" 这是对话框 "+ CHR(13) + " 中的文字 ", 16, " 这是标题 ")的运行结果如图 3.21 所示。

Page 120: 第三章  Visual FoxPro 语言基础

图 3.21 运行结果

标题

按钮

图标

显示文本

Page 121: 第三章  Visual FoxPro 语言基础

在图 3.21 中,还画出了用 MESSAGEBOX 显示的对话框的各个部分,它们都可以通过函数的nDialogBoxType参数设定,用不同的数值表示不同的图标或按钮,以及打开对话框时的默认按钮。

Page 122: 第三章  Visual FoxPro 语言基础

图标值、按钮值、默认按钮值如表 3.15所示。表 3.15 MESSAGEBOX中的 nDialogBoxType基本值的含义

值 含义 类型

0 仅有“确定”按钮 对话框按钮

1 “确定”和“取消”按钮

2 “终止”、“重试”和“忽略”按钮

3 “ 是”、“否”和“取消”按钮

4 “ 是”、“否”按钮

5 “重试”、“取消”按钮

16 “终止”图标 图标

32 “问号”图标

48 “感叹号”图标

64 “信息”图标

0 第一个按钮 默认按钮设置

256 第二个按钮

512 第三个按钮

Page 123: 第三章  Visual FoxPro 语言基础

MESSAGEBOX()函数的返回值是整数,对应用户按了哪个按钮。返回值和按钮的对应关系如表 3.16 所示。

表 3.16  函数返回值和按钮的对应关系返回值 对应按钮

1 确定2 取消3 放弃4 重试5 忽略6 是7 否

Page 124: 第三章  Visual FoxPro 语言基础

程序可以通过对返回值进行测试,决定下一步的操作。例如:returnvalue = MESSAGEBOX(" 对话框中的文字 ", 1)? IIF(returnvalue == 1, ' 按了“确定”按钮 ', ' 按了“取消”按钮 ')nDialogBoxType 参数的值可以组合使用,图 3.22演示了一些例子。

图 3.22  一些实例 a = MESSAGEBOX(" 是、否、取消按钮和问号图标 ", 3+32)

图 2.1  b = MESSAGEBOX("重试、取消按钮和信息图标,第二个

按钮为默认按钮 ", 5+64+256)

Page 125: 第三章  Visual FoxPro 语言基础

图 3.22  一些实例

a = MESSAGEBOX(" 是、否、取消按钮和问号图标 ", 3+32)

图 2.1  

b = MESSAGEBOX("重试、取消按钮和信息图标,第二个按钮为默认按钮 ", 5+64+256)