$ZB (ObjectScript)
構文
$ZB
概要
$ZB は、READ 処理後の現在の入出力デバイス特有の状況情報を含みます。
-
ターミナル、シーケンシャル・ファイル、または文字ベースの入出力デバイスからの読み込み時、$ZB は読み込み処理の最終文字を含みます。これはターミネータ文字 ([Enter] など) や、読み込み処理がターミネータ文字を必要としない場合は入力の最終文字、ターミネータ文字は必要とされるが受け取られない場合 (例えば読み込み処理のタイムアウト) は、NULL 文字列となります。
-
ブロック型の入出力デバイスからの読み込み時、$ZB は入出力バッファに残るバイト数を含みます。$ZB は、ブロック型の入出力デバイスへの書き込み時の入出力バッファのバイト数も含みます。
この特殊変数は、SET コマンドを使用して変更することはできません。変更を試みると、<SYNTAX> エラーが返されます。
$ZB と $KEY の両方とも、文字ベースのデバイスやファイルからの読み込み時に、READ 終端文字を返すために使用されます。文字ベースの読み込みでは、これらの 2 つの特殊変数は類似していますが、まったく別のものです。ブロック型の読み込みと書き込みでは、$ZB を使用します。$KEY ではブロック型の読み込み処理と書き込み処理がサポートされていないからです。詳細は、"$KEY" を参照してください。
EOF の動作
既定では、InterSystems IRIS はシーケンシャル・ファイルの最後に到達すると、<ENDOFFILE> エラーを発行します。$ZB は設定されません。ファイル終端検出時の $ZB EOF 動作を構成できます。終端検出時、InterSystems IRIS はエラーを発行しませんが、$ZB を "" (NULL 文字列) に、$ZEOF を -1 に設定します。
EOF 処理を設定するには、管理ポータルで、[システム管理]、[構成]、[追加の設定]、[互換性] の順に選択します。SetZEOF の現在の設定を表示して編集します。“true” に設定すると、InterSystems IRIS は、$ZB を "" (NULL 文字列) に、$ZEOF を -1 に設定します。既定値は “false” です。
%SYSTEM.ProcessOpens in a new tab クラスの SetZEOF()Opens in a new tab メソッドを使用して、現在のプロセスでファイルの最後に到達したときの動作を制御できます。システム全体の既定の動作は、Config.MiscellaneousOpens in a new tab クラスの SetZEOFOpens in a new tab プロパティで設定できます。
ターミナル、またはファイルからの読み込み
$ZB は、ターミナル、シーケンシャル・ファイル、または他の文字ベースの入出力デバイスに関連する読み込み処理からの終端文字 (または文字シーケンス) を含みます。$ZB には、以下のいずれかが含まれます。
-
キャリッジ・リターンなどの終端文字
-
エスケープ・シーケンス (16 文字まで)
-
固定長 READx#n 内の n 番目の文字 (この場合、$KEY 特殊変数は NULL 文字列を返します)
-
READ *x の 1 文字
-
READ がタイムアウトになった後の NULL 文字列 ("")
例えば、5 秒のタイムアウトを持つ以下の可変長読み込みを考慮してみましょう。
Zbread
READ !,"Enter number:",num:5
WRITE !, num
WRITE !, $ASCII($ZB)
QUIT
READ プロンプトでユーザが 123 と入力し、<RETURN> ([Enter] キー) を押した場合、num 変数に 123 が保存され、$ZB に <RETURN> (ASCII 10 進コード 13、16 進コード 0D) が保存されます。READ がタイムアウトになった場合、$ZB は NULL 文字列を含み、$ASCII("") は値 -1 を返します。
コマンド行の $ZB
ターミナル・コマンド行から対話的にコマンドを実行するとき、各コマンド行を実行するために <RETURN> ([Enter]) を押します。$ZB と $KEY 特殊変数は、このコマンド行ターミネータ文字を記録します。したがって、$ZB や $KEY を使用して読み込み処理の最終状況を返すには、同じコマンド行の一部として変数を設定しなければなりません。
例えば、コマンド
>READ x:10
をコマンド行から実行する場合、$ZB をチェックします。これには、読み込み処理の結果が含まれません。コマンド行を実行した <RETURN> 文字が含まれます。読み込み処理の結果を返すには、以下のように同じコマンド行で $ZB でローカル変数を設定します。
>READ x:10 SET rzb=$ZB
これにより、読み込み処理で設定された $ZB の値が保持されます。この読み込み処理値を表示するには、以下のコマンド行文のいずれかを実行します。
>WRITE $ASCII(rzb)
; returns -1 for null string (time out),
; returns ASCII decimal value for terminator character
>ZZDUMP rkey
; returns blank line for null string (time out)
; returns hexadecimal value for terminator character