Visual FoxPro 系统为屏幕的输入与输出提供了专用的命令,这些命令可以分为两类:一 类是行输入与输出命令, 此类命令通常将命令结果输出到屏幕的当前光标位置或者打印在打印 机的当前位置处;另一类是全屏幕输入与输出命令,这类命令通常使用@符号,可以在屏幕的 指定位置对数据进行编辑、修改和输出。
5.7.1 行输入与输出命令 1.交互式数据输入命令
使用行输入命令可以将输入的数据存储到一个内存变量或数组中。这种命令可以在屏幕 上显示提示信息, 使用户在提示信息的提示下输入相应的数据, 就像计算机与用户进行对话一 样,使用户感觉非常方便。
(1)多字符接收命令。多字符接收命令的格式如下:
ACCEPT "请输入欲查询人员的姓名:" TO XM LOCA FOR 姓名=XM
DISP USE
(2)单字符接收命令。单字符接收命令的格式如下:
WAIT [提示信息] [TO 变量] [WINDOW [NOWAIT]]
[TIMEOUT 数值表达式] [CLEAR]
命令的功能:暂停程序执行,在屏幕上显示“提示信息” ,等待用户键入任意一个字符后 继续执行。
值得一提的是,不选任何参数时该命令可以用于程序调试,在不同结构处用此命令使程 序暂停, 以便观察该段程序运行的情况。 这种分段调试程序方法在程序设计中是常用的一种方 法。该命令还可以用于控制结构的选择执行,这样使得程序既简练又方便。
例 5.32 对例 5.30 加上一个判断询问功能。
WAIT "现在是否要按姓名查询?(Y/ N)" TO CX IF UPPE(CX)='Y'
USE 学生名册
ACCE "请输入查询姓名:" TO XM LOCA FOR 姓名=XM
DISP ENDIF USE
使用 WINDOW 子句可以在屏幕的右上角显示一个小窗口,在这个窗口中显示“提示信 息” ,这时按下任意键或单击鼠标左键可以关闭 WINDOW 窗口并继续执行其下面的程序;
使用 TIMEOUT 子句,会使 WINDOW 窗口在屏幕上保持指定的时间,在 TIMEOUT 子句
中指定一个时间参量,这个时间参量以秒为单位,当指定的时间到达后,显示在屏幕上的 WINDOW 窗口就会自动消失。
例 5.33 清除“学生名册”数据表中“姓名”字段值为空的记录。
WAIT "现在是否要清除姓名为空值的记录?(Y/N)" TO CX IF UPPE(CX)='Y'
USE 学生名册
WAIT "正在进行删除…" WINDOW NOWAIT TIMEOUT 10 DELETE ALL FOR EMPTY(姓名)
PACK
WAIT CLEAR ENDIF
在此例中使用了 NOWAIT 关键字,程序在运行后屏幕的右上角会显示窗口,窗口中显示 出字符串“正在进行删除…” ,同时程序继续进行删除工作,直到执行了 WAIT CLEAR 命令,
显示的窗口消失。 使用了 TIMEOUT 10 短语, 在 10 秒后还没有任何键盘输入动作或鼠标动作 WAIT 窗口就会自动消失。
WAIT 命令中的提示字符串可以是多行排列,这时需要在提示信息中插入回车换行符,之 后显示的“提示信息”就是多行的了。例如:
WAIT "问君能有几多愁" +CHR(13)+"恰似一江春水向东流" WINDOW
(3)多类型数据接收命令。多类型数据接收命令的格式如下:
INPUT "请输入学生的出生日期:" TO ZW LOCA FOR 出生日期= ZW
DISP
A1="08/23/96"
[GET 变量 [PICTURE 模式符] [FUNCTION 功能符]
[RANGE 上限值,下限值] [VALID 条件表达式]]
READ SAVE
功能符必须在模式符之前使用,两者间至少要有一个空格分隔。在 FUNCTION 短语中只能使 用功能符,其前面可以不使用@符号。
(5)RANGE 短语是对接收数据的限制,上限与下限是表示限制的范围,接收给变量的 数据应在此限制之内。
(6)VALID 短语是对输入的数据加以条件限制,与 RANGE 短语的作用相似。
1.模式符
模式符的特点是每个符号仅对输出或输入数据中与其位置相对应的字符起作用,并且是 一一对应地控制。模式符允许连用,使用时必须加定界符。模式符有 12 个,每种模式符代表 的含义如下:
A:只允许字母。
L:只允许逻辑型数据。
N:只允许字母和数字。
X:只允许 ASCII 码字符。
Y:只允许 Y、y、N、n,并将小写的 y、n 转换成大写的 Y、N。
9
:
字符型只允许数字,数值型只允许数字,允许正负号。D:将日期型、字符型和数值型数据按当前的 SET DATE 格式显示。
E
:
将日期型、字符型和数值型数据按英国日期格式编辑。@ 2,5 SAY A PICT "$9999.9"
$ 26.7
? A
26.79 CLEAR
C = CTOD("10/30/96")
@ 2,5 SAY VAL(DTOC(C,1)PICT "9999 年 99 月 99 日"
1996 年 10 月 30 日