# Compaq OpenVMS
DCL ディクショナリ

前へ | 次へ | 目次 | 索引

# NCS

> OpenVMS 各国語文字セット (NCS)ユーティリティを起動します。 NCS ユーティリティは，主に DEC で定義している文字セット (MCS) のサブセットを使用することにより，代替 (非ASCII) 文字列の照合順序を実現する方法を提供します。また，文字列変換機能も提供します。

> NCS ユーティリティについての詳細は，『OpenVMS National Character Set Utility Manual』 ( ドキュメンテーション CD-ROM に用意されています )，またはオンライン・ヘルプを参照してください。

## 形式

> NCS [ファイル指定[,...]]

# 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 コマンドでプロシージャの実行を再開できます。コマンド・インタプリタ内で実行されるコマンドの一覧については，『Compaq OpenVMS ユーザーズ・マニュアル』を参照してください。

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

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

> - プロシージャが終了する (EXIT コマンドまたは STOP コマンドの結果，または省略時のエラー状態処理動作の結果)。

> - 別の ON CONTROL_Y コマンドを実行する。

> - プロシージャが，SET NOCONTROL=Y コマンドを実行する。

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

> 注意 ON CONTROL_Y コマンドおよび SET NOCONTROL=Y コマンドは，特殊なアプリケーション用のコマンドです。一般に，Ctrl/Y 割り込みは，禁止にしないでください。たとえば，Ctrl/Y 割り込みを禁止にするプロシージャが制御不能ループに入ると，端末からプロシージャを停止させることができなくなります。

##

### 例

#1
    $ ON SEVERE_ERROR THEN CONTINUE

> この実行文がコマンド・プロシージャ内で実行された後で，警告，エラー，または重大なエラーが発生した場合には，プロシージャの実行が継続されます。回復不可能な重大なエラーが発生した結果として，この実行文が１度実行されると，省略時設定の動作（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 修飾子に対しては，次の制約事項が適用されます。

> - /WRITE 修飾子を使用すると，新しい順編成ファイルをオープンし作成できます。 OPEN/WRITE コマンドのファイル指定に，ファイル・バージョン番号が含まれず，指定されたファイル名とファイル・タイプを持つファイルがすでに存在する場合には， OPEN/WRITE コマンドは，既存のファイルよりバージョン番号が 1 だけ大きな新しいファイルを作成します。

> - 既存のファイルをオープンする場合には， /WRITE 修飾子とともに /READ 修飾子を指定します。このファイルがオープンされると，レコード・ポインタはファイルの先頭にセットされます。 (この点は，OPEN/APPEND コマンドの場合と異なります。 OPEN/APPEND コマンドでは，レコード・ポインタはファイルの最後にセットされます)。新しいファイルを作成するときには，OPEN/READ/WRITE コマンドは使用できません。

> - /WRITE 修飾子と /APPEND 修飾子は同時に指定できません。

##

### 例

#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::DKA0:[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 を削除しています。

前へ | 次へ | 目次 | 索引