SEARCH fonctionne comme ceci :
- SEARCH sur nom-tableau commence par la valeur initiale de l’index associé.
- Si l’une des conditions 1, 2, 3, etc. est satisfaite, l’instruction impérative respective s’exécutera et SEARCH se terminera et l’index restera défini au point où la condition était remplie.
- Si aucune des conditions n’est remplie, l’index est automatiquement incrémenté de 1.
La recherche se poursuit jusqu’à ce que la fin du tableau ou de la condition soit remplie. - AT END de la recherche, instruction-impérative-1 sera exécutée et l’index aura une valeur imprévisible
Syntaxe basique
SEARCH nom-tableau
AT END instruction-impérative-1
WHEN condition-1
instruction-impérative-2
WHEN condition-2
instruction-impérative-3 ...
WHEN condition-3
instruction-impérative-4 ...
END-SEARCH
Exemple
*----------------------------------------------------
IDENTIFICATION DIVISION.
*----------------------------------------------------
PROGRAM-ID. SEARCH.
AUTHOR. LA COMMUNAUTE DU COBOL.
*----------------------------------------------------
ENVIRONMENT DIVISION.
*----------------------------------------------------
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*----------------------------------------------------
DATA DIVISION.
*----------------------------------------------------
WORKING-STORAGE SECTION.
01 WS-TABLE-ETAT.
05 TAB-NOM-ETAT.
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-NOM-ETAT-R REDEFINES TAB-NOM-ETAT.
10 WS-ETAT OCCURS 27 TIMES
ASCENDING KEY SIGLA-UF
INDEXED BY IX-TAB.
15 SIGLE-ETAT PIC X(002).
15 NOM-ETAT PIC X(019).
15 NUMERO-ETAT PIC 9(002).
01 WS-AUXILIARES.
05 NON-TROUVE PIC 9(003) VALUE ZEROES.
05 WS-SIGLE-ETAT PIC X(002) VALUE SPACES.
05 WS-NOM-ETAT PIC X(019) VALUE SPACES.
05 WS-NUMERO-ETAT PIC 9(002) VALUE ZEROES.
05 WS-VARIABLE PIC X(019) VALUE SPACES.
*----------------------------------------------------
PROCEDURE DIVISION.
*----------------------------------------------------
MOVE ZEROES TO NON-TROUVE
MOVE "RS" TO WS-SIGLE-ETAT
MOVE "AAAAA" TO WS-NOM-ETAT
MOVE 03 TO WS-NUMERO-ETAT
SET IX-TAB TO 1
SEARCH WS-ETAT
AT END
MOVE 1 TO NON-TROUVE
WHEN SIGLE-ETAT (IX-TAB) EQUAL WS-SIGLE-ETAT
MOVE NOM-ETAT (IX-TAB) TO WS-VARIABLE
WHEN NOM-ETAT (IX-TAB) EQUAL WS-NOM-ETAT
MOVE NOM-ETAT (IX-TAB) TO WS-VARIABLE
WHEN NUMERO-ETAT (IX-TAB) EQUAL WS-NUMERO-ETAT
MOVE NOM-ETAT (IX-TAB) TO WS-VARIABLE
END-SEARCH
IF NON-TROUVE EQUAL 1
DISPLAY " Sigle - " WS-SIGLE-ETAT
" Nom - " WS-NOM-ETAT
" Numero - " WS-NUMERO-ETAT " NON TROUVE"
ELSE
DISPLAY " Sigle - " WS-SIGLE-ETAT
" Nom - " WS-VARIABLE
" Numero - " WS-NUMERO-ETAT " TROUVE"
END-IF
STOP RUN.
Tests effectués:
MOVE "RS" TO WS-SIGLE-ETAT
MOVE "AAAAA" TO WS-NOM-ETAT
MOVE 03 TO WS-NUMERO-ETAT -----> pris cette valeur qui est la première du tableau, parmi les valeurs renseignées
Sigle - RS Nome - AMAZONAS Numero - 03 TROUVE
MOVE "RS" TO WS-SIGLE-ETAT ------> pris cette valeur qui est la première du tableau, parmi les valeurs renseignées
MOVE "AAAAA" TO WS-NOM-ETAT
MOVE 28 TO WS-NUMERO-ETAT
Sigle - RS Nome - RIO GRANDE DO SUL Numero - 28 TROUVE
MOVE "TO" TO WS-SIGLE-ETAT
MOVE "DISTRITO FEDERAL" TO WS-NOM-ETAT -------> pris cette valeur qui est la première du tableau, parmi les valeurs renseignées
MOVE 25 TO WS-NUMERO-ETAT
Sigle - TO Nome - DISTRITO FEDERAL Numero - 25 TROUVE
MOVE "FN" TO WS-SIGLE-ETAT
MOVE "DISTRIT FEDERAL" TO WS-NOM-ETAT
MOVE 29 TO WS-NUMERO-ETAT
Sigle - FN Nome - DISTRIT FEDERAL Numero - 29 NON TROUVE