ZREMOVE
Synopsis
ZREMOVE:pc lineref1:lineref2 ZR:pc lineref1:lineref2
引数
pc | オプション — 後置条件式 |
lineref1 | オプション — 削除される単一行、または行の範囲の最初の行。lineref1 を省略すると、ZREMOVE はすべての現在のルーチンを削除します。 |
:lineref2 | オプション — 削除される行の範囲の最後の行 |
概要
ZREMOVE コマンドは、現在のルーチンからルーチン行を削除します。ZREMOVE には、以下の 2 つの形式があります。
-
引数なし
-
引数付き
プログラマ・プロンプトから入力したり、XECUTE コマンドで呼び出したりする場合は、ZREMOVE コマンドのみ使用できます。このオペレーションはルーチンの実行に影響を与える可能性があるので、ルーチンの本体にコード化するべきではありません。
ルーチンのローカル・コピーだけが影響を受け、ディスクに保存されたルーチンは影響を受けません。変更されたコードを保存するには、ZSAVE コマンドを使用してルーチンを保存する必要があります。
引数なし
引数なしの ZREMOVE は、現在のルーチン全体を削除します。下記のターミナル・セッションでこの処理を示します。
USER>DO ^myroutine
USER>ZLOAD myroutine
USER>WRITE $ZNAME
myroutine
USER>ZREMOVE
USER>WRITE $ZNAME
USER>
引数付き
引数付きの ZREMOVE は、現在のルーチン内のコード行を削除します。ZREMOVE lineref1 は、指定された行を削除します。ZREMOVE lineref1:lineref2 は、最初の行参照で開始し、2 番目の行参照で終了する行の範囲を削除します。
下記のターミナル・セッションでこの処理を示します。この例では、各行がその行を指定する文字列に変数を設定するダミー・ルーチン (^myroutine) を使用します。
USER>DO ^myroutine
USER>ZLOAD myroutine
USER>PRINT +8
SET x="this is line 8"
USER>ZREMOVE +8
USER>PRINT +8
SET x="this is line 9"
USER>
引数
pc
オプションの後置条件式。Caché は、後置条件式が True (0 以外の数値に評価される) の場合にこのコマンドを実行します。Caché は、後置条件式が False (0 に評価される) の場合はコマンドを実行しません。詳細は、"Caché ObjectScript の使用法" の "コマンド後置条件式" を参照してください。
lineref1
削除する行、あるいは削除する行の範囲の最初の行。以下の形式のいずれかで指定することができます。
+offset | ルーチン内の行番号を指定します。1 から始まる正の整数。 |
label | ルーチン内のラベルを指定します。ZREMOVE は、ラベル行だけを削除します。これには、その行のラベルに続くすべてのコードが含まれます。 |
label+offset | ラベル化されたセクション内で、ラベルとオフセットする行番号を指定します (ラベル行を行 1 としてカウントします)。 |
ラベルは、31 文字よりも長くすることができますが、最初の 31 文字は一意である必要があります。ZREMOVE は、指定された label の最初の 31 文字のみと一致します。ラベル名では大文字と小文字が区別され、Unicode 文字を含めることができます。
lineref1 を使用することで、削除する単一のコード行を指定できます。ルーチンの先頭からのオフセットとして (+lineref1)、または指定したラベルからのオフセットとして (module2+lineref1) コード行を指定します。
-
ZREMOVE +7 : ルーチンの先頭から数えて 7 番目の行を削除します。
-
ZREMOVE +0 : 何も処理を行わず、エラーも生成しません。
-
ZREMOVE +999 : 999 がルーチン内の行数よりも大きい場合は、何も処理を行わず、エラーも生成しません。
-
ZREMOVE Test1 : ラベル行 Test1 を削除します。
-
ZREMOVE Test1+0 : ラベル行 Test1 を削除します。
-
ZREMOVE Test1+1 : ラベル行 Test1 の後の最初の行を削除します。
-
ZREMOVE Test1+999 : ラベル行 Test1 の後の 999 番目の行を削除します。この行は、別のラベル化されたモジュール内にある場合があります。999 がラベル Test1 からルーチンの最後までの行数よりも大きい場合は、何も処理を行わず、エラーも生成しません。
ラベルは、行オフセット内でコード行としてカウントされます。空白行は、行オフセット内でコード行としてカウントされません。コメントは、行オフセット内でコード行としてカウントされませんが、例外が 1 つあります。;; で区切られた単一行のコメントは、行オフセットの目的でコード行としてカウントされます。
lineref2
削除する行の範囲の最後の行。lineref2 は、lineref1 で使用されるいずれかの形式で指定します。必ず、前にコロン (:) を付ける必要があります。
行の範囲は +lineref1:+lineref2 として指定します。ZREMOVE は、行の範囲 (lineref1 および lineref2 を含む) を削除します。lineref1 と lineref2 が同一行を指している場合、ZREMOVE は、その単一行を削除します。
lineref2 がルーチン・コード内で lineref1 よりも先に出現する場合は、何の処理も実行されず、エラーも発生しません。例えば、ZREMOVE +7:+2、ZREMOVE Test1+1:Test1、ZREMOVE Test2:Test1 では、何の処理も実行されません。
例
このコマンドは、現在のルーチン内の 4 番目の行を削除します。
ZREMOVE +4
このコマンドは、ラベル Test 1 の後の 6 番目の行を削除します。
ZREMOVE Test1+6
このコマンドは、現在のルーチンの 3 番目から 10 番目までの行を削除します。
ZREMOVE +3:+10
このコマンドは、現在のルーチン内で、ラベル行 Test1 からその直後の行までを削除します。
ZREMOVE Test1:Test1+1
このコマンドは、現在のルーチン内で、ラベル Test1 からラベル Test2 までのすべての行を両方のラベルを含めて削除します。
ZREMOVE Test1:Test2