日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
GOTO |
制御をコマンド・プロシージャ内のラベルが付けられたステートメントに渡します。
GOTO ラベル
ラベル
コマンド行の最初の項目として,1 文字から 255 文字までの英数字のラベルを指定します。ラベルの中にブランクを含むことはできません。 GOTO コマンドの実行後,制御は指定されたラベルのあとのコマンドに渡されます。ラベルは,現在のコマンド・プロシージャの中で,GOTO ステートメントの前でもあとでもかまいません。コマンド・プロシージャ内でラベルを使用する場合には,最後にコロンを指定しなければなりません。ラベルが重複している場合,最も最近読まれたラベルへ飛びます。
プロシージャ内の次の行ではない行に制御を移すには,コマンド・プロシージャで GOTO コマンドを使用します。ラベルは,現在のコマンド・プロシージャの GOTO 文の前でも後でも使用できます。コマンド・ストリームがランダム・アクセス装置 ( つまりディスク装置 ) から読み取られていない場合,GOTO コマンドは動作しません。GOTO コマンドのターゲット・ラベルが別の IF-THEN-ELSE 構造内にある場合は,エラー・メッセージ (DCL-W-USGOTO) が返されます。
コマンド・インタプリタは,ラベルを検出すると,ラベル・テーブルにラベルを入れます。このテーブルは,ローカル・シンボル・テーブルで使用できる領域から割り当てられます。コマンド・インタプリタがすでにテーブルに存在しているラベルを検出すると,既存の定義が新しい定義で置き換えられます。したがって,重複ラベルを使用すると,制御は常に DCL が最後に読み取ったラベルに移ります。次の規則が適用されます。
- GOTO コマンドの前と後に重複ラベルがある場合,制御はコマンドの前にあるラベルに移ります。
- すべての重複ラベルが GOTO コマンドより前にある場合,制御は,最新のラベル,つまり GOTO コマンドに最も近いラベルに移ります。
- すべての重複ラベルが GOTO コマンドより後にある場合,制御は,GOTO コマンドに最も近いラベルに移ります。
現在のコマンド・プロシージャにラベルが存在しない場合,プロシージャは続行できないので,強制終了します。
ラベルに使用できる領域のサイズには,制限があることに注意してください。コマンド・プロシージャが多くのシンボルを使用し,多くのラベルがある場合,コマンド・インタプリタのテーブル領域が不足し,エラー・メッセージが出ることがあります。
#1 |
---|
$ IF P1 .EQS. "HELP" THEN GOTO TELL $ IF P1 .EQS. "" THEN GOTO TELL . . . $ EXIT $ TELL: $ TYPE SYS$INPUT To use this procedure, you must enter a value for P1. . . . $ EXIT |
この例では,IF コマンドはプロシージャに渡された最初のパラメータを調べます。このパラメータが HELP という文字列の場合,あるいはパラメータが指定されていない場合には,GOTO コマンドが実行され,制御は TELL というラベルの行に移ります。それ以外の場合には,プロシージャは EXIT コマンドが検出されるまで実行を継続します。 TELL というラベルでは,TYPE コマンドがプロシージャの使用方法を示す入力ストリームのデータを表示します。
#2 |
---|
$ ON ERROR THEN GOTO CHECK . . . $ EXIT $ CHECK: ! Error handling routine . . . $ END: $ EXIT |
ON コマンドは,エラー処理ルーチンを設定します。そのあと,コマンド・プロシージャ内で実行されるコマンドあるいはプロシージャが,エラーまたは重大なエラーを報告した場合には,GOTO コマンドは,制御を CHECK というラベルに移します。
目次 | 索引 |
|