Archives par mot-clé : SEARCH

Exemple – SEARCH dans une table

Programme utilisant le SEARCH :

      *----------------------------------------------------
       IDENTIFICATION DIVISION.                                         
      *----------------------------------------------------
       PROGRAM-ID.       SEARCH.                                      
       AUTHOR.           LA COMMUNAUTE DU COBOL.                      
      *----------------------------------------------------
      *  PROGRAMME     : SEARCH                                       
      *  OBJECTIF      : UTILISER LA COMMANDE SEARCH DANS 
      *                : UNE TABLE          
      *----------------------------------------------------

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

       DATA DIVISION.

       WORKING-STORAGE SECTION.                                         

       01  WS-TABLE-ETATS.                                           
           05 TAB-NOM-ETAT.                                              
              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-NOM-ETAT-R    REDEFINES  TAB-NOM-ETAT.                  
              07  WS-ETAT      OCCURS 27 TIMES                          
                               ASCENDING KEY SIGLA-UF                  
                               INDEXED BY IX-TAB.                       
                  10  SIGLE-ETAT PIC X(002).                              
                  10  NOM-ETAT   PIC X(019).                              

       01  WS-AUXILIARES.                                               
           05 NON-TROUVE         PIC 9(003) VALUE ZEROES.       
           05 WS-SIGLE-ETAT      PIC X(002) VALUE SPACES.       
           05 WS-VARIABLE        PIC X(019) VALUE SPACES.       

       PROCEDURE DIVISION.                                              

           MOVE ZEROES TO NON-TROUVE                                
           MOVE "SP"   TO WS-SIGLE-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                           
           END-SEARCH                                                   

           IF  NON-TROUVE  EQUAL 1
               DISPLAY "SIGLE - " WS-SIGLE-ETAT " NON TROUVE"
           ELSE
               DISPLAY "SIGLE - " WS-SIGLE-ETAT " - "
                        WS-VARIABLE " TROUVE "
           END-IF 
           STOP RUN.

           SIGLE - SP - SAO PAULO           TROUVE

           MOVE "FN"   TO WS-SIGLE-ETAT
           SIGLE - FN NON TROUVE

Exemple – SEARCH (Plusieurs conditions)

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

Exemple – SEARCH ALL

Programme utilisant le SEARCH ALL :

      *----------------------------------------------------
       IDENTIFICATION DIVISION.                                         
      *----------------------------------------------------
       PROGRAM-ID.      SEARCHALL.                                       
       AUTHOR.          LA COMMUNAUTE DU COBOL.                       
      *----------------------------------------------------
       ENVIRONMENT DIVISION.                                            
      *----------------------------------------------------
       CONFIGURATION SECTION.                                           
       SPECIAL-NAMES.                                                   
                        DECIMAL-POINT IS COMMA.                         

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

       WORKING-STORAGE SECTION.                                         
                                                                        
        01  WS-TABLE-PRODUITS.                                           
           05 TAB-PRODUITS.                                              
              10  FILLER       PIC X(021) VALUE "01RIZ".
              10  FILLER       PIC X(021) VALUE "02FARITAS".
              10  FILLER       PIC X(021) VALUE "03SEL".
              10  FILLER       PIC X(021) VALUE "04PATE".
              10  FILLER       PIC X(021) VALUE "05ASSIETE".
              10  FILLER       PIC X(021) VALUE "06CARNET".
              10  FILLER       PIC X(021) VALUE "07BISCUIT".
              10  FILLER       PIC X(021) VALUE "08CHOCOLAT".
              10  FILLER       PIC X(021) VALUE "09SAVON".
              10  FILLER       PIC X(021) VALUE "10PAPIER".
              10  FILLER       PIC X(021) VALUE "11EAU".
              10  FILLER       PIC X(021) VALUE "12SODA".
              10  FILLER       PIC X(021) VALUE "13LIQUIDE VAISSELLE".
              10  FILLER       PIC X(021) VALUE "14EPONGE".
              10  FILLER       PIC X(021) VALUE "15CAFE".
              10  FILLER       PIC X(021) VALUE "16NESCAFE".
              10  FILLER       PIC X(021) VALUE "17PAIN".
              10  FILLER       PIC X(021) VALUE "18KETCHUP".
              10  FILLER       PIC X(021) VALUE "19FRITE".
              10  FILLER       PIC X(021) VALUE "20LAIT".
              10  FILLER       PIC X(021) VALUE "21BEURRE".
              10  FILLER       PIC X(021) VALUE "22FROMAGE".
              10  FILLER       PIC X(021) VALUE "23THE".
              10  FILLER       PIC X(021) VALUE "24OLIVE".
              10  FILLER       PIC X(021) VALUE "25SHAMPOING".
              10  FILLER       PIC X(021) VALUE "26CREME LAVANTE".
              10  FILLER       PIC X(021) VALUE "27GEL DOUCHE".
           05 TAB-PRODUITS-R    REDEFINES  TAB-PRODUITS.                  
              07  WS-PRODUIT  OCCURS 27 TIMES                          
                               ASCENDING KEY COD-PRODUIT                  
                               INDEXED BY IX-TAB.                       
                  10  COD-PRODUIT   PIC 9(002).                              
                  10  NOM-PRODUIT   PIC X(019).  
                            
       01  WS-AUXILIARES.                                               
           05 NON-TROUVE        PIC 9(003) VALUE ZEROES.       
           05 WS-COD-PRODUIT    PIC 9(002) VALUE ZEROES.       
           05 VARIABLE          PIC X(019) VALUE SPACES. 
           05 WS-X              PIC 9(002) VALUE ZEROES. 

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

           MOVE ZEROES TO NON-TROUVE                                
           MOVE 23 TO WS-COD-PRODUIT
           
           SEARCH ALL WS-PRODUIT                                        
                  AT END                                                
                     MOVE 1 TO NON-TROUVE    
                WHEN COD-PRODUIT (IX-TAB) EQUAL WS-COD-PRODUIT 
                     MOVE NOM-PRODUIT (IX-TAB) TO VARIABLE                           
           END-SEARCH                                                   

           IF  NON-TROUVE EQUAL 0
               DISPLAY "TROUVE " WS-COD-PRODUIT " Nom du produit: " VARIABLE
           ELSE
               DISPLAY "NON TROUVE - Code du produit - " WS-COD-PRODUIT
           END-IF. 

	   STOP RUN.

           TROUVE 23 Nom du produit: THE

           MOVE 28 TO WS-COD-PRODUIT
           NON TROUVE - Code du produit - 28