COBOL - Exemplos simples - PERFORM VARYING UNTIL AFTER QUADRIMENSIONAL



Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

COBOL - Exemplos simples - PERFORM VARYING UNTIL AFTER QUADRIMENSIONAL

Um bloco de uma instrução ou um parágrafo/seção será executado em PERFORM VARYING até que a condição se torne verdadeira na frase UNTIL.

No exemplo abaixo são duas EMPRESAS, cada empresa com dois DEPARTAMENTOS, cada departamento com duas SEÇÕES e cada seção com dois EMPREGADOS.


       IDENTIFICATION DIVISION.                                         
       PROGRAM-ID.       PERFORM.                                      
       AUTHOR.           DORNELLES CARLOS ALBERTO.                      
       ENVIRONMENT DIVISION.                                            
    
       CONFIGURATION SECTION.                                           
       SPECIAL-NAMES.                                                   
               DECIMAL-POINT IS COMMA. 

       DATA DIVISION.

       WORKING-STORAGE SECTION.                                         

       01  WS-AUXILIARES.
           05 WS-DEPTO-01             PIC 9(002) VALUE ZEROES.
           05 WS-DEPTO-02             PIC 9(002) VALUE ZEROES.
           05 WS-DEPTO-03             PIC 9(002) VALUE ZEROES.
           05 WS-DEPTO-04             PIC 9(002) VALUE ZEROES.

       01  TABELA-DEPARTAMENTO.
           05 EMPRESA                           OCCURS 2 TIMES.
              10  NOME-EMPRESA        PIC X(20).
              10  DEPARTAMENTO                  OCCURS 2 TIMES.
                  15 NOME-DEPTO       PIC X(20).
                  15 SECAO                      OCCURS 2 TIMES.
                     20 NOME-SECAO    PIC X(20).
                     20 NOME-EMPRE    PIC X(20) OCCURS 2 TIMES. 

       PROCEDURE DIVISION.

           MOVE "Empresa 01   " TO NOME-EMPRESA (1)
           MOVE "Empresa 02   " TO NOME-EMPRESA (2)

           MOVE "Faturamento  " TO NOME-DEPTO (1 1)
           MOVE "Qualidade    " TO NOME-DEPTO (1 2)

           MOVE "Contabilidade" TO NOME-DEPTO (2 1)
           MOVE "Loja         " TO NOME-DEPTO (2 2)

           MOVE "AAAAAAAA     " TO NOME-SECAO (1 1 1)
           MOVE "BBBBBBBB     " TO NOME-SECAO (1 1 2)
           MOVE "CCCCCCCC     " TO NOME-SECAO (1 2 1)
           MOVE "DDDDDDDD     " TO NOME-SECAO (1 2 2)

           MOVE "EEEEEEEE     " TO NOME-SECAO (2 1 1)
           MOVE "FFFFFFFF     " TO NOME-SECAO (2 1 2)
           MOVE "GGGGGGGG     " TO NOME-SECAO (2 2 1)
           MOVE "HHHHHHHH     " TO NOME-SECAO (2 2 2)
                                               
           MOVE "Carlos       " TO NOME-EMPRE (1 1 1 1)	
           MOVE "Alberto      " TO NOME-EMPRE (1 1 1 2)	
           MOVE "José         " to NOME-EMPRE (1 1 2 1)
           MOVE "Lili         " to NOME-EMPRE (1 1 2 2)
           MOVE "Augusto      " TO NOME-EMPRE (1 2 1 1)	
           MOVE "Eduardo      " TO NOME-EMPRE (1 2 1 2)	
           MOVE "Manuel       " TO NOME-EMPRE (1 2 2 1)	
           MOVE "Eduardo      " TO NOME-EMPRE (1 2 2 2)	
           
           MOVE "Carlos 1     " TO NOME-EMPRE (2 1 1 1)	
           MOVE "Alberto 1    " TO NOME-EMPRE (2 1 1 2)	
           MOVE "José 1       " to NOME-EMPRE (2 1 2 1)
           MOVE "Lili 1       " to NOME-EMPRE (2 1 2 2)
           MOVE "Augusto 1    " TO NOME-EMPRE (2 2 1 1)	
           MOVE "Eduardo 1    " TO NOME-EMPRE (2 2 1 2)	
           MOVE "Manuel 1     " TO NOME-EMPRE (2 2 2 1)	
           MOVE "Eduardo 1    " TO NOME-EMPRE (2 2 2 2)	

           DISPLAY "--------------------------------------------------------------------------------------------"
           DISPLAY "Usando PERFORM VARYING UNTIL encadeados"
           DISPLAY "--------------------------------------------------------------------------------------------"
           
           PERFORM VARYING WS-DEPTO-01 FROM 1 BY 1
                     UNTIL WS-DEPTO-01 > 2
              PERFORM VARYING WS-DEPTO-02 FROM 1 BY 1
                        UNTIL WS-DEPTO-02 > 2
                 PERFORM VARYING WS-DEPTO-03 FROM 1 BY 1
                           UNTIL WS-DEPTO-03 > 2
                    PERFORM VARYING WS-DEPTO-04 FROM 1 BY 1
                              UNTIL WS-DEPTO-04 > 2
                       PERFORM PARAGRAFO-1 THRU PARAGRAFO-1-SAI
                    END-PERFORM                                                     
                 END-PERFORM                                                     
              END-PERFORM                                                     
           END-PERFORM
           
           DISPLAY "--------------------------------------------------------------------------------------------"
           DISPLAY "Usando PERFORM VARYING UNTIL AFTER"
           DISPLAY "--------------------------------------------------------------------------------------------"

           PERFORM PARAGRAFO-1 THRU PARAGRAFO-1-SAI
                  VARYING WS-DEPTO-01 FROM 1 BY 1
                          UNTIL WS-DEPTO-01 > 2
                  AFTER   WS-DEPTO-02 FROM 1 BY 1
                          UNTIL WS-DEPTO-02 > 2
                  AFTER   WS-DEPTO-03 FROM 1 BY 1
                          UNTIL WS-DEPTO-03 > 2
                  AFTER   WS-DEPTO-04 FROM 1 BY 1
                          UNTIL WS-DEPTO-04 > 2

           STOP RUN.

       PARAGRAFO-1.

           DISPLAY " EMPRESA     : "  NOME-EMPRESA (WS-DEPTO-01)
                   " DEPARTAMENTO: "  NOME-DEPTO   (WS-DEPTO-01
                                                    WS-DEPTO-02)
                   " SECAO       : "  NOME-SECAO   (WS-DEPTO-01
                                                    WS-DEPTO-02
                                                    WS-DEPTO-03)
                   " EMPREGADO   : "  NOME-EMPRE   (WS-DEPTO-01
                                                    WS-DEPTO-02
                                                    WS-DEPTO-03
                                                    WS-DEPTO-04).

       PARAGRAFO-1-SAI.
           EXIT.
Resultado do teste
--------------------------------------------------------------------------------------------------------------------------------
Usando PERFORM VARYING UNTIL encadeados
--------------------------------------------------------------------------------------------------------------------------------
 EMPRESA     : Empresa 01           DEPARTAMENTO: Faturamento          SECAO       : AAAAAAAA             EMPREGADO   : Carlos
 EMPRESA     : Empresa 01           DEPARTAMENTO: Faturamento          SECAO       : AAAAAAAA             EMPREGADO   : Alberto
 EMPRESA     : Empresa 01           DEPARTAMENTO: Faturamento          SECAO       : BBBBBBBB             EMPREGADO   : José
 EMPRESA     : Empresa 01           DEPARTAMENTO: Faturamento          SECAO       : BBBBBBBB             EMPREGADO   : Lili
 EMPRESA     : Empresa 01           DEPARTAMENTO: Qualidade            SECAO       : CCCCCCCC             EMPREGADO   : Augusto
 EMPRESA     : Empresa 01           DEPARTAMENTO: Qualidade            SECAO       : CCCCCCCC             EMPREGADO   : Eduardo
 EMPRESA     : Empresa 01           DEPARTAMENTO: Qualidade            SECAO       : DDDDDDDD             EMPREGADO   : Manuel
 EMPRESA     : Empresa 01           DEPARTAMENTO: Qualidade            SECAO       : DDDDDDDD             EMPREGADO   : Eduardo
 EMPRESA     : Empresa 02           DEPARTAMENTO: Contabilidade        SECAO       : EEEEEEEE             EMPREGADO   : Carlos 1
 EMPRESA     : Empresa 02           DEPARTAMENTO: Contabilidade        SECAO       : EEEEEEEE             EMPREGADO   : Alberto 1
 EMPRESA     : Empresa 02           DEPARTAMENTO: Contabilidade        SECAO       : FFFFFFFF             EMPREGADO   : José 1
 EMPRESA     : Empresa 02           DEPARTAMENTO: Contabilidade        SECAO       : FFFFFFFF             EMPREGADO   : Lili 1
 EMPRESA     : Empresa 02           DEPARTAMENTO: Loja                 SECAO       : GGGGGGGG             EMPREGADO   : Augusto 1
 EMPRESA     : Empresa 02           DEPARTAMENTO: Loja                 SECAO       : GGGGGGGG             EMPREGADO   : Eduardo 1
 EMPRESA     : Empresa 02           DEPARTAMENTO: Loja                 SECAO       : HHHHHHHH             EMPREGADO   : Manuel 1
 EMPRESA     : Empresa 02           DEPARTAMENTO: Loja                 SECAO       : HHHHHHHH             EMPREGADO   : Eduardo 1
--------------------------------------------------------------------------------------------------------------------------------
Usando PERFORM VARYING UNTIL AFTER
--------------------------------------------------------------------------------------------------------------------------------
 EMPRESA     : Empresa 01           DEPARTAMENTO: Faturamento          SECAO       : AAAAAAAA             EMPREGADO   : Carlos
 EMPRESA     : Empresa 01           DEPARTAMENTO: Faturamento          SECAO       : AAAAAAAA             EMPREGADO   : Alberto
 EMPRESA     : Empresa 01           DEPARTAMENTO: Faturamento          SECAO       : BBBBBBBB             EMPREGADO   : José
 EMPRESA     : Empresa 01           DEPARTAMENTO: Faturamento          SECAO       : BBBBBBBB             EMPREGADO   : Lili
 EMPRESA     : Empresa 01           DEPARTAMENTO: Qualidade            SECAO       : CCCCCCCC             EMPREGADO   : Augusto
 EMPRESA     : Empresa 01           DEPARTAMENTO: Qualidade            SECAO       : CCCCCCCC             EMPREGADO   : Eduardo
 EMPRESA     : Empresa 01           DEPARTAMENTO: Qualidade            SECAO       : DDDDDDDD             EMPREGADO   : Manuel
 EMPRESA     : Empresa 01           DEPARTAMENTO: Qualidade            SECAO       : DDDDDDDD             EMPREGADO   : Eduardo
 EMPRESA     : Empresa 02           DEPARTAMENTO: Contabilidade        SECAO       : EEEEEEEE             EMPREGADO   : Carlos 1
 EMPRESA     : Empresa 02           DEPARTAMENTO: Contabilidade        SECAO       : EEEEEEEE             EMPREGADO   : Alberto 1
 EMPRESA     : Empresa 02           DEPARTAMENTO: Contabilidade        SECAO       : FFFFFFFF             EMPREGADO   : José 1
 EMPRESA     : Empresa 02           DEPARTAMENTO: Contabilidade        SECAO       : FFFFFFFF             EMPREGADO   : Lili 1
 EMPRESA     : Empresa 02           DEPARTAMENTO: Loja                 SECAO       : GGGGGGGG             EMPREGADO   : Augusto 1
 EMPRESA     : Empresa 02           DEPARTAMENTO: Loja                 SECAO       : GGGGGGGG             EMPREGADO   : Eduardo 1
 EMPRESA     : Empresa 02           DEPARTAMENTO: Loja                 SECAO       : HHHHHHHH             EMPREGADO   : Manuel 1
 EMPRESA     : Empresa 02           DEPARTAMENTO: Loja                 SECAO       : HHHHHHHH             EMPREGADO   : Eduardo 1