第九章 Caché 变量大全 $KEY 变量

文章目录

第九章 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

从命令行,然后检查 k e y , 它 将 不 包 含 读 取 操 作 的 结 果 ; 它 将 包 含 执 行 命 令 行 的 ‘ < r e t u r n > ‘ 字 符 。 要 返 回 读 取 操 作 的 结 果 , 请 在 同 一 命 令 行 中 使 用 ‘ key,它将不包含读取操作的结果;它将包含执行命令行的`<return>`字符。要返回读取操作的结果,请在同一命令行中使用` key<return>使KEY`设置一个局部变量,如下所示:

DHC-APP>READ x:10 SET rkey=$KEY

这将保留由读取操作设置的$key的值。要显示此读取操作值,请发出以下命令行语句之一:

DHC-APP>WRITE $ASCII(rkey)
-1
;空字符串返回-1(超时)
;返回终止符的ASCII十进制值
DHC-APP>ZZDUMP rkey
;为空字符串返回空行(超时)
;返回终止符的十六进制值
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页