第三章  visual foxpro 语言基础

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

Upload: snana

Post on 15-Jan-2016

113 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

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)