第九章 Caché 变量大全 $KEY 变量
包含最近读取的终止符。
大纲
$KEY
$K
描述
$KEY
包含终止当前设备上的最后一个READ
命令的字符或字符序列。 $KEY
和$ZB
在功能上非常相似;请参阅下面的详细比较。
- 如果最后一次读取由于终止符(如
<Return>
键)而终止,则$key
包含终止符。 - 如果上次读取由于超时或固定长度的读取长度限制而终止,则
$key
包含空字符串。未遇到终止符。 - 如果最后一次读取是单字符读取(
READ*a
),并且输入了一个字符,则$KEY
包含实际的输入字符。
$KEY
和$ZB
非常相似,尽管不完全相同。请参阅下面的内容进行比较。
可以使用set
命令为$key
指定值。可以使用ZZDUMP
命令显示$KEY
的值。
在终端会话期间,每个命令行的结尾都记录在$key
中作为回车符(十六进制0D)。此外,$KEY
特殊变量由初始化终端会话的进程初始化为回车符。因此,要在终端会话期间显示由READ
命令或SET
命令设置的$KEY
的值,必须将$KEY
值复制到同一行代码中的局部变量。
示例
在下面的示例中,可变长度读取命令要么从终端接收数据,要么在10秒后超时。如果用户在超时之前输入数据,则$KEY
包含终止数据输入的用户输入回车(十六进制0D
)。但是,如果读取超时,则$key
包含空字符串,表示没有收到终止符。
DHC-APP>READ "Ready or Not: ",x:10
Ready or Not: 10
DHC-APP> ZZDUMP $KEY
0000: 0D
在下面的示例中,固定长度的读取命令要么从终端接收数据,要么在10秒后超时。如果用户输入指定数量的字符(在本例中为一个字符),则用户不必按<Return>
即可结束读取操作。用户可以通过按<Return>
来响应读取提示,而不是输入指定的字符数。
如果读取操作超时,则$KEY
和$ZB
都包含空字符串。如果用户输入一个字符的中间首字母,$key
将包含空字符串,因为定长读取操作在没有终止符的情况下结束。如果用户按<Return>
而不是输入中间的首字母,$key
将包含用户输入的回车。
/// d ##class(PHA.TEST.SpecialVariables).KEY()
ClassMethod KEY()
{
READ "Middle initial: ",z#1:10
IF $ASCII($ZB)=-1 {
WRITE !,"读取超时" }
ELSEIF $ASCII($KEY)=-1 {
WRITE !,"输入了一个字符" }
ELSEIF $ASCII($KEY)=13 {
WRITE !,"输入了行回车符" }
ELSE {
WRITE !,"意想不到的结果" }
}
DHC-APP>d ##class(PHA.TEST.SpecialVariables).KEY()
Middle initial:
读取超时
DHC-APP>d ##class(PHA.TEST.SpecialVariables).KEY()
Middle initial: 1
输入了一个字符
DHC-APP>d ##class(PHA.TEST.SpecialVariables).KEY()
Middle initial:
输入了行回车符
注意
$KEY
和$ZB
的比较
$KEY
和$ZB
都包含终止读取操作的字符。这两个特殊变量相似,但不完全相同。以下是主要区别:
- 可以使用
set
命令设置$key
。无法设置$ZB
。 - 在定长读取成功之后,
$ZB
包含最终字符输入(例如,当5位邮政编码“02138”作为定长读取输入时,$ZB
包含“8”
)。在成功进行定长读取之后,$KEY
包含空字符串(“”
)。 -
$KEY
不支持基于块的读写操作,如磁带I/O。
命令行上的$KEY
从终端命令行交互发出命令时,按<Return>
可发出每个命令行。$KEY
和$ZB
特殊变量记录此命令行终止符。因此,当使用$KEY
或$ZB
返回读取操作的终止状态时,必须将变量设置为同一命令行的一部分。
例如,如果发出以下命令:
DHC-APP>READ x:10
从命令行,然后检查KEY`设置一个局部变量,如下所示:
DHC-APP>READ x:10 SET rkey=$KEY
这将保留由读取操作设置的$key
的值。要显示此读取操作值,请发出以下命令行语句之一:
DHC-APP>WRITE $ASCII(rkey)
-1
;空字符串返回-1(超时)
;返回终止符的ASCII十进制值
DHC-APP>ZZDUMP rkey
;为空字符串返回空行(超时)
;返回终止符的十六进制值
网友评论