L’instruction SEARCH ou SEARCH ALL peut alors utiliser IDX pour parcourir ce tableau.
SEARCH et SEARCH ALL
En COBOL , lorsqu’un tableau est défini avec INDEXED BY , vous pouvez effectuer des recherches dans ses éléments grâce aux instructions :
SEARCH : recherche linéaire (non triée) SEARCH ALL : recherche binaire (tableau trié uniquement)
01 TABLE-CODES.
05 CODE PIC X(5) OCCURS 10 TIMES INDEXED BY IDX.
L’instruction SEARCH ou SEARCH ALL peut alors utiliser IDX pour parcourir ce tableau.
SEARCH – Recherche linéaireTeste chaque élément un par un, jusqu’à trouver une condition vraie.
SET IDX TO 1.
SEARCH TABLE-CODES
AT END DISPLAY "Code introuvable"
WHEN CODE(IDX) = "A1234"
DISPLAY "Code trouvé à l’index : " IDX.
Cette instruction commence à IDX = 1 et s’arrête dès que la condition WHEN est vraie.
SEARCH ALL – Recherche binaire (tableau trié)
Pour utiliser SEARCH ALL , le tableau doit être trié dans l’ordre croissant selon la clé recherchée.
MOVE "B5678" TO VALEUR-RECHERCHEE.
SEARCH ALL TABLE-CODES
WHEN CODE(IDX) = VALEUR-RECHERCHEE
DISPLAY "Trouvé à l’index : " IDX.
Le compilateur utilise une recherche dichotomique, bien plus rapide qu’une boucle linéaire. Si le tableau n’est pas trié, le résultat est imprévisible.
| Instruction | Tableau trié requis | Performance | Utilisation |
|---|---|---|---|
SEARCH |
Non | Lente (linéaire) | Cas généraux, tous types de tableau |
SEARCH ALL |
Oui | Rapide (binaire) | Tableaux triés, grandes données |
SET avant un SEARCH SEARCH ALL uniquement si le tableau est trié SEARCH avec un tableau non indexé
Grâce à SEARCH et SEARCH ALL , vous pouvez :
STRING , UNSTRING et INSPECT .