COBOL - Exemplos simples - PERFORM VARYING UNTIL AFTER TRIDIMENSIONAL



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

COBOL - Exemplos simples - PERFORM VARYING UNTIL AFTER TRIDIMENSIONAL

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 três DEPARTAMENTOS e cada departamento 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.

       01  TABELA-DEPARTAMENTO.
           05 EMPRESA                     OCCURS 2 TIMES.
              10  NOME-EMPRESA      PIC X(20).
              10  DEPARTAMENTO            OCCURS 3 TIMES.
                  15 NOME-DEPTO     PIC X(20).
                  15 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 "Marketing    " TO NOME-DEPTO (1 3)

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

           MOVE "Carlos       " TO NOME-EMPRE (1 1 1)	
           MOVE "Alberto      " TO NOME-EMPRE (1 1 2)	
           MOVE "Augusto      " TO NOME-EMPRE (1 2 1)	
           MOVE "Eduardo      " TO NOME-EMPRE (1 2 2)	
           MOVE "Lourdes      " TO NOME-EMPRE (1 3 1)	
           MOVE "Maria        " TO NOME-EMPRE (1 3 2)
           
           MOVE "João         " TO NOME-EMPRE (2 1 1)	
           MOVE "Ricardo      " TO NOME-EMPRE (2 1 2)	
           MOVE "Junior       " TO NOME-EMPRE (2 2 1)	
           MOVE "Anselmo      " TO NOME-EMPRE (2 2 2)	
           MOVE "Rita         " TO NOME-EMPRE (2 3 1)	
           MOVE "Ivana        " TO NOME-EMPRE (2 3 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 > 3
                 PERFORM VARYING WS-DEPTO-03 FROM 1 BY 1
                           UNTIL WS-DEPTO-03 > 2
                    PERFORM PARAGRAFO-1 THRU PARAGRAFO-1-SAI
                 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 > 3
                  AFTER   WS-DEPTO-03 FROM 1 BY 1
                          UNTIL WS-DEPTO-03 > 2.
           STOP RUN.

       PARAGRAFO-1.

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

       PARAGRAFO-1-SAI.
           EXIT.
Resultado do teste
--------------------------------------------------------------------------------------------
Usando PERFORM VARYING UNTIL encadeados
--------------------------------------------------------------------------------------------
EMPRESA     : Empresa 01           DEPARTAMENTO: Faturamento          EMPREGADO   : Carlos
EMPRESA     : Empresa 01           DEPARTAMENTO: Faturamento          EMPREGADO   : Alberto
EMPRESA     : Empresa 01           DEPARTAMENTO: Qualidade            EMPREGADO   : Augusto
EMPRESA     : Empresa 01           DEPARTAMENTO: Qualidade            EMPREGADO   : Eduardo
EMPRESA     : Empresa 01           DEPARTAMENTO: Marketing            EMPREGADO   : Lourdes
EMPRESA     : Empresa 01           DEPARTAMENTO: Marketing            EMPREGADO   : Maria
EMPRESA     : Empresa 02           DEPARTAMENTO: Contabilidade        EMPREGADO   : João
EMPRESA     : Empresa 02           DEPARTAMENTO: Contabilidade        EMPREGADO   : Ricardo
EMPRESA     : Empresa 02           DEPARTAMENTO: Loja                 EMPREGADO   : Junior
EMPRESA     : Empresa 02           DEPARTAMENTO: Loja                 EMPREGADO   : Anselmo
EMPRESA     : Empresa 02           DEPARTAMENTO: Esportes             EMPREGADO   : Rita
EMPRESA     : Empresa 02           DEPARTAMENTO: Esportes             EMPREGADO   : Ivana
--------------------------------------------------------------------------------------------
Usando PERFORM VARYING UNTIL AFTER
--------------------------------------------------------------------------------------------
EMPRESA     : Empresa 01           DEPARTAMENTO: Faturamento          EMPREGADO   : Carlos
EMPRESA     : Empresa 01           DEPARTAMENTO: Faturamento          EMPREGADO   : Alberto
EMPRESA     : Empresa 01           DEPARTAMENTO: Qualidade            EMPREGADO   : Augusto
EMPRESA     : Empresa 01           DEPARTAMENTO: Qualidade            EMPREGADO   : Eduardo
EMPRESA     : Empresa 01           DEPARTAMENTO: Marketing            EMPREGADO   : Lourdes
EMPRESA     : Empresa 01           DEPARTAMENTO: Marketing            EMPREGADO   : Maria
EMPRESA     : Empresa 02           DEPARTAMENTO: Contabilidade        EMPREGADO   : João
EMPRESA     : Empresa 02           DEPARTAMENTO: Contabilidade        EMPREGADO   : Ricardo
EMPRESA     : Empresa 02           DEPARTAMENTO: Loja                 EMPREGADO   : Junior
EMPRESA     : Empresa 02           DEPARTAMENTO: Loja                 EMPREGADO   : Anselmo
EMPRESA     : Empresa 02           DEPARTAMENTO: Esportes             EMPREGADO   : Rita
EMPRESA     : Empresa 02           DEPARTAMENTO: Esportes             EMPREGADO   : Ivana