バージョン 4.2.5
 —  ステートメント  —

ESCAPE

ストラクチャードモード構文

ESCAPE

TOP [REPOSITION]

BOTTOM [(r)] [IMMEDIATE]
ROUTINE [IMMEDIATE]
MODULE [IMMEDIATE]

レポーティングモード構文

ESCAPE

TOP [REPOSITION]

BOTTOM [(r)] [IMMEDIATE]
ROUTINE [IMMEDIATE]
MODULE [IMMEDIATE]

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:

関連機能グループ:


機能

ESCAPE ステートメントは、処理ループやルーチンの実行を中断するために使用します。

キーワードの TOPBOTTOM、および ROUTINE によって、ESCAPE ステートメントの実行後に処理をどこから続けるかを指定します。

ESCAPE TOP および ESCAPE BOTTOM ステートメントは、内部的に最も内側でアクティブになっている処理ループを参照します。 ESCAPE ステートメントを、物理的に処理ループ内に置く必要はありません。

ESCAPE TOP および ESCAPE BOTTOM ステートメントをルーチン内(サブルーチン、サブプログラム、または FETCH RETURN で起動されたプログラム)に指定すると、処理ループの実行中に呼び出されたルーチンは自動的に終了します。

その他の考慮事項

同一の処理ループ内に、複数の ESCAPE ステートメントを指定できます。

ESCAPE ステートメントは、論理条件に基づいて実行できます。 ESCAPE ステートメントが AT END OF DATAAT BREAK、または AT END OF PAGE ブロックの処理中に実行されると、特殊条件ブロックの実行を終了し、指定された ESCAPE 処理を行います。

IF NO RECORDS FOUND 条件の処理中に ESCAPE ステートメントが実行されると、ループ終了処理は行われません(ESCAPE IMMEDIATE と同じ)。

Top of page

構文説明

ESCAPE TOP ESCAPE TOP を実行すると、処理ループの先頭から処理が続行されます。 処理ループが再び先頭から繰り返されます。
REPOSITION

ESCAPE TOP REPOSITION ステートメントを実行すると、Natural では開始値として検索変数の現在の値を使用して、即座にアクティブな READ ループの先頭から処理が続行されます。

同時に、ESCAPE TOP REPOSITION により、システム変数 *COUNTER がゼロにリセットされます。

ESCAPE TOP REPOSITION は、Adabas、DL/I、または VSAM データベースにアクセスする READ ステートメント処理ループ内で指定できます。 関連する READ ステートメントでは、WITH REPOSITION オプションを指定する必要があります。

ESCAPE BOTTOM

ESCAPE BOTTOM を実行すると、処理ループ終了後の最初のステートメントから処理が続行されます。 ループは終了し、ループ終了処理(最終の BREAK 処理、END DATA 処理)が実行されます。

レポーティングモードでは、ESCAPE BOTTOM がデフォルトです。

(r) 表記 (r)ESCAPE BOTTOM に続けてラベルや参照番号を指定すると、ラベルや参照番号で示した処理ループの直後の最初のステートメントから処理が続行されます。

ラベルまたは参照番号を指定できるのは、参照する処理ループに ESCAPE BOTTOM ステートメントが物理的に挿入されている場合のみです。

IMMEDIATE キーワード IMMEDIATE を指定すると、ループ終了処理は行われません。
ESCAPE ROUTINE

ESCAPE ROUTINE を実行すると、PERFORMCALLNATFETCH RETURN で呼び出された現在の Natural ルーチン、またはメインプログラムとしての現在の Natural ルーチンから制御が解放されます。

サブルーチンの場合、そのサブルーチンを呼び出したステートメントの、次のステートメントから処理が続行されます。 メインプログラムの場合は、Natural コマンドモードに入ります。

ルーチン内でアクティブになっているループはすべて終了し、ループ終了処理、およびユーザー開始(PERFORM BREAK)処理に対する最終処理が行われます。 ESCAPE ROUTINE を含むプログラムをメインプログラム(レベル 1)として実行している場合に、最終の END PAGE 処理が行われます。

ESCAPE MODULE

ESCAPE MODULE を実行すると、現在のプログラムレベル全体(すべての内部サブルーチンを含む)の制御が中止されます。 その後、制御は前のプログラムレベルのオブジェクトに返されます。 内部サブルーチンの階層内で ESCAPE MODULE を使用すると、このレベルで動作しているすべてのルーチンを同時に終了できます。 アクティブな内部サブルーチンがない場合、ESCAPE MODULE の結果は ESCAPE ROUTINE と同じになります。

ESCAPE MODULE は、内部サブルーチンにのみに関係しています。 外部サブルーチン、サブプログラム、および呼び出されたプログラムでは、ESCAPE ROUTINE と同じ効果があります。

ESCAPE ROUTINE と同様に、ループ終了処理が実行されます。 ただし、キーワード IMMEDIATE を指定した場合、ループ終了処理は実行されません。

Top of page

** Example 'ESCEX1': ESCAPE                                             
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 CITY                                                                
  2 FIRST-NAME                                                          
  2 NAME                                                                
  2 AREA-CODE                                                           
  2 PHONE                                                               
*                                                                       
1 #CITY (A20) INIT <' '>                                                
1 #CNTL (A1)  INIT <' '>                                                
END-DEFINE                                                              
*                                                                       
REPEAT                                                                  
  INPUT 'ENTER VALUE FOR CITY:  ' #CITY                                 
      / 'OR ''.'' TO TERMINATE  '                                       
  IF #CITY = '.'                                                        
    ESCAPE BOTTOM                                                       
  END-IF                                                        
  /*                                                            
  FND. FIND EMPLOY-VIEW WITH CITY = #CITY                       
    /*                                                          
    IF NO RECORDS FOUND                                         
      WRITE 'NO RECORDS FOUND'                                  
      ESCAPE BOTTOM (FND.)                                      
    END-NOREC                                                   
    AT START OF DATA                                            
      INPUT (AD=O) 'RECORDS FOUND:' *NUMBER //                  
                   'ENTER ''D'' TO DISPLAY RECORDS' #CNTL (AD=M)
      IF #CNTL NE 'D'                                           
        ESCAPE BOTTOM (FND.)                                    
      END-IF                                                    
    END-START                                                   
    /*                                                          
    DISPLAY NOTITLE NAME FIRST-NAME PHONE                       
  END-FIND                                                      
END-REPEAT

プログラム ESCEX1 の出力:

ENTER VALUE FOR CITY:  PARIS
(OR '.' TO TERMINATE)

市町村名を入力して確認した後:

RECORDS FOUND:        26
ENTER 'D' TO DISPLAY RECORDS D

D を入力して確認した後:

        NAME              FIRST-NAME         TELEPHONE   
-------------------- -------------------- ---------------
                                                         
MAIZIERE             ELISABETH            46758304       
MARX                 JEAN-MARIE           40738871       
REIGNARD             JACQUELINE           48472153       
RENAUD               MICHEL               46055008       
REMOUE               GERMAINE             36929371       
LAVENDA              SALOMON              40155905       
BROUSSE              GUY                  37502323       
GIORDA               LOUIS                37497316       
SIECA                FRANCOIS             40487413       
CENSIER              BERNARD              38070268       
DUC                  JEAN-PAUL            38065261       
CAHN                 RAYMOND              43723961       
MAZUY                ROBERT               44286899       
FAURIE               HENRI                44341159       
VALLY                ALAIN                47326249       
BRETON               JEAN-MARIE           48467146       
GIGLEUX              JACQUES              40477399       
KORAB-BRZOZOWSKI     BOGDAN               45288048       
XOLIN                CHRISTIAN            46060015       
LEGRIS               ROGER                39341509       
VVVV

Top of page