参照プログラム例

このドキュメントには、Natural ステートメントおよびシステム変数の参照ドキュメントで参照されている追加のプログラム例が含まれています。これらすべての例は SYSEXSYN ライブラリに含まれています。

注意:
一般に、ステートメントの説明で示されているプログラム例はストラクチャードモードで記述されています。レポーティングモードとストラクチャードモードで構文が大幅に異なるステートメントについては、同等のレポーティングモードの例も参照として提供されています。これらのプログラム例は、Natural ライブラリ SYSEXSYN にソースコード形式で用意されています。Natural ステートメントのその他のプログラム例については、『プログラミングガイド』の「参照プログラム例」を参照してください。これらのプログラム例は、Natural ライブラリ SYSEXPG に用意されています。これらのライブラリが使用可能であるかを Natural 管理者に確認してください。プログラム例では、Software AG 提供のデモ用ファイル EMPLOYEESVEHICLES のデータを使用します。

ここに記載されているプログラム例は、以下のステートメントまたはシステム変数の説明で参照されています。


ASSIGN

次の例は、ASSIGN/COMPUTE ステートメントの説明で参照されています。

ASGEX1R - ASSIGN(レポーティングモード)

** Example 'ASGEX1R': ASSIGN (reporting mode)                           
************************************************************************
RESET #A (N3)                                                           
      #B (A6)                                                           
      #C (N0.3)                                                         
      #D (N0.5)                                                         
      #E (N1.3)                                                         
      #F (N5)                                                           
      #G (A25)                                                          
      #H (A3/1:3)                                                       
*                                                                       
#A = 5                                 WRITE NOTITLE '=' #A             
#B = 'ABC'                             WRITE '=' #B                     
#C = .45                               WRITE '=' #C                     
#D = #E = -0.12345                     WRITE '=' #D / '=' #E            
ASSIGN ROUNDED #F = 199.999            WRITE '=' #F                     
#G = 'HELLO'                           WRITE '=' #G                     
*                                                                       
#H (1) = 'UVW'                                                          
#H (3) = 'XYZ'                         WRITE '=' #H (1:3)
*                                                        
END

プログラム AEDEX1R の出力:

#A:    5       
#B: ABC        
#C:  .450      
#D: -.12345    
#E: -0.123     
#F:    200     
#G: HELLO      
#H: UVW     XYZ

AT BREAK

次の例は、AT BREAK ステートメントの説明で参照されています。

ATBEX1R - AT BREAK(レポーティングモード)

** Example 'ATBEX1R': AT BREAK (reporting mode)                         
************************************************************************
*                                                                       
LIMIT 10                                                                
READ EMPLOYEES BY CITY                                                  
  AT BREAK OF CITY DO                                                   
    SKIP 1                                                              
  DOEND                                                                 
  /*                                                                    
  DISPLAY NOTITLE CITY (IS=ON) COUNTRY (IS=ON) NAME                     
LOOP                                                                    
END

プログラム ATBEX1R の出力:

CITY         COUNTRY         NAME        
-------------------- ------- --------------------
                                                 
AIKEN                USA     SENKO               
                                                 
AIX EN OTHE          F       GODEFROY            
                                                 
AJACCIO                      CANALE              
                                                 
ALBERTSLUND          DK      PLOUG               
                                                 
ALBUQUERQUE          USA     HAMMOND             
                             ROLLING             
                             FREEMAN             
                             LINCOLN             
                                                 
ALFRETON             UK      GOLDBERG            
                                                 
ALICANTE             E       GOMEZ

ATBEX5R - 複数のブレイクレベルがある AT BREAK ステートメント(レポーティングモード)

** Example 'ATBEX5R': AT BREAK (multiple break levels) (reporting mode) 
************************************************************************
RESET LEAVE-DUE-L (N4)                                                  
*                                                                       
LIMIT 5                                                                 
FIND EMPLOYEES WITH CITY = 'PHILADELPHIA' OR = 'PITTSBURGH'             
               SORTED BY CITY DEPT                                      
  MOVE LEAVE-DUE TO LEAVE-DUE-L                                         
  DISPLAY CITY (IS=ON) DEPT (IS=ON) NAME LEAVE-DUE-L                    
  AT BREAK OF DEPT                                                      
    WRITE NOTITLE /                                                     
          T*DEPT OLD(DEPT) T*LEAVE-DUE-L SUM(LEAVE-DUE-L) /             
  AT BREAK OF CITY                                                      
    WRITE NOTITLE                                                       
          T*CITY OLD(CITY) T*LEAVE-DUE-L SUM(LEAVE-DUE-L) //            
LOOP                                                                    
*                                                                       
END

プログラム ATBEX5R の出力:

CITY         DEPARTMENT         NAME         LEAVE-DUE-L
                        CODE                                    
-------------------- ---------- -------------------- -----------
                                                                
PHILADELPHIA         MGMT30     WOLF-TERROINE           11      
                                MACKARNESS              27      
                                                                
                     MGMT30                             38      
                                                                
                     TECH10     BUSH                    39      
                                NETTLEFOLDS             24      
                                                                
                     TECH10                             63      
                                                                
PHILADELPHIA                                           101      
                                                                
                                                                
PITTSBURGH           MGMT10     FLETCHER                34      
                                                                
                     MGMT10                             34      
                                                                
PITTSBURGH                                              34

AT END OF DATA

次の例は、AT END OF DATA ステートメントの説明で参照されています。

AEDEX1R - AT END OF DATA(レポーティングモード)

** Example 'AEDEX1R': AT END OF DATA (reporting mode)
************************************************************************
LIMIT 5
EMP. FIND EMPLOYEES WITH CITY = 'STUTTGART'
  IF NO RECORDS FOUND
    ENTER
  DISPLAY PERSONNEL-ID NAME FIRST-NAME
          SALARY (1) CURR-CODE (1)
  /*
  AT END OF DATA DO
    IF *COUNTER (EMP.) = 0 DO
      WRITE 'NO RECORDS FOUND'
      ESCAPE BOTTOM
    DOEND
    WRITE NOTITLE / 'SALARY STATISTICS:'
                  / 7X 'MAXIMUM:' MAX(SALARY(1))  CURR-CODE (1)
                  / 7X 'MINIMUM:' MIN(SALARY(1))  CURR-CODE (1)
                  / 7X 'AVERAGE:' AVER(SALARY(1)) CURR-CODE (1)
  DOEND
LOOP
END

プログラム AEDEX1R の出力:

PERSONNEL         NAME              FIRST-NAME        ANNUAL   CURRENCY
   ID                                                 SALARY     CODE  
--------- -------------------- -------------------- ---------- --------
                                                                       
11100328  BERGHAUS             ROSE                      70800 DM      
11100329  BARTHEL              PETER                     42000 DM      
11300313  AECKERLE             SUSANNE                   55200 DM      
11300316  KANTE                GABRIELE                  61200 DM      
11500304  KLUGE                ELKE                      49200 DM      
                                                                       
SALARY STATISTICS:                                                     
       MAXIMUM:      70800 DM                                          
       MINIMUM:      42000 DM                                          
       AVERAGE:      55680 DM

AT END OF PAGE

次の例は、AT END OF PAGE ステートメントの説明で参照されています。

AEPEX1R - AT END OF PAGE(レポーティングモード)

** Example 'AEPEX1R': AT END OF PAGE (reporting mode)
************************************************************************
FORMAT PS=10
LIMIT 10
READ EMPLOYEES BY PERSONNEL-ID FROM '20017000'
  DISPLAY NOTITLE GIVE SYSTEM FUNCTIONS
          NAME JOB-TITLE 'SALARY' SALARY(1) CURR-CODE (1)
  /*
  AT END OF PAGE DO
     WRITE / 28T 'AVERAGE SALARY: ...' AVER(SALARY(1)) CURR-CODE (1)
  DOEND
  /*
LOOP
END

プログラム AEPEX1R の出力:

        NAME                  CURRENT            SALARY   CURRENCY
                             POSITION                       CODE  
-------------------- ------------------------- ---------- --------
                                                                  
CREMER               ANALYST                        34000 USD     
MARKUSH              TRAINEE                        22000 USD     
GEE                  MANAGER                        39500 USD     
KUNEY                DBA                            40200 USD     
NEEDHAM              PROGRAMMER                     32500 USD     
JACKSON              PROGRAMMER                     33000 USD     
                                                                  
                           AVERAGE SALARY: ...      33533 USD

AT START OF DATA

次の例は、AT START OF DATA ステートメントの説明で参照されています。

ASDEX1R - AT START OF DATA(レポーティングモード)

** Example 'ASDEX1R': AT START OF DATA (reporting mode)
***********************************************************************
RESET #CITY (A20) #CNTL (A1)
*
REPEAT
  INPUT 'ENTER VALUE FOR CITY' #CITY
  /*
  IF #CITY = ' ' OR= 'END' DO
    STOP
  DOEND
  FIND EMPLOYEES WITH CITY = #CITY
    IF NO RECORDS FOUND DO
      WRITE NOTITLE NOHDR 'NO RECORDS FOUND'
      ESCAPE
    DOEND
    /*
    AT START OF DATA DO
      INPUT (AD=O) 'RECORDS FOUND' *NUMBER //
                   'ENTER ''D'' TO DISPLAY RECORDS' #CNTL (AD=A)
      IF #CNTL NE 'D' DO
        ESCAPE BOTTOM
      DOEND
    DOEND
    /*
    DISPLAY NAME FIRST-NAME
  LOOP
LOOP
END

プログラム ASDEX1R の出力:

ENTER VALUE FOR CITY PARIS

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

RECORDS FOUND        26
  
ENTER 'D' TO DISPLAY RECORDS D

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

        NAME              FIRST-NAME     
-------------------- --------------------
                                         
MAIZIERE             ELISABETH           
MARX                 JEAN-MARIE          
REIGNARD             JACQUELINE          
RENAUD               MICHEL              
REMOUE               GERMAINE            
LAVENDA              SALOMON             
BROUSSE              GUY                 
GIORDA               LOUIS               
SIECA                FRANCOIS            
CENSIER              BERNARD             
DUC                  JEAN-PAUL           
CAHN                 RAYMOND             
MAZUY                ROBERT              
FAURIE               HENRI               
VALLY                ALAIN               
BRETON               JEAN-MARIE          
GIGLEUX              JACQUES             
KORAB-BRZOZOWSKI     BOGDAN              
XOLIN                CHRISTIAN           
LEGRIS               ROGER               
VVVV

AT TOP OF PAGE

次の例は、AT TOP OF PAGE ステートメントの説明で参照されています。

ATPEX1R - AT TOP OF PAGE(レポーティングモード)

** Example 'ATPEX1R': AT TOP OF PAGE (reporting mode)                   
************************************************************************
*                                                                       
FORMAT PS=15                                                            
LIMIT 15                                                                
*                                                                       
READ EMPLOYEES BY NAME STARTING FROM 'L'                                
  DISPLAY 2X NAME 4X FIRST-NAME CITY DEPT                               
  WRITE TITLE UNDERLINED 'EMPLOYEE REPORT'                              
  WRITE TRAILER '-' (78)                                                
  /*                                                                    
  AT TOP OF PAGE DO                                                     
    WRITE 'BEGINNING NAME:' NAME                                        
  DOEND                                                                 
  /*                                                                    
  AT END OF PAGE DO                                                     
    SKIP 1                                                              
    WRITE 'ENDING NAME:   ' NAME                                        
  DOEND                                                                 
LOOP
END

DEFINE SUBROUTINE

次の例は、DEFINE SUBROUTINE ステートメントの説明で参照されています。

DSREX1R - DEFINE SUBROUTINE(レポーティングモード)

** Example 'DSREX1R': DEFINE SUBROUTINE (reporting mode)                
************************************************************************
RESET #ARRAY-ALL (A300)                                                 
      #X (N2) #Y (N2)                                                   
REDEFINE #ARRAY-ALL (#ARRAY (A75/1:4))                                  
         #ARRAY-ALL (#ALINE (A25/1:4,1:3))                              
*                                                                       
FORMAT PS=20                                                            
LIMIT 5                                                                 
*                                                                       
MOVE 1 TO #X #Y                                                         
*                                                                       
FIND EMPLOYEES WITH NAME = 'SMITH'                                      
  OBTAIN ADDRESS-LINE (1:2)                                             
  /*                                                                    
  MOVE NAME            TO #ALINE (#X,#Y)                                
  MOVE ADDRESS-LINE(1) TO #ALINE (#X+1,#Y)                              
  MOVE ADDRESS-LINE(2) TO #ALINE (#X+2,#Y)                              
  MOVE PHONE           TO #ALINE (#X+3,#Y)                              
  IF #Y = 3 DO                    
    MOVE 1 TO #Y                  
    PERFORM PRINT                 
  DOEND                           
  ELSE DO                         
    ADD 1 TO #Y                   
  DOEND                           
  AT END OF DATA DO               
    PERFORM PRINT                 
  DOEND                           
LOOP                              
*                                 
DEFINE SUBROUTINE PRINT           
  WRITE NOTITLE (AD=OI) #ARRAY(*) 
  RESET #ARRAY(*)                 
  SKIP 1                          
RETURN                            
*                                 
END

プログラム AEDEX1R の出力:

SMITH                    SMITH                    SMITH             
ENGLANDSVEJ 222          3152 SHETLAND ROAD       14100 ESWORTHY RD.
                         MILWAUKEE                MONTERREY         
554349                   877-4563                 994-2260          
                                                                    
SMITH                    SMITH                                      
5 HAWTHORN               13002 NEW ARDEN COUR                       
OAK BROOK                SILVER SPRING                              
150-9351                 639-8963

FIND

次の例は、FIND ステートメントの説明で参照されています。

FNDFIR - FIRST オプションを指定した FIND ステートメント(レポーティングモード)

** Example 'FNDFIR': FIND FIRST                                         
************************************************************************
*                                                                       
FIND FIRST EMPLOYEES WITH CITY = 'DERBY'                                
*                                                                       
WRITE NOTITLE 'TOTAL RECORDS SELECTED:' *NUMBER                         
SKIP 2                                                                  
WRITE '***FIRST PERSON SELECTED***' //                                  
      'NAME:      ' NAME /                                              
      'DEPARTMENT:' DEPT /                                              
      'JOB TITLE: ' JOB-TITLE                                           
*                                                                       
END

プログラム FNDFIR の出力:

TOTAL RECORDS SELECTED:         141
                                   
                                   
***FIRST PERSON SELECTED***        
                                   
NAME:       DEAKIN                 
DEPARTMENT: SALE01                 
JOB TITLE:  SALES ACCOUNTANT

FNDNUM - NUMBER オプションを指定した FIND ステートメント(レポーティングモード)

** Example 'FNDNUM': FIND NUMBER                                        
************************************************************************
RESET #BIRTH (D)                                                        
*                                                                       
MOVE EDITED '19500101' TO #BIRTH (EM=YYYYMMDD)                          
*                                                                       
FIND NUMBER EMPLOYEES WITH CITY = 'MADRID'                              
                      WHERE BIRTH LT #BIRTH                             
*                                                                       
WRITE NOTITLE 'TOTAL RECORDS SELECTED:       ' *NUMBER                  
            / 'TOTAL BORN BEFORE 1 JAN 1950: ' *COUNTER                 
*                                                                       
END

プログラム FNDNUM の出力:

TOTAL RECORDS SELECTED:                 41
TOTAL BORN BEFORE 1 JAN 1950:           16

FNDUNQ - UNIQUE オプションを指定した FIND ステートメント(レポーティングモード)

** Example 'FNDUNQ': FIND UNIQUE                                        
************************************************************************
RESET #NAME (A20)                                                       
*                                                                       
*                                                                       
INPUT 'ENTER EMPLOYEE NAME: ' #NAME                                     
IF #NAME = ' '                                                          
  STOP                                                                  
*                                                                       
FIND UNIQUE EMPLOYEES WITH NAME = #NAME                                 
*                                                                       
DISPLAY NOTITLE NAME FIRST-NAME JOB-TITLE                               
*                                                                       
ON ERROR DO                                                             
  WRITE 'NAME EITHER NOT UNIQUE OR DOES NOT EXIST'                      
  FETCH 'FNDUNQ'                                                        
DOEND                                                                   
*                                                                       
END

プログラム FNDUNQ の出力:

ENTER EMPLOYEE NAME: HEURTEBISE

名前 HEURTEBISE を入力して確認した後:

        NAME              FIRST-NAME               CURRENT         
                                                  POSITION         
-------------------- -------------------- -------------------------
                                                                   
HEURTEBISE           MICHEL               CONTROLEUR DE GESTION

FOR

次の例は、FOR ステートメントの説明で参照されています。

FOREX1R - FOR(レポーティングモード)

** Example 'FOREX1R': FOR (reporting mode)                              
************************************************************************
RESET #INDEX (I1)                                                       
      #ROOT  (N2.7)                                                     
*                                                                       
FOR #INDEX 1 TO 5                                                       
  COMPUTE #ROOT = SQRT (#INDEX)                                         
  WRITE NOTITLE '=' #INDEX 3X '=' #ROOT                                 
LOOP                                                                    
*                                                                       
SKIP 1                                                                  
FOR #INDEX 1 TO 5 STEP 2                                                
  COMPUTE #ROOT = SQRT (#INDEX)                                         
  WRITE '=' #INDEX 3X '=' #ROOT                                         
LOOP                                                                    
*                                                                       
END

プログラム FOREX1R の出力:

#INDEX:    1   #ROOT:   1.0000000
#INDEX:    2   #ROOT:   1.4142135
#INDEX:    3   #ROOT:   1.7320508
#INDEX:    4   #ROOT:   2.0000000
#INDEX:    5   #ROOT:   2.2360679
                                 
#INDEX:    1   #ROOT:   1.0000000
#INDEX:    3   #ROOT:   1.7320508
#INDEX:    5   #ROOT:   2.2360679

HISTOGRAM

次の例は、HISTOGRAM ステートメントの説明で参照されています。

HSTEX1R - HISTOGRAM(レポーティングモード)

** Example 'HSTEX1R': HISTOGRAM (reporting mode)                        
************************************************************************
*                                                                       
LIMIT 8                                                                 
HISTOGRAM EMPLOYEES CITY STARTING FROM 'M'                              
 DISPLAY NOTITLE CITY                                                   
         'NUMBER OF/PERSONS' *NUMBER *COUNTER                           
LOOP                                                                    
*                                                                       
END

プログラム HSTEX1R の出力:

        CITY          NUMBER OF     CNT     
                       PERSONS              
-------------------- ----------- -----------
                                            
MADISON                        3           1
MADRID                        41           2
MAILLY LE CAMP                 1           3
MAMERS                         1           4
MANSFIELD                      4           5
MARSEILLE                      2           6
MATLOCK                        1           7
MELBOURNE                      2           8

IF

次の例は、IF ステートメントの説明で参照されています。

IFEX1R - IF(レポーティングモード)

** Example 'IFEX1R': IF (reporting mode)                                
************************************************************************
RESET #BIRTH (D)                                                        
*                                                                       
MOVE EDITED '19450101' TO #BIRTH (EM=YYYYMMDD)                          
SUSPEND IDENTICAL SUPPRESS                                              
LIMIT 20                                                                
*                                                                       
FND. FIND EMPLOYEES WITH CITY = 'FRANKFURT'                             
                    SORTED BY NAME BIRTH                                
  IF SALARY (1) LT 40000                                                
    WRITE NOTITLE '*****' NAME 30X 'SALARY LT 40000'                    
  ELSE DO                                                               
    IF BIRTH GT #BIRTH DO                                               
      FIND VEHICLES WITH PERSONNEL-ID = PERSONNEL-ID (FND.)             
        DISPLAY (IS=ON) NAME BIRTH (EM=YYYY-MM-DD)                      
                        SALARY (1) MAKE (AL=8)                          
      LOOP                                                              
    DOEND                                                               
  DOEND
LOOP   
END

プログラム IFEX1R の出力:

        NAME            DATE      ANNUAL     MAKE                      
                         OF       SALARY                               
                       BIRTH                                           
-------------------- ---------- ---------- --------                    
                                                                       
BAECKER              1956-01-05      74400 BMW                         
***** BECKER                                            SALARY LT 40000
BLOEMER              1979-11-07      45200 FIAT                        
FALTER               1954-05-23      70800 FORD                        
***** FALTER                                            SALARY LT 40000
***** GROTHE                                            SALARY LT 40000
***** HEILBROCK                                         SALARY LT 40000
***** HESCHMANN                                         SALARY LT 40000
HUCH                 1952-09-12      67200 MERCEDES                    
***** KICKSTEIN                                         SALARY LT 40000
***** KLEENE                                            SALARY LT 40000
***** KRAMER                                            SALARY LT 40000

PERFORM BREAK PROCESSING

次の例は、PERFORM BREAK PROCESSING ステートメントの説明で参照されています。

PBPEX1R - PERFORM BREAK PROCESSING(レポーティングモード)

** Example 'PBPEX1R': PERFORM BREAK PROCESSING (reporting mode)         
************************************************************************
RESET #LINE (N2) #INDEX (N2)                                            
*                                                                       
MOVE 1 TO #LINE                                                         
FOR #INDEX 1 TO 18                                                      
  PERFORM BREAK PROCESSING                                              
  /*                                                                    
  AT BREAK OF #INDEX /1/ DO                                             
    WRITE NOTITLE / 'PLEASE COMPLETE LINES 1-9 ABOVE' /                 
    MOVE 1 TO #LINE                                                     
  DOEND                                                                 
  /*                                                                    
  WRITE NOTITLE '_' (64) '=' #LINE                                      
  ADD 1 TO #LINE                                                        
LOOP                                                                    
END

プログラム PBPEX1R の出力:

________________________________________________________________ #LINE:   1
________________________________________________________________ #LINE:   2
________________________________________________________________ #LINE:   3
________________________________________________________________ #LINE:   4
________________________________________________________________ #LINE:   5
________________________________________________________________ #LINE:   6
________________________________________________________________ #LINE:   7
________________________________________________________________ #LINE:   8
________________________________________________________________ #LINE:   9
                                                                           
PLEASE COMPLETE LINES 1-9 ABOVE                                            
                                                                           
________________________________________________________________ #LINE:   1
________________________________________________________________ #LINE:   2
________________________________________________________________ #LINE:   3
________________________________________________________________ #LINE:   4
________________________________________________________________ #LINE:   5
________________________________________________________________ #LINE:   6
________________________________________________________________ #LINE:   7
________________________________________________________________ #LINE:   8
________________________________________________________________ #LINE:   9
                                                                           
PLEASE COMPLETE LINES 1-9 ABOVE

READ

次の例は、READ ステートメントの説明で参照されています。

REAEX1R - READ(レポーティングモード)

** Example 'REAEX1R': READ (reporting mode)                             
************************************************************************
LIMIT 3                                                                 
*                                                                       
WRITE 'READ IN PHYSICAL SEQUENCE'                                       
READ EMPLOYEES IN PHYSICAL SEQUENCE                                     
  DISPLAY NOTITLE PERSONNEL-ID NAME *ISN *COUNTER                       
LOOP                                                                    
*                                                                       
WRITE / 'READ IN ISN SEQUENCE'                                          
READ EMPLOYEES BY ISN STARTING FROM 1 ENDING AT 3                       
  DISPLAY PERSONNEL-ID NAME *ISN *COUNTER                               
LOOP                                                                    
*                                                                       
WRITE / 'READ IN NAME SEQUENCE'                                         
READ EMPLOYEES BY NAME                                                  
  DISPLAY PERSONNEL-ID NAME *ISN *COUNTER                               
LOOP                                                                    
*                                                                       
WRITE / 'READ IN NAME SEQUENCE STARTING FROM ''M'''
READ EMPLOYEES BY NAME STARTING FROM 'M'           
  DISPLAY PERSONNEL-ID NAME *ISN *COUNTER          
LOOP                                               
*                                                  
END

プログラム REAEX1R の出力:

PERSONNEL         NAME            ISN         CNT      
   ID                                                  
--------- -------------------- ----------- ----------- 
                                                       
READ IN PHYSICAL SEQUENCE                              
50005800  ADAM                           1           1 
50005600  MORENO                         2           2 
50005500  BLOND                          3           3 
                                                       
READ IN ISN SEQUENCE                                   
50005800  ADAM                           1           1 
50005600  MORENO                         2           2 
50005500  BLOND                          3           3 
                                                       
READ IN NAME SEQUENCE                                  
60008339  ABELLAN                      478           1 
30000231  ACHIESON                     878           2 
50005800  ADAM                           1           3 
                                                       
READ IN NAME SEQUENCE STARTING FROM 'M'                
30008125  MACDONALD                    923           1 
20028700  MACKARNESS                   765           2 
40000045  MADSEN                       508           3

REPEAT

次の例は、REPEAT ステートメントの説明で参照されています。

RPTEX1R - REPEAT(レポーティングモード)

** Example 'RPTEX1R': REPEAT (reporting mode)                           
************************************************************************
RESET #PERS-NR (A8)                                                     
*                                                                       
REPEAT                                                                  
  INPUT 'ENTER A PERSONNEL NUMBER:' #PERS-NR                            
  IF #PERS-NR = ' '                                                     
    ESCAPE BOTTOM                                                       
  FIND EMPLOYEES WITH PERSONNEL-ID = #PERS-NR                           
    IF NO RECORD FOUND                                                  
      REINPUT 'NO RECORD FOUND'                                         
    DISPLAY NOTITLE NAME                                                
  LOOP                                                                  
LOOP                                                                    
*                                                                       
END

プログラム RPTEX1R の出力:

ENTER A PERSONNEL NUMBER:

RPTEX2R - WHILE および UNTIL オプションを指定した REPEAT(レポーティングモード)

** Example 'RPTEX2R': REPEAT (with WHILE and UNTIL option)              
************************************************************************
RESET #X (I1) #Y (I1)                                                   
*                                                                       
*                                                                       
REPEAT WHILE #X <= 5                                                    
  ADD 1 TO #X                                                           
  WRITE NOTITLE '=' #X                                                  
LOOP                                                                    
*                                                                       
SKIP 3                                                                  
REPEAT                                                                  
  ADD 1 TO #Y                                                           
  WRITE '=' #Y                                                          
  UNTIL #Y = 6                                                          
LOOP                                                                    
*                                                                       
END

プログラム RPTEX2R の出力:

#X:    1 
#X:    2 
#X:    3 
#X:    4 
#X:    5 
#X:    6 
         
         
         
#Y:    1 
#Y:    2 
#Y:    3 
#Y:    4 
#Y:    5 
#Y:    6

SORT

次の例は、SORT ステートメントの説明で参照されています。

SRTEX1R - SORT(レポーティングモード)

** Example 'SRTEX1R': SORT (reporting mode)                             
************************************************************************
RESET #AVG (P11) #TOTAL-TOTAL (P11) #TOTAL-SALARY (P11)                 
      #AVER-PERCENT (N3.2)                                              
*                                                                       
LIMIT 3                                                                 
FIND EMPLOYEES WITH CITY = 'BOSTON'                                     
  OBTAIN SALARY(1:2)                                                    
  COMPUTE #TOTAL-SALARY = SALARY (1) + SALARY (2)                       
  ACCEPT IF #TOTAL-SALARY GT 0                                          
  /*                                                                    
  SORT BY PERSONNEL-ID USING #TOTAL-SALARY SALARY(*) CURR-CODE          
       GIVE AVER(#TOTAL-SALARY)                                         
  /*                                                                    
  AT START OF DATA DO                                                   
    WRITE NOTITLE '*' (40)                                              
          'AVG CUMULATIVE SALARY:' *AVER (#TOTAL-SALARY) /              
    MOVE *AVER (#TOTAL-SALARY) TO #AVG                                  
  DOEND                                                                 
  COMPUTE ROUNDED #AVER-PERCENT = #TOTAL-SALARY / #AVG * 100
  ADD #TOTAL-SALARY TO #TOTAL-TOTAL                         
  /*                                                        
  DISPLAY NOTITLE PERSONNEL-ID SALARY (1) SALARY (2)        
          #TOTAL-SALARY CURR-CODE (1)                       
          'PERCENT/OF/AVER' #AVER-PERCENT                   
  AT END OF DATA                                            
    WRITE / '*' (40) 'TOTAL SALARIES PAID: ' #TOTAL-TOTAL   
LOOP                                                        
*                                                           
END

プログラム SRTEX1R の出力:

PERSONNEL   ANNUAL     ANNUAL   #TOTAL-SALARY CURRENCY PERCENT              
   ID       SALARY     SALARY                   CODE     OF                 
                                                        AVER                
--------- ---------- ---------- ------------- -------- -------              
                                                                            
**************************************** AVG CUMULATIVE SALARY:        44633
                                                                            
20000100       31000      29400        60400  USD       135.30              
20019200       18000      17100        35100  USD        78.60              
20020400       20000      18400        38400  USD        86.00              
                                                                            
**************************************** TOTAL SALARIES PAID:        133900

STORE

次の例は、STORE ステートメントの説明で参照されています。

STOEX1R - STORE(レポーティングモード)

** Example 'STOEX1R': STORE  (reporting mode)                           
**                                                                      
** CAUTION: Executing this example will modify the database records!    
************************************************************************
RESET #PERSONNEL-ID (A8)                                                
      #NAME         (A20)                                               
      #FIRST-NAME   (A15)                                               
      #BIRTH-D      (D)                                                 
      #MAR-STAT     (A1)                                                
      #BIRTH        (A8)                                                
      #CITY         (A20)                                               
      #COUNTRY      (A3)                                                
      #CONF         (A1)                                                
*                                                                       
REPEAT                                                                  
  INPUT 'ENTER A PERSONNEL ID AND NAME (OR ''END'' TO END)' //          
        'PERSONNEL-ID : ' #PERSONNEL-ID  //                             
        'NAME         : ' #NAME          /                              
        'FIRST-NAME   : ' #FIRST-NAME                                   
  /*                                                             
  /*  VALIDATE ENTERED DATA                                      
  /*                                                             
  IF #PERSONNEL-ID = 'END' OR #NAME = 'END'                      
    STOP                                                         
  IF #NAME = ' '                                                 
    REINPUT WITH TEXT 'ENTER A LAST-NAME' MARK 2 AND SOUND ALARM 
  IF #FIRST-NAME = ' '                                           
    REINPUT WITH TEXT 'ENTER A FIRST-NAME' MARK 3 AND SOUND ALARM
  /*                                                             
  /*  ENSURE PERSON IS NOT ALREADY ON FILE                       
  /*                                                             
  FIND NUMBER EMPLOYEES WITH PERSONNEL-ID =  #PERSONNEL-ID       
  IF *NUMBER > 0                                                 
    REINPUT 'PERSON WITH SAME PERSONNEL-ID ALREADY EXISTS'       
            MARK 1 AND SOUND ALARM                               
  MOVE 'N' TO #CONF                                              
  /*                                                             
  /*  GET FURTHER INFORMATION                                    
  /*                                                           
  INPUT                                                        
    'ADDITIONAL PERSONNEL DATA'                        ////    
    'PERSONNEL-ID             :' #PERSONNEL-ID (AD=IO) /       
    'NAME                     :' #NAME         (AD=IO) /       
    'FIRST-NAME               :' #FIRST-NAME   (AD=IO) ///     
    'MARITAL STATUS           :' #MAR-STAT             /       
    'DATE OF BIRTH (YYYYMMDD) :' #BIRTH                /       
    'CITY                     :' #CITY                 /       
    'COUNTRY (3 CHARACTERS)   :' #COUNTRY              //      
    'ADD THIS RECORD (Y/N)    :' #CONF          (AD=M)         
  /*                                                           
  /*   ENSURE REQUIRED FIELDS CONTAIN VALID DATA               
  /*                                                           
  IF NOT (#MAR-STAT = 'S'  OR = 'M' OR = 'D' OR = 'W')         
    REINPUT TEXT 'ENTER VALID MARITAL STATUS  S=SINGLE ' -     
                 'M=MARRIED D=DIVORCED W=WIDOWED' MARK 1       
  IF NOT (#BIRTH = MASK(YYYYMMDD) AND #BIRTH = MASK(1582-2699))
    REINPUT TEXT 'ENTER CORRECT DATE' MARK 2                   
  IF #CITY  = ' '                                
    REINPUT TEXT 'ENTER A CITY NAME' MARK 3      
  IF #COUNTRY = ' '                              
    REINPUT TEXT 'ENTER A COUNTRY CODE' MARK 4   
  IF NOT (#CONF = 'N' OR= 'Y')                   
    REINPUT TEXT 'ENTER Y (YES) OR N (NO)' MARK 5
  IF #CONF = 'N'                                 
    ESCAPE TOP                                   
  /*                                             
  /*  ADD THE RECORD                             
  /*                                             
  MOVE EDITED #BIRTH TO #BIRTH-D (EM=YYYYMMDD)   
  /*                                             
  STORE RECORD IN EMPLOYEES                      
     WITH PERSONNEL-ID = #PERSONNEL-ID           
          NAME         = #NAME                   
          FIRST-NAME   = #FIRST-NAME             
          MAR-STAT     = #MAR-STAT               
          BIRTH        = #BIRTH-D                
          CITY         = #CITY         
          COUNTRY      = #COUNTRY      
  END OF TRANSACTION                   
  /*                                   
  WRITE NOTITLE 'RECORD HAS BEEN ADDED'
  /*                                   
LOOP                                   
END

UPDATE

次の例は、UPDATE ステートメントの説明で参照されています。

UPDEX1R - UPDATE(レポーティングモード)

** Example 'UPDEX1R': UPDATE (reporting mode)                           
**                                                                      
** CAUTION: Executing this example will modify the database records!    
************************************************************************
RESET #NAME (A20)                                                       
*                                                                       
INPUT 'ENTER A NAME:' #NAME (AD=M)                                      
IF #NAME = ' '                                                          
  STOP                                                                  
*                                                                       
FIND EMPLOYEES WITH NAME = #NAME                                        
  IF NO RECORDS FOUND                                                   
    REINPUT WITH 'NO RECORDS FOUND'  MARK 1                             
  /*                                                                    
  INPUT 'NAME:      ' NAME (AD=O) /                                     
        'FIRST NAME:' FIRST-NAME (AD=M) /                               
        'CITY:      ' CITY (AD=M)                                       
  /*                                                                    
  UPDATE USING SAME RECORD                                              
  /*             
  END TRANSACTION
  /*             
LOOP             
*                
END

プログラム UPDEX1R の出力:

ENTER A NAME:

システム変数のプログラム例

次の例は、*OCCURRENCE システム変数の説明で参照されています。

OCC1P - システム変数 *OCCURRENCE

** Example 'OCC1P': *OCCURRENCE                                         
************************************************************************
DEFINE DATA LOCAL                                                       
1 #N1 (N7/1:10)                                                         
1 #N2 (N7/1:10,1:10)                                                    
1 #N3 (N7/1:10,1:10,1:10)                                               
END-DEFINE                                                              
*                                                                       
CALLNAT 'OCC1N' #N1(*) #N2(1:2,1:4) #N3(1:6,1:7,1:8)                    
*                                                                       
END

プログラム OCC1P で呼び出されたサブプログラム OCC1N

** Example 'OCC1N': *OCCURRENCE (called by OCC1P)                     
**********************************************************************
DEFINE DATA                                                           
PARAMETER                                                             
1 PARM1 (N7/1:V)                                                      
1 PARM2 (N7/1:V,1:V)                                                  
1 PARM3 (N7/1:V,1:V,1:V)                                              
LOCAL                                                                 
1 #OCC2 (I4/1:2)                                                      
1 #OCC3 (I4/1:3)                                                      
1 #OCC1 (I4)                                                          
END-DEFINE                                                            
*                                                                     
MOVE *OCC(PARM1)   TO #OCC1                                           
MOVE *OCC(PARM2,*) TO #OCC2(*)                                        
MOVE *OCC(PARM3,*) TO #OCC3(*)                                        
*                                                                     
DISPLAY #OCC1 #OCC2(*) #OCC3(*)                                       
DISPLAY *OCC(PARM1,*) *OCC(PARM2,*) *OCC(PARM3,*)                     
*                                                               
NEWPAGE                                                         
*                                                               
WRITE NOHDR                                                     
      'Occurrences of 1. parameter:' *OCC(PARM1)                
    / 'Occurrences of 1. parameter:' *OCC(PARM1,1)              
    / 'Occurrences of 1. parameter:' *OCC(PARM1,*)              
    / 'Occurrences of 2. parameter:' *OCC(PARM2,1) *OCC(PARM2,2)
    / 'Occurrences of 2. parameter:' *OCC(PARM2,*)              
    / 'Occurrences of 3. parameter:' *OCC(PARM3,1) *OCC(PARM3,2)
                                     *OCC(PARM3,3)              
    / 'Occurrences of 3. parameter:' *OCC(PARM3,*)              
*                                                               
END

プログラム OCC1P の出力 - ページ 1:

Page      1                                                  05-01-18  10:21:30
                                                                               
   #OCC1       #OCC2       #OCC3                                               
----------- ----------- -----------                                            
                                                                               
         10           2           6                                            
                      4           7                                            
                                  8                                            
         10           2           6                                            
                      4           7                                            
                                  8

プログラム OCC1P の出力 - ページ 2:

Page      2                                                  05-01-18  10:21:30
                                                                               
Occurrences of 1. parameter:          10                                       
Occurrences of 1. parameter:          10                                       
Occurrences of 1. parameter:          10                                       
Occurrences of 2. parameter:           2           4                           
Occurrences of 2. parameter:           2           4                           
Occurrences of 3. parameter:           6           7           8               
Occurrences of 3. parameter:           6           7           8

OCC2P - システム変数 *OCCURRENCE

** Example 'OCC2P': *OCCURRENCE                                         
************************************************************************
DEFINE DATA LOCAL                                                       
1 #N (N7/1:10)                                                          
1 #I (I4)                                                               
END-DEFINE                                                              
*                                                                       
FOR #I=1 TO 10                                                          
  MOVE #I TO #N(#I)                                                     
END-FOR                                                                 
*                                                                       
WRITE 'Passing occurrences 1:5'                                          
CALLNAT 'OCC2N' #N(1:5)                                                 
*                                                                       
WRITE 'Passing occurrences 5:10'                                         
CALLNAT 'OCC2N' #N(5:10)                                                
*                                                                       
END

プログラム OCC2P で呼び出されたサブプログラム OCC2N

** Example 'OCC2N': *OCCURRENCE (called by OCC2P)                     
**********************************************************************
DEFINE DATA                                                           
PARAMETER                                                             
1 #ARR (N7/1:V)                                                       
LOCAL                                                                 
1 I    (N7)                                                           
END-DEFINE                                                            
*                                                                     
FOR I=1 TO *OCC(#ARR)                                                 
  DISPLAY #ARR(I)                                                     
END-FOR                                                               
*                                                                     
END

プログラム OCC2P の出力:

Page      1                                                  05-01-18  10:33:03
                                                                               
Passing occurrences 1:5                                                         
       1                                                                       
       2                                                                       
       3                                                                       
       4                                                                       
       5                                                                       
Passing occurrences 5:10                                                        
       5                                                                       
       6                                                                       
       7                                                                       
       8                                                                       
       9                                                                       
      10