[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]

15 DCLディクショナリ - O -


ON

コマンド・プロシージャ内で実行されているコマンドまたはプログラムが, エラーを検出した場合,またはCTRL/Yによって割り込まれた場合に, 実行される動作を定義します。コマンド・インタプリタが, エラー・チェックまたはCTRL/Yによる割り込みを行う場合にだけ,実行されます。 省略時の設定では,これらは行われています。 ONコマンドは,コマンド・プロシージャの内部でだけ使用することができます。

フォーマット

     ON  条件  THEN  [$]コマンド 

パラメータ

条件

エラーの重大度レベルまたはCTRL/Yによる割り込みを指定します。 次のいずれかのキーワードを使用します。これらは1文字以上の文字に短縮できます。

WARNING 警告レベルのステータス($SEVERITY = 0)
ERROR エラー・レベルのステータス($SEVERITY = 2)
SEVERE_ERROR エラー・レベルのステータス($SEVERITY = 4)
CONTROL_Y SYS$INPUTでのCTRL/Yの入力

省略時のエラー条件は,ON ERROR THEN EXITです。

コマンド

実行するDCLコマンド行を指定します。 コマンド行の前にドル記号($)を指定することもできます。

エラー条件を条件パラメータとして指定した場合は,指定した重大度レベルのエラー, またはそれ以上のエラーが発生するお,指定された動作が実行されます。

説明

コマンド・プロシージャの実行中,コマンド・インタプリタは, 実行される各コマンドまたはプログラムから返される条件コードをチェックします。 ONコマンドを使用すると, コマンド・インタプリタがチェックの結果に基づいて行うべき手順を確立できます。

システムは,条件コードをグローバル・シンボル$STATUSに入れます。 条件コードの重大度は,$STATUSの下位3ビットで表されます。 この重大度は,グローバル・シンボル$SEVERITYでも表されます。 重大度の値についての詳細は,EXITコマンドの説明を参照してください。

ONコマンドの動作がエラーの重大度を指定する場合,コマンド・インタプリタは, 指定された重大度以上のレベルで,エラーに対するONコマンドの動作を実行します。 たとえば,次のコマンドは,警告,エラー,または重大エラーの発生時に, プロシージャを終了させます。

     $ ON WARNING THEN EXIT 

省略時の動作は,次のとおりです。

     $ ON ERROR THEN EXIT 

つまり,コマンド・インタプリタは,警告の発生時は続行し, エラーまたは重大エラーの発生時はEXITコマンドを実行します。 重大度を指定するONコマンド動作は,一度だけ実行されます。 ONコマンド動作が行われると,省略時のON動作が再設定されます。 省略時のON動作には,例外があります。 GOTOコマンドを使用して現在のコマンド・プロシージャに存在しないラベルを指定すると, コマンド・プロシージャは警告メッセージを出して終了します。

ONコマンドで指定された動作は, コマンドが実行されるコマンド・プロシージャ内だけに適用されます。 したがって,別のプロシージャを呼び出すプロシージャでONコマンドを実行する場合, ONコマンド動作はネストしたプロシージャには適用されません。 どのコマンド・プロシージャ・レベルで実行されるONコマンドも, 別のレベルのプロシージャのエラー状態処理には影響しません。

ONコマンドでエラー・チェックを禁止するには,SET NOONコマンドを使用します。 エラー・チェックを許可するには,SET ONコマンドを使用するか, ONコマンドを入力します。

ONコマンドには,コマンド・プロシージャの実行中に発生する Ctrl/Y割り込み用のアクション・ルーチンを定義する方法も提供されています。 省略時のCtrl/Yの動作では, Ctrl/Yコマンド・レベルでコマンド入力を求めるプロンプトが表示されます。 Ctrl/Yコマンド・レベルは,DCLコマンドを入力できる特殊なコマンド・レベルです。 コマンド・インタプリタ内で実行されるコマンドを入力する場合は, CONTINUEコマンドでプロシージャの実行を再開できます。 コマンド・インタプリタ内で実行されるコマンドの一覧については, 『OpenVMSユーザーズ・マニュアル』を参照してください。

他のDCLコマンドを入力すると,コマンド・インタプリタは,コマンド・レベル0に戻り, コマンドで起動されるイメージを実行します。 終了ハンドラを含むイメージの実行中にコマンド・プロシージャに割り込みをかけると, 新しいコマンド(イメージ)を実行する前に終了ハンドラを実行できます。 ただし,Ctrl/Yを押してコマンド・プロシージャに割り込みをかけてから STOPコマンドを入力すると, 割り込まれたイメージで宣言された終了ハンドラは実行されません。

ONコマンドを使用すると,Ctrl/Y割り込みの省略時の動作を変更できます。 Ctrl/Y動作の省略時の動作を変更した場合,Ctrl/Y割り込みの実行は, 自動的にはCtrl/Y動作の省略時に再設定されません。 Ctrl/Y動作は,次のいずれかが起きるまで有効です。

Ctrl/Y動作は,アクティブなコマンド・レベルごとに指定できます。 現在実行中のコマンド・レベルに指定されたCtrl/Y動作で, 前のレベルに指定された動作が上書きされます。


注意
ON CONTROL_YコマンドおよびSET NOCONTROL=Yコマンドは, 特殊なアプリケーション用のコマンドです。

一般に,Ctrl/Y割り込みは,禁止にしないでください。 たとえば,Ctrl/Y割り込みを禁止にするプロシージャが制御不能ループに入ると, 端末からプロシージャを停止させることができなくなります。


  1. $ ON SEVERE_ERROR THEN CONTINUE
    
    この実行文がコマンド・プロシージャ内で実行された後で,警告,エラー, または重大なエラーが発生した場合には,プロシージャの実行が継続されます。 回復不可能な重大なエラーが発生した結果として,この実行文が1度実行されると, 省略時設定の動作(ON ERROR THEN EXIT)に戻ります。

  2. $ ON ERROR THEN GOTO BYPASS
    $ RUN A
    $ RUN B
       .
       .
       .
    $ EXIT
    $ BYPASS:
    $      RUN C
    
    プログラムA,またはプログラムBが, エラーまたは重大なエラーを示す状態コードを返した場合には, 制御はBYPASSというラベルの実行文に移り,プログラムCが実行されます。

  3. $ ON WARNING THEN EXIT
       .
       .
       .
    $ SET NOON
    $ RUN [SSTEST]LIBRA
    $ SET ON
       .
       .
       .
    
    このONコマンドは警告,エラー,または重大なエラーが発生した場合に, プロシージャを終了させることを指定しています。 そのあと,SET NOONコマンドは,RUNコマンドが実行される前に, エラー・チェックを禁止します。 したがって,LIBRA.EXEというプログラムからどの状態コードが戻されても, プロシージャは処理を継続します。 次のSET ONコマンドはエラー・チェックを再び有効にし,最新のON条件を再設定します。

  4. $ ON CONTROL_Y THEN GOTO CTRL_EXIT
       .
       .
       .
    $ CTRL_EXIT:
    $ CLOSE INFILE
    $ CLOSE OUTFILE
    $ EXIT
    
    ONコマンドで,プロシージャの実行中にCtrl/Yが押された場合には, ラベルCTRL_EXITへ制御を移すように指定しています。 CTRL_EXITでは,後処理(この例の場合は,ファイルのクローズ)を実行します。


OPEN

入出力のために,ファイルをオープンします。 OPENコマンドは,ファイルをオープンするときにファイルに論理名を与え, その名前をプロセス論理名テーブルに登録します。

制限事項については,各修飾子の説明を参照してください。

フォーマット

     OPEN  論理名[:]ファイル指定 

パラメータ

論理名[:]

ファイルに与える論理名の文字列を指定します。

ファイル指定

入出力のためにオープンされる,ファイルまたは装置の名前を指定します。 ファイル指定にファイル・タイプが含まれていない場合は, 省略時のファイル・タイプとしてDATが使用されます。 ワイルドカード文字は使用できません。

新しい順編成ファイルを作成するためには,/WRITE修飾子を使用します。 詳細は/WRITE修飾子の説明を参照してください。

説明

ファイルは,読み込み,または書き込み, あるいは読み込み/書き込みのためにオープンできます。 ファイルをオープンすると,READおよび WRITEコマンドでコマンド・レベルの入力または出力にファイルを使用できます。

OPENコマンドは,プロセス・パーマネントとしてファイルをオープンします。 したがって,CLOSEコマンドでクローズするか,ログアウトするまで, これらのファイルはオープンしています。 ファイルをオープンしたコマンド・プロシージャがそのファイルをクローズしないで終了すると, ファイルはオープンしたままになります。 コマンド・インタプリタは,自動的にはファイルをクローズしません。 OPENコマンドは,OpenVMS RMSを使用してファイルをオープンし, プロセス・パーマネント・ファイルの使用に関するRMS制限に従います。 OPENコマンドは,順編成ファイル,相対ファイル, または索引順編成ファイルをオープンします。

論理装置SYS$INPUT,SYS$OUTPUT,SYS$COMMAND,およびSYS$ERRORは, コマンド・レベルでの読み込みまたは書き込みの前に, 明示的にオープンする必要はありません。 他のすべてのファイルは,明示的にオープンしなければなりません。

異なるファイルをオープンする場合,同じ論理名を使用しないでください。 OPENコマンドで現在別のファイルに割り当てられている論理名を指定しても, 警告メッセージは出ません。ただし,ファイルはオープンされず,次のREAD要求は, 現在その論理名が割り当てられているファイルにアクセスします。

ファイルをオープンした後,はじめて/SHARE修飾子を使用すると,同じファイルに 2つ以上のOPENコマンドを入力し,異なる論理名を割り当てることができます。 /SHARE=READまたは/SHARE=WRITE修飾子を使用してファイルをオープンすると, 他のユーザはTYPEまたはSEARCHコマンドでそのファイルにアクセスできます。

OPENコマンドを使用して新しいファイルを作成する場合は, 可変固定長制御部(VFC)レコード形式が使用されます。 レコード形式に互換性がない場合は, このレコード形式のファイルに別のレコード形式のファイルを連結できないことがあります。 VFC形式を使用したくない場合は,CREATEコマンドを使用してファイルを作成します。

既存のファイルにOPENコマンドを指定すると, そのファイルのレコード・タイプが使用されます。

修飾子

/APPEND

書き込みのために既存のファイルをオープンし, レコード・ポインタをファイルの最後(EOF)にセットすることを指定します。 したがって,ファイルの最後に新しいレコードを追加できます。

順編成ファイルの場合にのみ,複数ユーザが同時にレコードを追加することができます。

/APPEND修飾子は,既存のファイルにレコードを追加する場合にだけ使用できます。 /APPEND修飾子と/WRITE修飾子を,同時に指定することはできません。

/ERROR=ラベル

オープン要求でエラーが発生したときに, 制御を移すコマンド・プロシージャ内のラベルを指定します。 /ERROR修飾子に対して指定されたエラー・ルーチンは, ONコマンドで指定されている動作に優先します。 /ERROR修飾子が指定されていない場合には, 現在のONコマンドで指定されている条件の動作が実行されます。

エラーが発生し,指定されたラベルに制御を正常に移すことができた場合には, $STATUSというグローバル・シンボルに,そのエラーを示すコードが設定されます。

/READ (省略時の設定)

入力のために,ファイルをオープンすることを指定します。 /READ修飾子だけを指定し,/WRITE修飾子を指定しない場合には, 既存のファイルを指定しなければなりません。

/SHARE[=オプション]

指定されたファイルを共用ファイルとしてオープンし, 他のユーザからも入出力アクセスができるようにすることを指定します。 /SHARE=READ修飾子を指定すると, 他のユーザはそのファイルを読み込み(R)アクセスを行えますが, 書き込み(W)アクセスはできません。 /SHARE=WRITE修飾子を指定する場合や,オプションを省略する場合には, ユーザは指定されたファイルに対して,入出力アクセスの両方を実行できます。

/SHARE修飾子が指定されない場合は,他のユーザは読み込みアクセスのみ行えます。

/WRITE

ファイルが出力のためにオープンされることを指定します。 /WRITE修飾子に対しては,次の制約事項が適用されます。

  1. $ OPEN INPUT_FILE AVERAGE.DAT
    $ READ_LOOP:
    $ READ/END_OF_FILE=ENDIT  INPUT_FILE  NUM
       .
       .
       .
    $ GOTO READ_LOOP
    $ ENDIT:
    $ CLOSE INPUT_FILE
    
    この例のOPENコマンドは, AVERAGE.DATという名前のファイルを入力ファイルとしてオープンし, そのファイルにINPUT_FILEという論理名を割り当てます。 省略時の設定によって,/READ修飾子が指定されていると解釈されるため, ファイルは読み込みアクセスのためにオープンされます。 READコマンドはINPUT_FILEという論理ファイルから, NUMという名前のシンボルにレコードを読み込みます。 コマンド・プロシージャはファイルの終わりに到達するまで, READ_LOOPというラベルとENDITというラベルの間の行を実行します。 ファイルの終わりに到達すると,CLOSEコマンドがファイルをクローズします。

  2. $ OPEN/WRITE/ERROR=OPEN_ERROR  OUTPUT_FILE  TEMP.OUT
    $ COUNT = 0
    $ WRITE_LOOP:
    $ COUNT = COUNT + 1
    $ IF COUNT .EQ. 11 THEN GOTO ENDIT
    $ WRITE OUTPUT_FILE "Count is ''COUNT'."
       .
       .
       .
    $ GOTO WRITE_LOOP
    $ ENDIT:
    $ CLOSE OUTPUT_FILE
    $ EXIT
    $
    $ OPEN_ERROR:
    $ WRITE SYS$OUTPUT "Cannot open file TEMP.OUT"
    $ EXIT
    
    この例では,/WRITE修飾子が指定されたOPENコマンドが, TEMP.OUTというファイルを作成し, そのファイルにOUTPUT_FILEという論理名を割り当てます。 TEMP.OUTは,順編成ファイルです。

    /ERROR修飾子は,ファイルをオープンするときにエラーが発生した場合には, コマンド・インタプリタが, OPEN_ERRORというラベルの行に制御を移すことを指定しています。 コマンド・プロシージャは,COUNTシンボルの値が11になるまで, ファイルTEMP.OUTにレコードを書き込みます。

  3. $ OPEN/READ INPUT_FILE TRNTO::DBA0:[COST]INVENTORY.DAT
    $ READ_LOOP:
    $ READ/END_OF_FILE=ENDIT  INPUT_FILE  NUM
    $ FIRST_CHAR = F$EXTRACT(0,1,NUM)
    $ WRITE SYS$OUTPUT FIRST_CHAR
    $ GOTO READ_LOOP
    $ ENDIT:
    $ CLOSE INPUT_FILE
    
    このコマンド・プロシージャは, 遠隔ノードTRNTO上のファイルINVENTORY.DATを入力ファイルとしてオープンし, 論理名INPUT_FILEを割り当てています。 そして,READコマンドでINPUT_FILEからシンボルNUMにレコードを読み込んでいます。 次の2つのコマンドで, レコードから最初の文字を取り出してSYS$OUTPUTに書いています。 この処理は,ファイルの終わり(EOF)まですべてのレコードに対して続けられ, 最後にCLOSEコマンドで,ファイルをクローズし論理名INPUT_FILEを削除しています。


[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]