Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

ZINSERT

現在のルーチンにコード行を挿入します。

Synopsis

ZINSERT:pc "code":location
ZI:pc "code":location

引数

pc オプション — 後置条件式。
code ObjectScript コードの行。(引用符で囲まれた) 文字列リテラル、または文字列リテラルを含む変数として指定されます。最初の文字は必ず、スペース、もしくはラベル名のいずれかにします。
location オプションZINSERT がコードを挿入する前の行。ラベル名、数値オフセット (+n)、またはラベル名と数値オフセットのいずれかになります。location を省略すると、code は現在の行位置 (編集ポインタ) に挿入されます。

概要

このコマンドにより、ObjectScript のソース・コードの行が現在のルーチンに挿入され、編集ポインタが挿入行の直後に進みます。

ZINSERT "code" は、指定された ObjectScript コード行を、現在のルーチンで現在の編集ポインタの位置に挿入します。

ZINSERT"code":location は、指定されたコード行を現在のルーチンの指定された行 location の後に挿入します。行位置は、ルーチンの開始からの行オフセット番号、ラベル、または指定されたラベルの行オフセット番号として指定できます。

ZINSERT がコード行を挿入した後、この新規のコード行の最後に編集ポインタを再設定します。これは、次の ZINSERT で明示的に location が指定されていなければ、次の ZINSERT は最後に挿入された行の後にコード行を直接配置することを意味しています。

ZINSERT は、ルーチンのローカル・コピーにのみ影響します。ディスク上に保存されているルーチンは変更されません。挿入された行を保存するには、ZSAVE コマンドを使用して、そのルーチンを保存する必要があります。ZINSERT は、行ごとに増分コンパイルを実行します。

ZINSERT コマンドは通常、プログラマ・プロンプトから実行されます。このオペレーションはルーチンの実行に影響を与える可能性があるので、ルーチンの本体にコード化するべきではありません。ルーチンから ZINSERT を呼び出すには、XECUTE コマンドを使用します。

$ZNAME 特殊変数で、現在のルーチンの名前を判別できます。

編集ポインタ

Caution:

ZINSERT で編集ポインタを動かします。

編集ポインタは次のように設定します。

  • ZLOAD で、編集ポインタをルーチンの先頭に設定します。

  • ZINSERT で、編集ポインタを挿入する行の直後に設定します。例えば、ZINSERT " SET x=1":+4 の次に ZINSERT " SET y=2" を指定すると、第 5 行および第 6 行が挿入されます。

  • ZREMOVE で、編集ポインタを削除する行に設定します。例えば、ZREMOVE +4 の次に ZINSERT " SET y=2" を指定すると、第 4 行が削除され、第 4 行は挿入した行で置き換わります。

  • ZPRINT (または PRINT) で、編集ポインタを印刷した行の末尾に設定します。例えば、ZPRINT の次に ZINSERT " SET y=2" を指定すると、行がルーチンの末尾に挿入されます。また、ZPRINT +1:+4 の次に ZINSERT " SET y=2" を指定すると、行が第 5 行として挿入されます。

  • ZSAVE で、編集ポインタをルーチンの末尾に設定します。例えば、ZSAVE myroutine の次に ZINSERT " SET y=2" を指定すると、行がルーチンの末尾に挿入されます。

引数

pc

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

code

ObjectScript コードの行。(引用符で囲まれた) 文字列リテラル、または文字列リテラルを含む変数として指定されます。このコード行には、1 つ以上の ObjectScript コマンド、新規のラベル名、またはラベルと 1 つ以上のコマンドの両方を含めることができます。コードはルーチンに挿入されるので、形式は ObjectScript に従う必要があります。したがって、code 文字列リテラルの最初の文字は空白スペース (標準 ObjectScript インデント)、またはラベルのいずれかでなければなりません。また、引用符で囲む必要もあります。引用符は挿入しているコード行を囲むので、コード内の引用符は二重になります。

location

ZINSERT がコードを挿入する前の行。以下の形式のうちのいずれかをとることができます。

+offset ルーチン先頭からのオフセット行数として、行の位置を特定する正の整数に評価される式。ZINSERT は、コード行を指定した行の直後に挿入します。ルーチンの先頭に行を挿入するには、+0 を指定します。このプラス符号は必須です。+offset を省略した場合、label で特定される行が検索されます。
label 現在のルーチン内の既存の行ラベル。リテラル値である必要があります。変数は、label の指定には使用できません。行ラベルでは、大文字と小文字が区別されます。省略した場合、+offset はルーチンの先頭からカウントされます。
label+offset ラベルと、ラベルが付けられたセクション内の行のカウント・オフセットを指定します。+offset の値を省略、または label+0 を指定すると、Caché はラベル行を検索して、その直後に挿入します。
Note:

ZINSERT は現在のルーチン専用です。その位置に label^routine を指定しようとすると、<SYNTAX> エラーが返されます。

コード行は番号 1 から開始されるので、+1 の位置を指定すると、ルーチンの最初の行の後にコード行が挿入されます。ルーチンの最初、またはラベル付けされたセクションの最初 (既存の最初の行の前) に行を挿入するときは、+0 のオフセットを使用します。例えば、以下のようになります。

   ZINSERT "Altstart SET c=12,d=8":+0

上記の例では、ルーチンの最初にコード行を挿入します。+0 のオフセットを使用することで (または location を省略することで)、別の空の現在ルーチンに行を挿入できます。

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

以下の例では、現在のルーチンの 4 番目の行の後にコード行 SET x=24 が挿入されます。挿入されたこのコード行はラベルで開始されていないため、最初のスペースは必要な行開始文字として含まれる必要があります。

   ZINSERT " SET x=24":+4

以下の例では、現在ロードされているルーチンに、"Checktest" と呼ばれるラベルが含まれていると仮定します。ZINSERT コマンドは、Checktest 内の 6 番目の行の後に新しい行を挿入します (Checktest+6)。新規の行には、"Altcheck" というラベルと SET y=12 というコマンドが含まれます。

   ZINSERT "Altcheck SET y=12":Checktest+6

挿入されたコード行はラベル "Altcheck" で開始するので、引用符の後に最初のスペースは必要ないことに注意してください。

以下の例では、現在のルーチンの 4 行目の後にコード行 SET x=24 WRITE !,"x is set to ",x が挿入されます。挿入されたコード行は引用符で囲まれるので、WRITE コマンド内の引用符は二重になります。

   ZINSERT " SET x=24 WRITE !,""x is set to "",x":+4

メモ

ZINSERT と ZREMOVE

ZREMOVE コマンドを使用して、現在実行中のルーチンから 1 行、または複数のコード行を削除することができます。したがって ZREMOVEZINSERT を使用して、既存のコード行と新規の行を置換することができます。このような操作は、プロセスで現在実行されているルーチンのコピーにのみ影響を与えます。

Note:

ZINSERT は、指定された locationに行を挿入します。ZREMOVE は、指定された位置で行を削除します。例えば、ZINSERT " SET x=1":+4 で行を挿入する場合、この行を削除するには、ZREMOVE +5 を指定する必要があります。

ZINSERT、XECUTE、および $TEXT

XECUTE コマンドは、ルーチンから実行可能なコードの単独の行を定義し、挿入するために使用されます。ZINSERT コマンドを使用して、ルーチンの外部から、実行可能なコードの単独の行を行位置ごとに定義し、挿入することができます。

XECUTE コマンドは、新規のラベルの定義に使用することはできません。したがって、XECUTE はコード行の最初のコマンドの前に、最初の空白スペースを必要としません。ZINSERT コマンドは、新規のラベルの定義に使用できます。したがって、ZINSERT はコマンド行の最初のコマンドの前に、最初の空白スペース (または新規ラベルの名前) を必要とします。

$TEXT 関数を使用して、ルーチンから行位置によりコード行を抽出することができます。$TEXT はテキスト文字列として指定されたコード行をコピーします。これによってその行の実行に影響が及んだり、現在のルーチンからの抽出時に現在の行位置 (編集ポインタ) が変更されることはありません。($TEXT を使用して現在のルーチン以外のルーチンからコードを抽出すると、現在の行位置が変更されます)。$TEXT は、XECUTE コマンドにコード行を提供できます。$TEXTWRITE コマンドにコード行を提供することもできるので、プログラマ・プロンプトにコード行を提供します。

関連項目

FeedbackOpens in a new tab