SEARCH |
Recherche |
|---|---|
| Cobol | |
Syntaxe
|
SEARCH field AT END statement1 WHEN condition statement2 END-SEARCH. |
|
SEARCH identifier [VARYING identifier] [[AT] END statementlist] WHEN condition(statementlist|NEXT SENTENCE [END-SEARCH] |
Paramètres
| Nom | Description |
|---|---|
| field ou identifier | Ce paramètre permet d'indiquer le nom du tableau (ou groupe de données) dans lequel on souhaite effectuer la recherche. Il doit s'agir d'un tableau indexé, c'est-à-dire déclaré avec une clause OCCURS et un INDEXED BY. SEARCH parcourt ce tableau à l'aide de l'index associé jusqu'à ce qu'une condition soit remplie. |
| VARYING identifier | Ce paramètre permet d'utiliser une variable d'index explicite (déclarée avec INDEXED BY) au lieu de celle définie automatiquement. Cela rend le processus de recherche plus flexible et permet d'effectuer des recherches imbriquées ou multiples sur différents index. Il est utilisé principalement avec SEARCH ALL. |
| condition | Ce paramètre permet d'indiquer la condition logique à vérifier pour chaque élément de la table. Lorsque la condition devient vraie, le bloc d'instructions associé est exécuté. La recherche s'arrête alors (type "first-match"). Si aucune condition n'est remplie, le programme exécute l'alternative définie dans AT END. |
| statement2 | Ce paramètre permet d'indiquer les instructions COBOL à exécuter dès qu'un élément du tableau satisfait la condition donnée. Il peut s'agir par exemple d'une opération d'affichage, de copie, ou d'une mise à jour des données trouvées. |
| AT END ou [END] | Ce paramètre permet de gérer le cas où aucune correspondance n'est trouvée dans la table. Le bloc d'instructions suivant est exécuté si la recherche arrive à la fin sans succès. Cela permet de gérer proprement l'échec de la recherche, en évitant des comportements non anticipés. |
| statement1 | Ce paramètre permet d'indiquer un bloc d'instructions déclenché si aucune condition WHEN n'a été satisfaite. Il est souvent utilisé pour afficher un message, activer un indicateur d'erreur, ou rediriger le flux du programme. |
| END-SEARCH | Ce paramètre permet de clôturer formellement l'instruction SEARCH. Il est requis dans les versions modernes du COBOL (comme COBOL 2002 ou Enterprise COBOL) lorsqu'on utilise des blocs structurés. Il améliore la lisibilité du code en indiquant clairement la fin de la recherche. |
Description
Cette instruction permet de rechercher une entrée dans une table.
Remarques
- L'instruction SEARCH permet de parcourir une table indexée élément par élément, généralement à l'aide d'un index défini dans la clause OCCURS. Elle est très utile pour les recherches conditionnelles, notamment lorsqu'on ne connaît pas à l'avance la position de l'élément recherché. Chaque élément est testé avec une condition logique jusqu'à ce qu'une correspondance soit trouvée.
- La clause AT END est essentielle pour gérer les cas où aucun élément ne satisfait la condition de recherche. Elle permet d'éviter que le programme ne continue indéfiniment ou ne plante s'il atteint la fin du tableau sans succès. C'est un bon point de contrôle pour terminer proprement la boucle de recherche.
- La clause WHEN permet de spécifier la condition à vérifier pour chaque élément de la table. Dès que cette condition est vraie, les instructions correspondantes sont exécutées. Cela évite d'avoir à coder manuellement une boucle avec des tests successifs, rendant le code plus lisible et moins sujet aux erreurs.
- L'option VARYING identifier introduit une variable de parcours évoluant automatiquement. Cette forme est utilisée avec les tables déclarées sans index, ou lorsqu'on souhaite manipuler la recherche de manière plus souple. Cela peut remplacer un index classique et permet une approche plus dynamique du parcours.
- Le SEARCH ne fonctionne correctement que si la table a été préalablement triée ou structurée d'une manière correspondant à l'algorithme de recherche utilisé (généralement séquentiel). Il est donc important de bien organiser les données pour garantir des performances correctes et des résultats fiables.
- On peut imbriquer plusieurs conditions WHEN dans un même SEARCH pour traiter des cas multiples, ou introduire des variantes de traitement selon le type d'élément trouvé. Cela permet de centraliser plusieurs logiques de décision dans un seul bloc de recherche.
- La forme avec END-SEARCH est recommandée dans les versions modernes de COBOL, notamment pour respecter les bonnes pratiques de structure du code. Elle améliore la lisibilité et délimite clairement le bloc de recherche, surtout quand il y a plusieurs niveaux d'imbrication.
- Une erreur fréquente est d'utiliser SEARCH sans avoir initialisé l'index associé. Cela peut entraîner des comportements erratiques ou des erreurs d'exécution. Avant d'appeler SEARCH, il est impératif d'avoir positionné correctement l'index, souvent avec un SET préalable.
Dernière mise à jour : Jeudi, le 28 juillet 2011