STRING |
Chaîne de caractères |
|---|---|
| Cobol | |
Syntaxe
|
STRING identifier1 DELIMITED [BY] (identifier2|SIZE) INTO identifier3 [[WITH] POINTER identifier4] [[ON] OVERFLOW statementlist] [NOT [ON] OVERFLOW statementlist] [END-STRING] |
Paramètres
| Nom | Description |
|---|---|
| identifier1 | Ce paramètre désigne la valeur source à concaténer. Il peut s'agir d'un champ alphanumérique (par exemple une chaîne de caractères) ou d'un littéral. Plusieurs identifier1 peuvent être enchaînés dans l'instruction STRING afin de construire une chaîne complète à partir de plusieurs morceaux. |
| identifier2 | Ce paramètre permet d'indiquer que la concaténation s'arrête lorsqu'on rencontre ce délimiteur (souvent une chaîne vide ou un caractère particulier). Si vous utilisez SIZE, toute la longueur de identifier1 est utilisée dans la concaténation. Cela permet une gestion fine de la découpe des champs sources. |
| identifier3 | Ce paramètre permet d'indiquer la destination finale de la chaîne concaténée. C'est dans identifier3 que la chaîne complète sera entreposée une fois toutes les concaténations effectuées. Il doit être suffisamment grand pour contenir le résultat, sinon un débordement peut survenir. |
| identifier4 | Ce paramètre permet de spécifier une position de départ dans identifier3 où commencer l'écriture de la chaîne concaténée. identifier4 est une variable entière contenant la position initiale, et elle est automatiquement mise à jour au fur et à mesure que les données sont ajoutées. |
| ON OVERFLOW statementlist | Ce paramètre permet de gérer les erreurs se produisant si la chaîne concaténée est trop grande pour entrer dans identifier3. Les instructions spécifiées dans statementlist sont alors exécutées. Cela permet d'éviter une perte de données silencieuse ou un comportement inattendu. |
| NOT ON OVERFLOW statementlist | Ce paramètre permet de définir un traitement à effectuer uniquement si l'opération s'est déroulée sans débordement. Il est souvent utilisé en complément de ON OVERFLOW pour distinguer les deux cas. |
| END-STRING | Ce paramètre permet d'indiquer l'indication de fin de l'instruction STRING. Bien qu'elle soit optionnelle dans de nombreux compilateurs, elle est recommandée pour des raisons de lisibilité et de clarté, surtout dans des blocs complexes. |
Description
Cette instruction permet d'effectuer la concaténation de multiples champs ou expression littérale en un seul champ.
Remarques
- L'instruction STRING est très utile pour rassembler plusieurs champs ou littéraux en une seule chaîne. Elle permet de construire dynamiquement des messages, des lignes de fichiers ou des rapports structurés. C'est une alternative puissante à l'assignation manuelle de chaque champ dans une variable de sortie.
- La clause DELIMITED BY joue un rôle fondamental dans le comportement de la concaténation. Elle permet d'éviter d'ajouter des caractères superflus si, par exemple, la valeur source contient des blancs terminaux non souhaités. L'option BY SIZE est utile lorsque l'on souhaite prendre toute la longueur du champ source, peu importe son contenu.
- L'utilisation du paramètre POINTER avec identifier4 permet de contrôler précisément l'endroit où commence la concaténation dans la chaîne cible. Cela est très pratique si l'on veut réserver une marge ou remplir une portion spécifique d'une variable plus grande sans la tronquer.
- Le bloc ON OVERFLOW permet de sécuriser les opérations de concaténation. Il agit comme un filet de sécurité en cas de dépassement de la capacité de la variable cible. Cela évite des résultats incohérents ou des pertes silencieuses de données, surtout dans les programmes de traitement de fichiers structurés.
- À l'inverse, NOT ON OVERFLOW permet d'exécuter un traitement uniquement si tout s'est bien passé. Cela donne un excellent contrôle sur les chemins d'exécution selon que la concaténation ait réussi ou non. C'est très utile pour produire des journaux d'état ou des indicateurs de validation.
- Le mot clef END-STRING n'est pas obligatoire, mais son usage est fortement recommandé, notamment pour améliorer la lisibilité du code COBOL. Dans les blocs contenant plusieurs instructions conditionnelles ou concaténations complexes, il permet de bien marquer les limites de l'instruction et d'éviter les confusions.
- L'instruction STRING permet également une concaténation dynamique : en variant le nombre ou le contenu des identifier1, on peut générer des chaînes adaptatives. Cela est très pratique pour des sorties conditionnelles, des fichiers journaux, ou des formats d'export personnalisés.
- Il faut toujours faire attention à la taille de identifier3, la destination. Si elle est trop petite, même avec un ON OVERFLOW, une perte de données peut survenir si la gestion de l'erreur n'est pas bien codée. Il est bon de prévoir une taille légèrement supérieure à la somme des éléments concaténés pour une marge de sécurité.
Dernière mise à jour : Jeudi, le 28 juillet 2011