ESCAPE

Structured Mode-Syntax

ESCAPE

TOP [REPOSITION]

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

Reporting Mode-Syntax

ESCAPE

TOP [REPOSITION]

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

Dieses Dokument behandelt folgende Themen:

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Verwandte Statements:

Gehört zur Funktionsgruppe:


Funktion

Das Statement ESCAPE dient dazu, den linearen Ablauf der Ausführung einer Verarbeitungsschleife oder eines Unterprogramms zu unterbrechen.

Mit den Schlüsselwörtern TOP, BOTTOM und ROUTINE geben Sie an, wo die Verarbeitung nach dem ESCAPE-Statement fortgesetzt werden soll.

Ein ESCAPE TOP- bzw. ESCAPE BOTTOM-Statement bezieht sich immer auf die innerste gerade aktive Verarbeitungsschleife. Das ESCAPE-Statement muss nicht unbedingt innerhalb der Schleife stehen.

Befindet sich das ESCAPE TOP- bzw. ESCAPE BOTTOM-Statement in einem Unterprogramm (Subroutine, Subprogramm oder mit FETCH RETURN aufgerufenes Programm), werden die innerhalb der Verarbeitungsschleife aufgerufenen Unterprogramme automatisch beendet.

Anmerkungen

In einer Verarbeitungsschleife können mehrere ESCAPE-Statements enthalten sein.

Die Ausführung eines ESCAPE-Statements kann an eine logische Bedingung geknüpft werden. Befindet sich das ESCAPE-Statement in einem AT END OF DATA-, AT BREAK- oder AT END OF PAGE-Statement-Block, so wird die Verarbeitung des betreffenden Blocks abgebrochen und die ESCAPE-Verarbeitung wie angegeben fortgesetzt.

Wird das ESCAPE-Statement während einer IF NO RECORDS FOUND-Bedingung ausgeführt, werden keine schleifenabschließenden Verarbeitungen durchgeführt (entspricht ESCAPE IMMEDIATE).

Syntax-Beschreibung

Syntax-Element-Beschreibung

Syntax-Element Beschreibung
ESCAPE TOP
TOP-Option:

TOP bedeutet, dass die Verarbeitung am Anfang der Verarbeitungsschleife fortgesetzt werden soll, d.h. die Schleife wird erneut von Anfang an durchlaufen.

REPOSITION
TOP REPOSITION-Option:

Wenn ein ESCAPE TOP REPOSITION-Statement ausgeführt wird, fährt Natural sofort mit der Verarbeitung am Anfang der aktiven READ-Schleife fort und benutzt dabei den aktuellen Wert der Suchvariable als neuen Startwert.

Gleichzeitig setzt ESCAPE TOP REPOSITION die Systemvariable *COUNTER auf Null (0).

ESCAPE TOP REPOSITION kann innerhalb einer READ-Statementschleife angegeben werden, die auf Adabas-, DL/I- oder VSAM-Datenbanken zugreift. Das betreffende READ-Statement muss die Option WITH REPOSITION enthalten.

ESCAPE BOTTOM
BOTTOM-Option:

BOTTOM bedeutet, dass die Verarbeitung mit dem ersten Statement nach der Verarbeitungsschleife fortgesetzt werden soll. Die Schleife wird beendet, und schleifenabschließende Verarbeitungen (abschließendes BREAK und END DATA) werden für alle zu beendenden Schleifen ausgeführt.

Im Reporting Mode ist ESCAPE BOTTOM die Voreinstellung.

(r)
Statement-Referenzierung:

Notation (r): Wenn auf BOTTOM ein Label oder eine Referenznummer folgt, wird die Verarbeitung mit dem ersten Statement nach der Verarbeitungsschleife fortgesetzt, das durch das Label oder die Referenznummer identifiziert wird.

Ein Label oder eine Referenznummer kann jedoch nur dann angegeben werden, wenn das ESCAPE BOTTOM-Statement innerhalb der referenzierten Verarbeitungschleife steht.

IMMEDIATE
IMMEDIATE-Option:

Wenn Sie das Schlüsselwort IMMEDIATE angeben, werden keine abschließenden schleifenbeendenden Verarbeitungen durchgeführt.

ESCAPE ROUTINE
ROUTINE-Option:

Diese Option bewirkt, dass das aktive Natural-Unterprogramm, das entweder über PERFORM, CALLNAT, FETCH RETURN oder als Hauptprogramm aufgerufen wurde, die Kontrolle abgibt.

Im Falle einer Subroutine wird die Verarbeitung mit dem ersten Statement fortgesetzt, das auf das Statement folgt, mit dem die Subroutine aufgerufen wurde.

Im Falle eines Hauptprogramms gelangt Natural in den Kommando-Modus. Alle aktiven Schleifen innerhalb des Unterprogramms werden beendet und schleifenabschließende Verarbeitungen (BREAK und END OF DATA) sowie vom Benutzer bestimmte Gruppenwechsel-Verarbeitungen (PERFORM BREAK) durchgeführt, und zwar für alle betroffenen Verarbeitungsschleifen. Steht das ESCAPE ROUTINE-Statement in einem auf Stufe (Level) 1 ausgeführten Hauptprogramm, wird außerdem eine abschließende End-of-Page-Verarbeitung durchgeführt.

ESCAPE MODULE
MODULE-Option:

Diese Option bewirkt, dass die gesamte aktive Programmebene, einschließlich aller internen Subroutinen, die Kontrolle abgibt. Die Kontrolle wird dann an das Objekt der vorherigen Programmebene zurückgegeben.

Wenn ESCAPE MODULE in einer Hierarchie interner Subroutinen benutzt wird, ermöglicht es diese Option, alle auf dieser Ebene laufenden Unterprogramme sofort zu verlassen.

Wenn keine interne Subroutine aktiv ist, führt ESCAPE MODULE zum gleichen Ergebnis wie ESCAPE ROUTINE.

ESCAPE MODULE ist nur bei internen Subroutinen von Bedeutung. Bei externen Subroutinen, Subprogrammen und aufgerufenen Programmen hat diese Option denselben Effekt wie ESCAPE ROUTINE.

Wie bei ESCAPE ROUTINE wird eine schleifenabschließende Verarbeitung ausgeführt. Geben Sie aber das Schlüsselwort IMMEDIATE an, wird keine schleifenbeendende Verarbeitung ausgeführt.

Beispiel

** 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

Ausgabe des Programms ESCEX1:

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

Nach Eingabe und Bestätigung des Namens der Stadt:

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

Ergebnis nach Eingabe und Bestätigung von 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