Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

ZREMOVE (ObjectScript)

現在のルーチンから 1 行または行の範囲を削除するか、現在のルーチンをアンロードします。

Synopsis

ZREMOVE:pc lineref1:lineref2 ,...
ZR:pc lineref1:lineref2 ,...

引数

引数 説明
pc オプション — 後置条件式
lineref1 オプション — 削除される単一行、または行の範囲の最初の行の位置。リテラル (+5) または変数 (+a) で指定できます。lineref1 を省略すると、ZREMOVE はすべての現在のルーチンを削除します。
:lineref2 オプション — 削除される行範囲の最後の行の位置。

概要

ZREMOVE コマンドは、現在のプロセスの現在ロードされているルーチンを操作します。現在のルーチンをロードするには、ZLOAD を使用します。ZLOAD は、ルーチンの INT コード・バージョンをロードします。INT コードではプリプロセッサ文はカウントされず、含まれることもありません。INT コードでは、ルーチンの MAC バージョンの完全な空白行はカウントされず、含まれることもありません。これは、ソース・コード内であっても、複数行コメント内であっても同じです。ルーチンがロードされると、そのルーチンは、すべてのネームスペースで、現在のプロセスに対して現在ロードされているルーチンになります。したがって、ルーチンのロード元のネームスペースだけではなく任意のネームスペースから、現在ロードされているルーチンの行の挿入または削除、ルーチンの表示、実行、アンロードを実行できます。

ターミナルから入力したり、XECUTE コマンドまたは $XECUTE 関数で呼び出したりする場合は、ZREMOVE コマンドのみ使用できます。ルーチンの本文で ZREMOVE を指定すると、コンパイル・エラーが返されます。また、ルーチンから ZREMOVE を実行しようとしても、エラーが生成されます。

ZREMOVE には、以下の 2 つの形式があります。

  • 引数なしの場合、現在のルーチンをアンロードします。

  • 引数付きの場合、現在のルーチンから ObjectScript ソース・コードの 1 つ以上の行を削除します。

引数なし

引数なしの ZREMOVE は、現在ロードされているルーチンを削除 (アンロード) します。引数なしの ZREMOVE の後に $ZNAME を実行すると、現在のルーチンの名前ではなく空の文字列が返されます。また、ZPRINT で行は表示されません。ルーチンが削除されているため、ZSAVE を使用してルーチンを保存することはできません。保存しようとすると、<COMMAND> エラーが返されます。

下記のターミナル・セッションでこの処理を示します。

USER>ZLOAD myroutine

USER>WRITE $ZNAME
myroutine
USER>ZREMOVE

USER>WRITE $ZNAME

USER>

引数なしの ZREMOVE では後置条件式を指定することができます。

引数付きの ZREMOVE では、現在のルーチンのすべての行を削除できますが、現在のルーチンそのものは削除されません。例えば、ZREMOVE +1:NonexistentLabel を実行すると現在のルーチンの行がすべて削除されますが、ZINSERT を使用して新しい行を挿入し、ZSAVE を使用してルーチンを保存できます。

引数付き

引数付きの ZREMOVE は、現在のルーチン内のコード行を削除します。ZREMOVE lineref1 は、指定された行を削除します。ZREMOVE lineref1:lineref2 は、最初の行参照で開始し、2 番目の行参照で終了する行の範囲を削除します。 編集ポインタは、削除された行の直後に進みます。したがって、ZREMOVE lineref1 に続いて ZINSERT を実行すると、指定した行が置換されます。

ZREMOVE は、ObjectScript ソース・コードの複数の行 (または複数の範囲) を削除できます。そのためには、一連の引数 lineref1 または lineref1:lineref2 をコンマで区切って組み合わせて指定します。指定したコード行またはコード行の範囲はそれぞれ個別の削除操作として指定の順序で削除されます。

ZPRINT を使用して、現在ロードされているルーチンの複数の行を表示できます。DO コマンドを使用して、現在のルーチンを実行できます。

ルーチンのローカル・コピーだけが影響を受け、ディスクに保存されたルーチンは影響を受けません。変更されたコードを保存するには、ZSAVE コマンドを使用してルーチンを保存する必要があります。

下記のターミナル・セッションでこの処理を示します。この例では、各行がその行を指定する文字列に変数を設定するダミー・ルーチン (^myroutine) を使用します。

USER>ZLOAD myroutine

USER>ZPRINT +8
  WRITE "this is line 8",!
USER>ZREMOVE +8

USER>PRINT +8
  WRITE "this is line 9",!
USER>

引数

pc

オプションの後置条件式。InterSystems IRIS は、後置条件式が True (0 以外の数値に評価される) の場合にコマンドを実行します。InterSystems IRIS は、後置条件式が False (0 に評価される) の場合はコマンドを実行しません。詳細は、"ObjectScript の使用法" の "コマンド後置条件式" を参照してください。

lineref1

削除する行、あるいは削除する行の範囲の最初の行。以下の形式のいずれかで指定することができます。

形式 説明
+offset ルーチン内の行番号を指定します。1 から始まる正の整数。
label ルーチン内のラベルを指定します。ZREMOVE label は、ラベル行だけを削除します。これには、その行のラベルに続くすべてのコードが含まれます。
label+offset ラベル化されたセクション内で、ラベルとオフセットする行番号を指定します (ラベル行を行 1 としてカウントします)。

ラベルは、31 文字よりも長くすることができますが、最初の 31 文字は一意である必要があります。ZREMOVE は、指定された label の最初の 31 文字のみと一致します。ラベル名では大文字と小文字が区別され、Unicode 文字を含めることができます。

lineref1 を使用することで、削除する単一のコード行を指定できます。ルーチンの先頭からのオフセットとして (+lineref1)、または指定したラベルからのオフセットとして (label+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 からルーチンの最後までの行数よりも大きい場合は、何も処理を行わず、エラーも生成しません。

INT コード行には、ルーチンの MAC バージョンにあるラベル、コメント、および空白がすべて含まれます。例外として、コンパイラによって削除される、MAC ルーチンのすべて空白の行は表示もカウントもされません。複数行コメント内の空白行も削除されます。MAC コード内のコメント #;##;、および /// は、INT コードには表示されないことがあるため、行数やオフセットに影響が生じる場合があります。詳細は、"MAC コードのルーチンおよびメソッドに使用するコメント" を参照してください。

lineref2

削除する行の範囲の最後の行。lineref2 は、lineref1 で使用されるいずれかの形式で指定します。必ず、前にコロン (:) を付ける必要があります。

行の範囲は +lineref1:+lineref2 として指定します。ZREMOVE は、行の範囲 (lineref1 および lineref2 を含む) を削除します。lineref1lineref2 が同一行を指している場合、ZREMOVE は、その単一行を削除します。

lineref2 がルーチン・コード内で lineref1 よりも先に出現する場合は、何の処理も実行されず、エラーも発生しません。例えば、ZREMOVE +7:+2ZREMOVE Test1+1:Test1ZREMOVE Test2:Test1 では、何の処理も実行されません。

Note:

lineref2 でラベル名を指定する場合は注意が必要です。ラベル名では、大文字と小文字が区別されます。lineref2 に、ルーチンに存在しないラベル名が含まれる場合、ZREMOVE は、ルーチンの lineref1 から最後までの行の範囲を削除します。

このコマンドは、現在のルーチン内の 4 番目の行を削除します。

   ZREMOVE +4

このコマンドは、ラベル Test1 の後にある 6 番目の行を削除します。Test1 が最初の行としてカウントされます。

   ZREMOVE Test1+6

このコマンドは、現在のルーチンの 3 番目から 10 番目までの行を削除します。

   ZREMOVE +3:+10

このコマンドは、現在のルーチン内で、ラベル行 Test1 からその直後の行までを削除します。

   ZREMOVE Test1:Test1+1

このコマンドは、現在のルーチン内で、ラベル Test1 からラベル Test2 までのすべての行を両方のラベルを含めて削除します。

   ZREMOVE Test1:Test2

関連項目

FeedbackOpens in a new tab