- 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
|