SIZE |
Taille |
|---|---|
| Cobol | |
Syntaxe
|
ADD identifier1 TO identifier2 [ROUNDED] [[ON] SIZE ERROR imperativestatement1] [NOT [ON] SIZE ERROR imperativestatement2] END-ADD |
|
ADD identifier1[,identifier2] TO identifier2 [ROUNDED] GIVING identifierm ROUNDED ON SIZE ERROR imperativestatement |
|
COMPUTE identifier1 [ROUNDED] = arithmeticexpression [; ON SIZE ERROR imperativestatement] |
|
DIVIDE identifier1 INTO identifier2 [ROUNDED] [; ON SIZE ERROR imperativestatement] |
|
DIVIDE identifier1 INTO identifier2 [ROUNDED] GIVING identifier3 [ROUNDED] [; ON SIZE ERROR imperativestatement] |
|
MULTIPLY identifier1 BY identifier2 [ROUNDED] [; ON SIZE ERROR imperativestatement] |
|
MULTIPLY identifier1 BY identifier2 [ROUNDED] GIVING identifier3 [ROUNDED] [; ON SIZE ERROR imperativestatement] |
|
STRING identifier1 DELIMITED [BY] SIZE INTO identifier3 [[WITH] POINTER identifier4] [[ON] OVERFLOW statementlist] [NOT [ON] OVERFLOW statementlist] [END-STRING] |
|
SUBTRACT identifier1 [,identifier2] ... FROM identifierm [ROUNDED] [;ON SIZE ERROR imperativestatement] |
|
SUBTRACT identifier1 [,identifier2] ... FROM identifierm GIVING identifiern ROUNDED [;ON SIZE ERROR imperativestatement] |
|
SUBTRACT (CORRESPONDING|CORR) identifier1 FROM identifierm [ROUNDED] [;ON SIZE ERROR imperativestatement] |
Paramètres
| Nom | Description |
|---|---|
| identifier1, identifier2,... | Ces paramètres représentent des variables numériques (ou alphanumériques selon le contexte) utilisées comme opérandes dans les opérations arithmétiques. Par exemple, dans ADD identifier1 TO identifier2, identifier1 est la valeur à ajouter, et identifier2 est celle qui sera modifiée. |
| identifierm, identifiern | Ce paramètre désigne une variable de résultat utilisée avec le mot clef GIVING. Par exemple, dans ADD identifier1 TO identifier2 GIVING identifierm, le résultat de l'addition est entreposé dans identifierm sans modifier identifier1 ni identifier2. |
| identifier3 | Ce paramètre représente également une variable de résultat, souvent utilisée dans les instructions COMPUTE, DIVIDE ou STRING. |
| imperativestatement, imperativestatement1, imperativestatement2 | Ces paramètres désignent une ou plusieurs instructions COBOL à exécuter dans un bloc conditionnel, souvent après une erreur (ON SIZE ERROR) ou un débordement (ON OVERFLOW). Par exemple : DISPLAY "Erreur!" ou MOVE ZERO TO var. |
| statementlist | Ce paramètre représente une liste d'instructions COBOL pouvant être exécutées, comme imperativestatement, mais dans le contexte des chaînes (ON OVERFLOW dans l'instruction STRING). |
| POINTER identifier4 | Ce paramètre, dans l'instruction STRING, désigne une variable entière servant à indiquer la position actuelle dans la chaîne cible lors de la concaténation. Cela permet un contrôle précis sur où insérer les caractères. |
| SIZE | Ce paramètre est utilisé dans l'instruction STRING pour indiquer que la totalité de la variable doit être prise en compte comme délimiteur, et non un caractère spécifique. |
| ON SIZE ERROR | Ce paramètre permet d'exécuter une instruction alternative si l'opération provoque un dépassement de capacité (débordement) dans le champ résultant. Il empêche alors la mise à jour du champ concerné. |
| NOT ON SIZE ERROR | Ce paramètre permet d'exécuter une instruction uniquement si aucun dépassement de taille n'a eu lieu après l'opération. |
| ROUNDED | Ce paramètre permet d'arrondir le résultat d'une opération lorsqu'il est stocké dans un champ à décimales (plutôt que de tronquer la valeur). Il est utilisé dans les opérations ADD, SUBTRACT, MULTIPLY, DIVIDE, COMPUTE. |
| GIVING | Ce paramètre permet d'entreposer directement le résultat d'une opération dans une variable spécifique, au lieu de modifier l'un des opérandes. Il est fréquemment utilisé avec ADD, SUBTRACT, DIVIDE et MULTIPLY. |
| DELIMITED BY SIZE | Ce paramètre dans l'instruction STRING signifie que toute la longueur de la chaîne source doit être copiée, sans s'arrêter à un caractère délimiteur comme un espace ou un point-virgule. |
| POINTER | Ce paramètre, utilisé dans l'instruction STRING, permet de spécifier ou de suivre la position actuelle dans la chaîne cible (où la copie doit commencer). |
Description
Cette instruction permet de gérer les erreurs lors de débordements de valeurs.
Remarques
- La clause ON SIZE ERROR joue un rôle crucial dans la fiabilité des traitements numériques. Elle permet de détecter un débordement lorsque le résultat d'une opération excède la capacité du champ cible, ce qui empêche la corruption de données. Cette clause assure ainsi une certaine robustesse dans les calculs financiers ou comptables, domaines typiques d'utilisation de COBOL.
- L'utilisation de ROUNDED est particulièrement importante dans les calculs sur des champs décimaux. En effet, COBOL n'arrondit pas automatiquement : il tronque. L'oubli de ROUNDED peut donc entraîner des erreurs d'arrondi cumulées dans les traitements de masse. Ce paramètre permet de mieux respecter les règles d'arrondi bancaire ou comptable.
- L'instruction STRING ... DELIMITED BY SIZE est une exception notable dans la logique du mot-clef SIZE. Contrairement à son usage dans les erreurs de débordement, ici SIZE indique qu'il faut copier la totalité de la variable, quelle que soit sa valeur. Cela permet de gérer proprement des chaînes de longueur fixe sans se soucier de la présence de caractères délimiteurs.
- Les structures ADD ... GIVING, SUBTRACT ... GIVING, DIVIDE ... GIVING,..., montrent une syntaxe orientée vers la clarté du résultat. Plutôt que de modifier une variable existante, on choisit explicitement une destination pour le résultat, ce qui favorise un code plus lisible et plus sûr. Cela permet aussi d'éviter certains effets secondaires lors des calculs.
- L'alternative NOT ON SIZE ERROR donne une grande souplesse dans la logique de contrôle. Elle permet de différencier clairement les cas où une opération s'est déroulée correctement, ce qui peut éviter le recours à des structures de test supplémentaires. C'est un bon exemple du style structuré et lisible que COBOL cherche à promouvoir.
- La clause COMPUTE permet d'écrire des expressions arithmétiques complexes de manière condensée. Contrairement aux opérations élémentaires comme ADD ou SUBTRACT, COMPUTE permet d'utiliser des parenthèses, des priorités, et plusieurs opérateurs. Mais comme elle peut aussi provoquer des débordements, elle est compatible avec ROUNDED et ON SIZE ERROR.
- Dans le contexte de COBOL, le mot SIZE a donc deux significations bien distinctes selon l'instruction. Dans les opérations arithmétiques, il fait référence à un dépassement de la taille mémoire définie par le PICTURE de la variable. Dans l'instruction STRING, il désigne plutôt une longueur fixe utilisée pour copier une chaîne sans tenir compte de délimiteurs.
- Le bloc END-ADD (ou END-instruction) est indispensable en syntaxe COBOL moderne lorsqu'on utilise des clauses imbriquées. Cela évite toute ambiguïté, surtout quand on combine ON SIZE ERROR avec d'autres instructions. L'usage systématique des mots-clés de fin renforce la lisibilité du code et facilite sa maintenance.
Dernière mise à jour : Jeudi, le 28 juillet 2011