Menu principal                 [Fechar]


Linguagem de programação COBOL - SEARCH


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF.

O comando executa uma pesquisa em série do elemento da tabela. Se soubermos de antemão que o elemento a ser pesquisado ocorre a partir de uma determinada ocorrência da tabela podemos posicionar o indexador na mesma, através do comando SET, antes de executarmos o comando SEARCH.

Este formato admite várias frases WHEN.

Quando da execução do comando SEARCH, tem início uma pesquisa serial, a partir da ocorrência para a qual estiver setado o indexador (não necessariamente a primeira).

As condições associadas a WHEN são testadas na ordem em que foram escritas.

Se nenhuma das condições especificadas é satisfeita, o valor do indexador é incrementado de 1 e novo teste é realizado.

Se a condição é satisfeita o comando imperativo é executado e o SEARCH termina, deixando o indexador apontando para a ocorrência da tabela que satifez a condição.

Se nenhuma das condições é satisfeita ao se chegar ao final da tabela o comando imperativo previsto para a cláusula AT END é executado e o SEARCH termina.



O seu formato geral é:

Sintaxe do comando SEARCH

Diferenças entre SUBSCRITOS e ÍNDICES
SUBSCRITOS ÍNDICES

 Representa uma ocorrência de um array ou elemento de tabela  Representa um deslocamento a partir do primeiro endereço no array  ou tabela

 Definido em uma entrada separada da WORKING-STORAGE  SECTION.  Definido junto com a cláusula OCCURS paa o array ou tabela.

 Para mudar o valor de SUB, um subscrito, use uma instrução  PERFORM .......... VARYING ou qualquer uma das seguintes  instruções:

 MOVE 1 TO SUB
 ADD 1 TO SUB
 SUBTRACT 1 FROM SUB
 Para mudar o valor de X1, um índice, use uma instrução  PERFORM .......... VARYING ou qualquer uma das seguintes  instruções:

 SET X1 TO 1                  Mover 1 para o índice X1
 SET X1 UP BY 1            Somar 1 ao índice X1
 SET X1 DOWN BY 1    Subtrair 1 to índice X1




       Um exemplo:

      *-----------------------------------------------------------------
       WORKING-STORAGE SECTION.                                         
      *-----------------------------------------------------------------
                                                                        
       01  WS-TABELA-ESTADOS.                                           
           05 TAB-NOME-UF.                                              
              10  FILLER       PIC X(021) VALUE "ACACRE               ".
              10  FILLER       PIC X(021) VALUE "ALALAGOAS            ".
              10  FILLER       PIC X(021) VALUE "AMAMAZONAS           ".
              10  FILLER       PIC X(021) VALUE "APAMAPA              ".
              10  FILLER       PIC X(021) VALUE "BABAHIA              ".
              10  FILLER       PIC X(021) VALUE "CECEARA              ".
              10  FILLER       PIC X(021) VALUE "DFDISTRITO FEDERAL   ".
              10  FILLER       PIC X(021) VALUE "ESESPIRITO SANTO     ".
              10  FILLER       PIC X(021) VALUE "GOGOIAS              ".
              10  FILLER       PIC X(021) VALUE "MAMARANHAO           ".
              10  FILLER       PIC X(021) VALUE "MGMINAS GERAIS       ".
              10  FILLER       PIC X(021) VALUE "MSMATO GROSSO DO SUL ".
              10  FILLER       PIC X(021) VALUE "MTMATO GROSSO        ".
              10  FILLER       PIC X(021) VALUE "PAPARA               ".
              10  FILLER       PIC X(021) VALUE "PBPARAIBA            ".
              10  FILLER       PIC X(021) VALUE "PEPERNAMBUCO         ".
              10  FILLER       PIC X(021) VALUE "PIPIAUI              ".
              10  FILLER       PIC X(021) VALUE "PRPARANA             ".
              10  FILLER       PIC X(021) VALUE "RJRIO DE JANEIRO     ".
              10  FILLER       PIC X(021) VALUE "RNRIO GRANDE DO NORTE".
              10  FILLER       PIC X(021) VALUE "RORONDONIA           ".
              10  FILLER       PIC X(021) VALUE "RRRORAIAMA           ".
              10  FILLER       PIC X(021) VALUE "RSRIO GRANDE DO SUL  ".
              10  FILLER       PIC X(021) VALUE "SCSANTA CATARINA     ".
              10  FILLER       PIC X(021) VALUE "SESERGIPE            ".
              10  FILLER       PIC X(021) VALUE "SPSAO PAULO          ".
              10  FILLER       PIC X(021) VALUE "TOTOCANTINS          ".
           05 TAB-NOME-UF-R    REDEFINES  TAB-NOME-UF.                  
              07  WS-CAJUGUDU  OCCURS 27 TIMES                          
                               DESCENDING KEY SIGLA-UF                  
                               INDEXED BY IX-TAB.                       
                  10  SIGLA-UF PIC X(002).                              
                  10  NOME-UF  PIC X(019).                              

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

      *-----------------------------------------------------------------
       PROCEDURE DIVISION.                                              
      *-----------------------------------------------------------------
                                                                        
           MOVE ZEROES TO NAO-ACHOU-NADA                                
           MOVE 'SP'   TO WS-SIGLA-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 VARIAVEL                           
           END-SEARCH                                                   

           IF  NAO-ACHOU-NADA EQUAL 1
               codifique as instrições necessarias
           END-IF. 



Volta para o início da página

Volta a página anterior

Volta ao Menu Principal