COBOL - Exemplos simples - SEARCH - COM MAIS DE 1 (HUM) WHEN



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

COBOL - Exemplos simples - SEARCH - COM MAIS DE 1 (HUM) WHEN
  • SEARCH funciona assim:
    • SEARCH no nome-da-matriz começa com o valor inicial do índice associado.
    • Se alguma das condições 1, 2, 3, etc. for satisfeita, a respectiva instrução imperativa será executada e SEARCH será encerrado e o índice permanecerá definido no ponto em que a condição foi atendida.
    • Se nenhuma das condições for atendida, o índice é auto-incrementado em 1.
      A pesquisa continua até que o final da matriz ou condição seja atendida.
    • AT END da pesquisa, imperative-statement-1 será executado e o índice terá um valor imprevisível
Sintaxe básica:

SEARCH array-name
       AT END imperative-statement-1
     WHEN condition-1
          imperative-statement-2
     WHEN condition-2
          imperative-statement-3 ...
     WHEN condition-3
          imperative-statement-4 ...
END-SEARCH

      *-----------------------------------------------------------------
       IDENTIFICATION DIVISION.       
      *-----------------------------------------------------------------
       PROGRAM-ID.    SEARCH.                                  
       AUTHOR.        DORNELLES CARLOS ALBERTO.

      *-----------------------------------------------------------------
       ENVIRONMENT DIVISION.                                            
      *-----------------------------------------------------------------
       CONFIGURATION SECTION.                                           
       SPECIAL-NAMES.                                                   
               DECIMAL-POINT IS COMMA. 

      *-----------------------------------------------------------------
       DATA DIVISION.
      *-----------------------------------------------------------------

       WORKING-STORAGE SECTION.                                         

       01  WS-TABELA-ESTADOS.                                           
           05 TAB-NOME-UF.                                              
              10  FILLER       PIC X(023) VALUE "ACACRE               01".
              10  FILLER       PIC X(023) VALUE "ALALAGOAS            02".
              10  FILLER       PIC X(023) VALUE "AMAMAZONAS           03".
              10  FILLER       PIC X(023) VALUE "APAMAPA              04".
              10  FILLER       PIC X(023) VALUE "BABAHIA              05".
              10  FILLER       PIC X(023) VALUE "CECEARA              06".
              10  FILLER       PIC X(023) VALUE "DFDISTRITO FEDERAL   07".
              10  FILLER       PIC X(023) VALUE "ESESPIRITO SANTO     08".
              10  FILLER       PIC X(023) VALUE "GOGOIAS              09".
              10  FILLER       PIC X(023) VALUE "MAMARANHAO           10".
              10  FILLER       PIC X(023) VALUE "MGMINAS GERAIS       11".
              10  FILLER       PIC X(023) VALUE "MSMATO GROSSO DO SUL 12".
              10  FILLER       PIC X(023) VALUE "MTMATO GROSSO        13".
              10  FILLER       PIC X(023) VALUE "PAPARA               14".
              10  FILLER       PIC X(023) VALUE "PBPARAIBA            15".
              10  FILLER       PIC X(023) VALUE "PEPERNAMBUCO         16".
              10  FILLER       PIC X(023) VALUE "PIPIAUI              17".
              10  FILLER       PIC X(023) VALUE "PRPARANA             18".
              10  FILLER       PIC X(023) VALUE "RJRIO DE JANEIRO     19".
              10  FILLER       PIC X(023) VALUE "RNRIO GRANDE DO NORTE20".
              10  FILLER       PIC X(023) VALUE "RORONDONIA           21".
              10  FILLER       PIC X(023) VALUE "RRRORAIAMA           22".
              10  FILLER       PIC X(023) VALUE "RSRIO GRANDE DO SUL  23".
              10  FILLER       PIC X(023) VALUE "SCSANTA CATARINA     24".
              10  FILLER       PIC X(023) VALUE "SESERGIPE            25".
              10  FILLER       PIC X(023) VALUE "SPSAO PAULO          26".
              10  FILLER       PIC X(023) VALUE "TOTOCANTINS          27".
           05 TAB-NOME-UF-R    REDEFINES  TAB-NOME-UF.                  
              10  WS-CAJUGUDU  OCCURS 27 TIMES                          
                               ASCENDING KEY SIGLA-UF 
                               INDEXED BY IX-TAB.                       
                  15  SIGLA-UF   PIC X(002).                              
                  15  NOME-UF    PIC X(019).                              
                  15  NUMERO-UF  PIC 9(002).

       01  WS-AUXILIARES.                                               
           05 NAO-ACHOU-NADA             PIC 9(003) VALUE ZEROES.       
           05 WS-SIGLA-UF                PIC X(002) VALUE SPACES.       
           05 WS-NOME-UF                 PIC X(019) VALUE SPACES.
           05 WS-NUMERO-UF               PIC 9(002) VALUE ZEROES.
           05 WS-VARIAVEL                PIC X(019) VALUE SPACES.       

      *-----------------------------------------------------------------
       PROCEDURE DIVISION.                                              
      *-----------------------------------------------------------------

           MOVE ZEROES      TO NAO-ACHOU-NADA                                
           MOVE "RS"        TO WS-SIGLA-UF
           MOVE "AAAAA"     TO WS-NOME-UF
           MOVE 03          TO WS-NUMERO-UF
           SET IX-TAB TO 1                                              
           SEARCH WS-CAJUGUDU                                           
                  AT END                                                
                     MOVE 1 TO NAO-ACHOU-NADA                           
                WHEN SIGLA-UF     (IX-TAB)  EQUAL WS-SIGLA-UF                
                     MOVE NOME-UF (IX-TAB)     TO WS-VARIAVEL                           
                WHEN NOME-UF      (IX-TAB)  EQUAL WS-NOME-UF                
                     MOVE NOME-UF (IX-TAB)     TO WS-VARIAVEL               
                WHEN NUMERO-UF    (IX-TAB)  EQUAL WS-NUMERO-UF                
                     MOVE NOME-UF (IX-TAB)     TO WS-VARIAVEL               
           END-SEARCH                                                   

           IF  NAO-ACHOU-NADA EQUAL 1
               DISPLAY " Sigla  - " WS-SIGLA-UF 
                       " Nome   - " WS-NOME-UF 
                       " Número - " WS-NUMERO-UF " NAO ENCONTRADA"
           ELSE
               DISPLAY " Sigla  - " WS-SIGLA-UF 
                       " Nome   - " WS-VARIAVEL 
                       " Número - " WS-NUMERO-UF " ENCONTRADA"
           END-IF 
           STOP RUN.

           Testes efetuados:

           MOVE "RS"               TO WS-SIGLA-UF
           MOVE "AAAAA"            TO WS-NOME-UF
           MOVE 03                 TO WS-NUMERO-UF -----> assumiu esse valor que é o primeiro da tabela, entre os valores informados
           Sigla  - RS Nome   - AMAZONAS            Número - 03 ENCONTRADA

           
           MOVE "RS"               TO WS-SIGLA-UF ------> assumiu esse valor que é o primeiro da tabela, entre os valores informados
           MOVE "AAAAA"            TO WS-NOME-UF
           MOVE 28                 TO WS-NUMERO-UF
           Sigla  - RS Nome   - RIO GRANDE DO SUL   Número - 28 ENCONTRADA

           MOVE "TO"               TO WS-SIGLA-UF
           MOVE "DISTRITO FEDERAL" TO WS-NOME-UF -------> assumiu esse valor que é o primeiro da tabela, entre os valores informados
           MOVE 25                 TO WS-NUMERO-UF
           Sigla  - TO Nome   - DISTRITO FEDERAL    Número - 25 ENCONTRADA

           
           MOVE "FN"               TO WS-SIGLA-UF
           MOVE "DISTRIT FEDERAL"  TO WS-NOME-UF
           MOVE 29                 TO WS-NUMERO-UF
           Sigla  - FN Nome   - DISTRIT FEDERAL     Número - 29 NAO ENCONTRADA