概要
ZSAVE コマンドは、現在のルーチンを保存します。ZLOAD を使用してルーチンをロードします。次に、ZSAVE を使用して、ZINSERT コマンドおよび ZREMOVE コマンドでルーチンに加えた変更を保存します。
ターミナルから入力したり、XECUTE コマンドまたは $XECUTE 関数で呼び出したりする場合は、ZSAVE コマンドのみ使用できます。このオペレーションはルーチンの実行に影響を与える可能性があるので、ルーチンの本体にコード化するべきではありません。ルーチン内で ZSAVE を指定すると、コンパイル・エラーが返されます。また、ルーチンから ZSAVE を実行しようとしても、エラーが生成されます。
ZSAVE では、編集ポインタは移動しません。
ZLOAD を使用してルーチンを現在のルーチンとしてロードした場合、以下のように処理されます。
-
ZINSERT や ZREMOVE を使用して現在のルーチンを変更した後、ZSAVE でルーチンを保存した場合:^rINDEX("MyRoutine","INT") グローバルと ^rINDEX("MyRoutine","OBJ") グローバルは最新のタイムスタンプと文字数に更新され、^ROUTINE("MyRoutine",0) グローバルは更新されます。
-
現在のルーチンを変更せずに ZSAVE でルーチンを保存した場合:^rINDEX("MyRoutine","OBJ") グローバルは更新されます。^rINDEX("MyRoutine","INT") グローバルまたは ^ROUTINE("MyRoutine",0) グローバルは変更されません。
詳細は、"INT コードと ^ROUTINE グローバル" を参照してください。
ZSAVE には、以下の 2 つの形式があります。
引数なしの ZSAVE
引数なしの ZSAVE は、現在のルーチンを現在の名前で保存します。これは、ZLOAD で指定した名前か、以前に ZSAVE を使用して保存した名前です。ZSAVE は、ルーチンを現在のネームスペースに保存します。
以下の例では、USER ネームスペースからルーチンをロードし、ルーチンを変更してから、別のネームスペースに変更して ZSAVE を実行します。これらの操作の結果、USER ネームスペースと TESTNAMESPACE ネームスペースの両方に MyRoutine という名前のルーチンが存在するようになります。TESTNAMESPACE の MyRoutine には、挿入されたコード行が含まれます。USER の MyRoutine には、挿入されたコード行は含まれません。
USER>ZLOAD MyRoutine
USER>ZPRINT +1:+4
WRITE "this is line 1",!
WRITE "this is line 2",!
WRITE "this is line 3",!
WRITE "this is line 4",!
USER>ZINSERT " WRITE 123,!":+3
USER>ZPRINT +1:+5
WRITE "this is line 1",!
WRITE "this is line 2",!
WRITE "this is line 3",!
WRITE 123,!
WRITE "this is line 4",!
USER>ZNSPACE "TESTNAMESPACE"
TESTNAMESPACE>ZPRINT +1:+5
WRITE "this is line 1",!
WRITE "this is line 2",!
WRITE "this is line 3",!
WRITE 123,!
WRITE "this is line 4",!
TESTNAMESPACE>ZSAVE
現在のルーチンにまだ名前がない場合、引数なしの ZSAVE は <COMMAND> エラーを生成します。
引数なしの ZSAVE コマンドでは後置条件式を指定することができます。
引数付きの ZSAVE
ZSAVE routine は、現在のルーチンを、指定された routine 名でディスクに保存します。また、指定された routine を現在のルーチンにします。例えば、MyRoutine という名前のルーチンをロードし、変更してから ZSAVE MyNewRoutine を使用して保存した場合、変更が含まれる MyNewRoutine が現在のルーチンになります。MyRoutine という名前のルーチンにはこれらの変更は含まれず、このルーチンは現在のルーチンとしてロードされていません。
ZSAVE routine は、現在のルーチンを現在のネームスペースに保存します。例えば、USER ネームスペースから MyRoutine という名前のルーチンをロードし、別のネームスペースに変更して ZSAVE MyNewRoutine を実行した場合、MyNewRoutine は、USER ネームスペースではなく変更先のネームスペースに保存されます。
XECUTE コマンドを使用して ZSAVE routine を呼び出す場合、システムは、Load フレームを作成して現在のルーチンを保持します。XECUTE コマンドが終了すると、InterSystems IRIS は、この Load フレームを使用して、現在のルーチンとして、XECUTE の前にルーチン名をリストアします。詳細は、以下の例を参照してください。
WRITE "Current routine name",!
WRITE "initial name: ",$ZNAME,!
SET x = "WRITE $ZNAME"
SET y = "ZSAVE mytest"
SET z = "WRITE "" changed to "",$ZNAME,!"
XECUTE x,y,z
WRITE "restored name: ",$ZNAME,!
引数なしの ZLOAD でロードしたルーチンに名前を付けるには、ZSAVE routine を使用します。
ZINSERT コマンドで作成した名前のないルーチンに名前を付けるには、ZSAVE routine を使用します。