Une zone alphanumérique contient des caractères : lettres, chiffres, symboles, espaces. Elle est déclarée avec PIC X(n) , où n est la longueur maximale.
En COBOL , il est essentiel de bien comprendre la distinction entre les zones alphanumériques et numériques. Ces deux types de données ont des formats de stockage différents en mémoire, et ne sont pas interchangeables sans précaution.
PIC X(n)
Une zone alphanumérique contient des caractères : lettres, chiffres, symboles, espaces. Elle est déclarée avec PIC X(n) , où n est la longueur maximale.
01 NOM-CLIENT PIC X(30).
01 CODE-POSTAL PIC X(5).
Ces champs peuvent contenir "DURAND", "75015", ou même "123AB". Ils sont traités comme des chaînes, pas comme des nombres.
PIC 9(n) , V , S
Une zone numérique ne contient que des chiffres (et éventuellement un signe avec S ). Elle permet les calculs arithmétiques.
01 MONTANT PIC 9(5)V99.
01 AGE PIC 99.
01 SOLDE-SIGNE PIC S9(6)V99.
Ces zones sont stockées sous forme binaire ou zonée selon le compilateur, et ne peuvent pas contenir de lettres.
Pour convertir, on utilise souvent MOVE , mais cela peut générer des erreurs ou des comportements imprévus si les formats sont incompatibles :
01 ENTREE PIC X(5) VALUE "00123".
01 VALEUR-NUM PIC 9(5).
MOVE ENTREE TO VALEUR-NUM.
Cela fonctionne si ENTREE contient uniquement des chiffres. Sinon, cela provoquera une erreur d’exécution ou un résultat incohérent.
PIC 9(n) PIC X(n) PIC X MOVE entre types différents NUMERIC dans une condition pour tester une zone texte :
IF ZONE-TEXTE IS NUMERIC
MOVE ZONE-TEXTE TO NOMBRE.
Les zones alphanumériques ( PIC X ) sont utilisées pour les textes, affichages, codes, alors que les zones numériques ( PIC 9 ) servent aux calculs. Une mauvaise manipulation entre les deux peut provoquer des erreurs graves.
Bien comprendre cette différence est fondamental pour écrire des programmes COBOL fiables, lisibles et performants.