第九章 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
;爲空字符串返回空行(超時)
;返回終止符的十六進制值