1. 程式人生 > 其它 >第九章 Caché 變數大全 $KEY 變數

第九章 Caché 變數大全 $KEY 變數

技術標籤:Caché 變數大全CachéCahcekey系統變數變數

文章目錄

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