UNSTRING |
Déchaîne de caractères |
|---|---|
| Cobol | |
Syntaxe
|
UNSTRING identifier [DELIMITED [BY][ALL] identifier OR [ALL] identifier] INTO identifier [DELIMITER [IN] identifier][COUNT [IN] identifier] [[WITH] POINTER identifier][TALLYING [IN] identifier] [[ON] OVERFLOW statementlist][NOT [ON] OVERFLOW statementlist] [END-UNSTRING] |
Paramètres
| Nom | Description |
|---|---|
| identifier | Ce paramètre permet d'indiquer la chaîne de caractères source à découper. Cette variable contient la chaîne de caractères que l'on souhaite analyser et séparer en sous-parties. Elle peut être de type alphanumérique. |
| DELIMITED BY identifier | Ce paramètre permet d'indiquer le ou les caractères (ou chaînes) servant de séparateurs dans la chaîne d'origine. Par exemple, si le délimiteur est une virgule, la chaîne "Nom,Prénom,Âge" sera découpée en trois parties. L'option ALL permet de considérer toutes les occurrences successives du délimiteur comme une seule séparation. |
| INTO identifier | Ce paramètre permet de définir la ou les variables de destination où seront copiés les morceaux extraits de la chaîne source. Plusieurs variables peuvent être listées pour recevoir les différentes parties extraites après découpage. |
| DELIMITER IN identifier | Ce paramètre permet d'entreposer dans une variable la valeur du délimiteur ayant été rencontré pour chaque découpage. Cela peut être utile si plusieurs délimiteurs différents sont possibles, ou pour vérifier la cohérence du format. |
| COUNT IN identifier | Ce paramètre permet de mémoriser le nombre de caractères extraits dans chaque sous-chaîne. Ce compteur peut être utile pour des vérifications, ou pour des traitements complémentaires selon la taille de chaque champ. |
| POINTER identifier | Ce paramètre permet de définir la position de départ pour l'analyse dans la chaîne source. Cette variable peut être modifiée automatiquement par l'instruction, ce qui permet d'enchaîner plusieurs UNSTRING ou de recommencer l'analyse à une position spécifique. |
| TALLYING IN identifier | Ce paramètre permet de compter le nombre total d'éléments extraits et de stocker cette valeur dans une variable. Cela donne un résumé du découpage effectué, particulièrement utile quand on ne connaît pas à l'avance le nombre de morceaux. |
| ON OVERFLOW statementlist | Ce paramètre permet d'indiquer le bloc d'instructions exécuté si l'opération de découpage ne peut pas être entièrement réalisée (par exemple si trop peu de variables INTO sont fournies par rapport au nombre de morceaux trouvés). |
| NOT ON OVERFLOW statementlist | Ce paramètre permet d'indiquer le bloc exécuté lorsque tout s'est bien passé, c'est-à-dire que le découpage a pu être complété sans incident. |
| END-UNSTRING | Ce paramètre permet d'indiquer la marque optionnelle de fin d'instruction, utile pour la lisibilité, surtout si l'instruction contient plusieurs clauses conditionnelles ou blocs. |
Description
Cette instruction permet de découper un champ en de multiple champs en utilisant un caractère particulier déterminant où découper le champ.
Remarques
- L'instruction UNSTRING est essentielle pour traiter des données concaténées dans un champ unique : Elle permet de découper une chaîne source en plusieurs sous-chaînes, entreposées individuellement dans des variables distinctes. Cela est particulièrement utile dans le traitement de fichiers texte ou de données structurées de façon séquentielle, où plusieurs valeurs sont encodées dans un même champ avec un séparateur.
- L'usage de DELIMITED BY permet de personnaliser la manière dont la chaîne est découpée : En spécifiant un identifiant comme délimiteur, on peut contrôler précisément à quel endroit chaque sous-chaîne commence et se termine. Cela permet par exemple de séparer des valeurs par des virgules, des tirets ou tout autre caractère, ce qui rend le traitement très flexible.
- La clause ALL est utile pour éviter les sous-chaînes vides en cas de délimiteurs répétés : Lorsque plusieurs caractères délimiteurs se suivent dans la chaîne source, l'instruction peut générer des champs vides si ALL n'est pas utilisé. Grâce à ALL, COBOL ignore les délimiteurs répétés et évite l'extraction inutile de sous-chaînes vides, ce qui simplifie le post-traitement.
- Le paramètre INTO est central : il définit où les morceaux extraits seront entreposés : Chaque morceau de la chaîne source est copié dans l'un des identifiants fournis dans la clause INTO. Le nombre de variables INTO doit correspondre au nombre attendu de segments. Si ce n'est pas le cas, l'option ON OVERFLOW permet de gérer proprement les débordements.
- L'option DELIMITER IN permet de conserver une trace du séparateur utilisé : Cette clause est particulièrement utile lorsqu'on ne connaît pas le séparateur à l'avance ou lorsqu'on utilise des séparateurs multiples. Elle permet d'analyser dynamiquement le séparateur utilisé et d'adapter le traitement en fonction du contexte.
- La clause COUNT IN offre une mesure précise de chaque sous-chaîne extraite : Elle permet de savoir combien de caractères ont été extraits dans chaque sous-partie, ce qui est très utile pour le débogage, le contrôle de qualité des données ou pour des traitements conditionnels en fonction de la taille des valeurs extraites.
- Le pointeur (WITH POINTER) permet une découpe contrôlée à partir d'une position spécifique : Cette fonctionnalité est précieuse si l'on souhaite reprendre un découpage après une première extraction ou si la position de départ dans la chaîne doit être ajustée selon un traitement préalable. Elle favorise la modularité et le contrôle dans les chaînes complexes.
- Les blocs ON OVERFLOW et NOT ON OVERFLOW assurent une gestion robuste des erreurs : Ils permettent de gérer les cas où le nombre de sous-chaînes dépasse la capacité des variables INTO fournies. Cela évite des erreurs silencieuses ou des comportements indéterminés, en garantissant une logique conditionnelle explicite selon que le découpage s'est bien passé ou non.
Dernière mise à jour : Jeudi, le 28 juillet 2011