Aller au contenu

CHGVAR

Modifier une variable

En bref

La commande CHGVAR permet de modifier la valeur d'une variable de langage de contrôle (CL) ou certains éléments d'une variable alphanumérique.

CHGVAR se lit CHG (Modifier) + VAR. Sur IBM i, le nom d'une commande associe presque toujours un verbe et un objet.

Syntaxe minimale

CHGVAR VAR(…) VALUE(…)

Paramètres

  • VAR Nom de la variable CL obligatoire
  • VALUE Nouvelle valeur obligatoire

Astuce : dans une session 5250, tapez CHGVAR puis F4 pour l'invite de saisie, et F1 sur un paramètre pour son aide.

Aide IBM i de la commande

Texte du F1, IBM i 7.5 en français (bibliothèque QSYS)

Où s'exécute :

  • Programme batch (*BPGM)
  • Programme interactif (*IPGM)
Compatible multitâche : Oui

La commande CHGVAR permet de modifier la valeur d'une variable de langage de contrôle (CL) ou certains éléments d'une variable alphanumérique. La valeur peut être remplacée par la valeur d'une constante ou d'une autre variable, ou bien par le résultat d'une expression ou d'une fonction intégrée. Les expressions et les fonctions intégrées sont décrites dans la rubrique "Expressions dans les commandes CL" du manuel Rubriques CL de la catégorie Programmation de l'IBM i Information Center, à l'adresse http://www.ibm.com/systems/i/infocenter/. La conversion implicite entre les valeurs décimales et les caractères s'effectue en fonction des règles déterminées dans la description du paramètre VALUE.

La fonction intégrée binaire (%BINARY or %BIN) peut être utilisée dans les paramètres Nom de la variable CL (VAR) ou Nouvelle valeur (VALUE) comme valeur de substitution d'une variable décimale. Si elle est utilisée avec le paramètre VAR, la portion indiquée de la variable alphanumérique est remplacée par la valeur équivalente de l'entier binaire signé de l'expression arithmétique figurant dans le paramètre VALUE. Si elle est intégrée dans le paramètre VALUE, elle est considérée comme un entier binaire signé converti en nombre décimal lorsqu'elle est utilisée pour l'évaluation de la valeur du paramètre VALUE. Un entier binaire de deux octets est converti en nombre décimal (5 0) et un nombre binaire de 4 octets en nombre décimal (10 0). Le résultat de l'expression évaluée est ensuite attribué à la variable indiquée dans le paramètre VAR.

La fonction intégrée de sous-chaîne (%SUBSTRING ou %SST) peut être utilisée dans les paramètres VAR ou VALUE pour remplacer une variable alphanumérique. Si elle est utilisée avec le paramètre VAR, la portion indiquée de la variable alphanumérique est remplacée par la valeur de l'expression figurant dans le paramètre VALUE. Si elle est intégrée dans le paramètre VALUE, elle est utilisée pour l'évaluation de la valeur du paramètre VALUE. Les entiers binaires de 2 octets sont convertis en nombres décimaux (5 0) et les nombres binaires de 4 octets en nombres décimaux (10 0). Le résultat de l'expression évaluée est ensuite attribué à la variable indiquée dans le paramètre VAR.

La fonction intégrée de sous-chaîne peut être utilisée pour extraire ou modifier l'intégralité ou une partie de la zone de données locale associée à un travail.

La fonction intégrée %SWITCH peut être utilisée dans le paramètre VALUE pour remplacer une variable logique déclarée dans le programme. %SWITCH comprend un masque de 8 caractères indiquant, sur les 8 indicateurs externes, ceux qui sont testés pour les valeurs 1 et 0. Lorsque %SWITCH est indiqué au paramètre VALUE, la variable logique précisée par le paramètre VAR prend pour valeur '1' si les résultats logiques de la fonction intégrée sont tous vrais. Si un indicateur externe testé aboutit à une condition fausse, la variable prend pour valeur '0'.

Codification des valeurs décimales pour les variables décimales

Lorsqu'une valeur numérique est indiquée pour une variable décimale :

  • Elle peut être codée avec ou sans symbole décimal (matérialisé par un point ou une virgule) et avec ou sans signe plus ou moins.
  • En cas d'indication de valeur négative, un signe moins (-) doit précéder la valeur.
  • Si aucun symbole décimal n'est indiqué dans la valeur codée, il est considéré figurer à la droite du dernier chiffre indiqué, c'est-à-dire que la valeur codée est considérée comme un nombre entier.
  • Si le nombre de chiffres fractionnés ou d'entiers indiqué est supérieur au nombre défini, un message d'erreur est envoyé à l'utilisateur.

Par exemple si une valeur décimale est définie avec cinq positions décimales, parmi lesquelles deux positions constituent la partie fractionnée, les valeurs suivantes peuvent être codées :

  Valeur         Valeur
  indiquée       adoptée
  ------------   --------
  2.7 ou 2,7     2.70
  27 ou 27.00    27.00
  -27            -27.00

Codification des valeurs alphanumériques pour les variables décimales

Lorsqu'une valeur alphanumérique est indiquée pour une variable décimale :

  • Seuls les chiffres de 0 à 9, un symbole décimal (point ou virgule) et un signe plus (+) ou moins (-) sont autorisés.
  • Si un signe plus ou moins est indiqué, il doit figurer immédiatement devant (sans laisser d'espace) le premier chiffre de la valeur alphanumérique. Si aucun signe n'est indiqué, la valeur est convertie en valeur positive.
  • Le nombre de positions décimales dans le résultat de la conversion est déterminé par le symbole décimal indiqué dans la valeur alphanumérique. Si aucun symbole décimal n'est indiqué, il est considéré figurer à droite du dernier chiffre dans la valeur convertie.
  • L'alignement décimal intervient dans le résultat de la conversion. Le nombre de positions décimales dans ce résultat est déterminé par le nombre déclaré pour la variable. Si la valeur alphanumérique indiquée détient plus de positions décimales qu'il n'en est déclaré dans la variable, les positions en trop sur la droite sont tronquées. Si la partie entière de la valeur alphanumérique contient plus de chiffres qu'il n'en est déclaré pour la variable, un message d'erreur est envoyé à l'utilisateur.

Les exemples suivants illustrent les résultats de conversion des valeurs alphanumériques indiquées pour la variable alphanumérique &A en valeurs décimales pour la variable décimale &B.

 CHGVAR   VAR(&B)  VALUE(&A)

! Variable alphanum. &A  !  Variable décimale &B   !
!                        !                         !
!---------+--------------+--------+----------------!
!Longueur !Valeur        !Longueur! Résultat       !
!        ! indiquée     !         ! de conversion  !
!---------+--------------+--------+----------------!
! 10      ! '+123.1'     ! 5, 2   ! 123.10         !
! 10      ! '+123.00'    ! 5, 0   ! 123            !
! 10      ! '-123'       ! 5, 2   ! -123.00        !
!---------+--------------+--------+----------------!

Lorsque la fonction intégrée binaire est utilisée à la place de la variable décimale &B, la valeur décimale est convertie en nombre binaire signé.

Codification des valeurs alphanumériques pour les variables alphanumériques

Lorsqu'une chaîne alphanumérique est indiquée pour une variable alphanumérique, elle doit être placée entre guillemets simples si elle contient des caractères spéciaux ou uniquement des caractères numériques. Par exemple, 'ABC 67', qui intègre un espace, ou '37.92' qui contient un symbole décimal et ne comprend que des caractères numériques. Si 37.92 n'est pas mis entre apostrophes, il est considéré comme une valeur décimale et non pas une valeur alphanumérique.

Les variables alphanumériques sont complétées par des espaces (ou sont tronquées) sur la droite si la chaîne alphanumérique indiquée au paramètre VALUE est plus courte (ou plus longue) que la variable indiquée par le paramètre VAR.

Si une variable alphanumérique a une valeur égale à une partie d'une autre variable alphanumérique, indiquez, pour paramètres dans la fonction intégrée de sous-chaîne, le nom de la variable contenant la sous-chaîne, l'emplacement du caractère de début et le nombre de caractères remplacés. L'emplacement de début et le nombre de caractères peuvent être indiqués dans des variables CL.

Codification des valeurs décimales pour les variables alphanumériques

Lorsqu'une valeur décimale est indiquée pour une variable alphanumérique :

  • Les mêmes chiffres, symbole décimal et signes (si cette valeur est négative) sont utilisés dans le résultat de la conversion. La valeur est justifiée à droite dans la variable alphanumérique et complétée par des zéros à gauche, le cas échéant (ceci uniquement pour les valeurs décimales CL converties).
  • Le résultat de la conversion comporte autant de positions décimales qu'indiqué dans la valeur décimale ou défini pour la variable décimale utilisée. Si aucune position décimale n'est indiquée dans la valeur décimale ou n'est définie pour la variable décimale, aucun symbole décimal ne figure dans le résultat.
  • Un signe moins est placé à l'extrême gauche de la variable alphanumérique si la valeur décimale indiquée est négative. Aucun signe plus ne précède la variable alphanumérique pour les valeurs positives.

Les exemples suivants illustrent les résultats de conversion des valeurs décimales indiquées pour la variable décimale &B en valeurs alphanumériques pour la variable alphanumérique &A.

 CHGVAR   VAR(&A)  VALUE(&B)

Lorsque la fonction intégrée binaire est utilisée à la place de la variable décimale &B, le nombre binaire signé est converti en nombre décimal.

! Variable décimale &A  !  Variable alphanum. &B   !
!                       !                          !
!--------+--------------+---------+----------------!
!Longueur !Valeur        !Longueur! Résultat       !
!        ! indiquée     !         ! de conversion  !
!--------+--------------+---------+----------------!
! 5, 2   ! 23.00 ou +23 ! 7       ! 0023.00        !
! 5, 2   ! -3.9         ! 7       ! -003.90        !
! 5, 2   ! -123.67      ! 7       ! -123.67        !
!--------+--------------+---------+----------------!

Remarque :La variable alphanumérique doit être suffisamment longue pour contenir un symbole décimal et un signe, si la valeur peut comporter un symbole décimal ou une valeur négative. Dans le dernier exemple, bien que la valeur décimale ait pour valeur (5, 2), la variable alphanumérique doit comporter au moins 7 caractères pour la valeur indiquée. Dans l'avant-dernier exemple, la variable alphanumérique doit comporter obligatoirement 5 caractères pour que le résultat de conversion -3.90 soit admis.

La fonction intégrée de sous-chaîne peut être utilisée pour remplacer une sous-chaîne de variable alphanumérique indiquée dans un paramètre VAR par une valeur décimale dans le paramètre VALUE.

Codification des valeurs logiques ou alphanumériques pour les variables logiques

La valeur d'une variable logique doit être une valeur logique égale à '1' ou '0'. Elle doit être placée entre guillemets simples. Toutefois, il est possible d'utiliser la fonction intégrée %SWITCH à la place d'une variable logique dans le paramètre VALUE. Reportez-vous à la rubrique "Fonctions intégrées pour CL" pour obtenir une description détaillée de la fonction %SWITCH.

Codification des valeurs numériques ou alphanumériques pour les variables de nombre entier

Les règles applicables aux variables de nombre entier sont les mêmes que pour les variables décimales, à la seule différence près qu'il n'est pas possible d'indiquer des chiffres fractionnaires. Pour les affectations de variables de nombre entier non signé, la valeur constante ne peut pas être un nombre négatif.

Affectation d'une valeur NULL à une variable de pointeur

Pour affecter une valeur NULL à une variable de pointeur CL, la valeur spéciale *NULL peut être utilisée sous réserve que le source CL soit compilé avec la commande CRTCLMOD (Créer un module CL) ou la commande CRTBNDCL (Créer un programme CL lié). Si le source CL est compilé avec la commande CRTCLPGM (Créer un programme CL), définissez la variable de pointeur CL à partir d'une autre variable de pointeur CL qui a été déclarée avec ADDRESS(*NULL) et n'a pas été modifiée.

Remarque :Les valeurs des types de variables alphanumériques et décimales peuvent être indiquées sous forme hexadécimale (X'580F' pour la valeur décimale 58.0). Toutefois, si des valeurs alphanumériques sont indiquées sous cette forme, il faut être vigilant car aucun contrôle de validité n'est effectué sur les chaînes hexadécimales.

Restrictions :

  • Cette commande est admise uniquement dans un programme CL ou une procédure CL ILE.

Paramètres

Mot-clé Description Valeurs possibles Remarques
VAR Nom de la variable CL CL variable name Obligatoire, positionnel 1
VALUE Nouvelle valeur Valeur caractère Obligatoire, positionnel 2

Nom de la variable CL (VAR)

Indique la variable CL dont la valeur est à modifier. Le type de variable ne doit pas forcément être identique au type de constante ou de variable indiqué dans le paramètre VALUE, sauf si une expression est en cours d'évaluation ou si le paramètre VAR indique une variable logique.

Si la fonction intégrée de sous-chaîne ou la fonction intégrée binaire est utilisée pour remplacer une partie de variable alphanumérique (c'est-à-dire une sous-chaîne alphanumérique dans la variable) indiquée dans VAR, par une valeur précisée dans le paramètre VALUE, entrez le nom de la variable alphanumérique, suivi de l'emplacement de début et du nombre de caractères à modifier dans la chaîne alphanumérique indiquée par le nom de la variable.

Ce paramètre est obligatoire.

Nouvelle valeur (VALUE)

Indique l'expression à utiliser pour modifier la valeur de la variable. Des variables, des constantes ou une fonction intégrée peuvent être utilisées dans l'expression. Pour obtenir une description des expressions, reportez-vous à la rubrique "Expressions dans les commandes CL" dans Rubriques CL de la catégorie Programmation de l'IBM i Information Center, à l'adresse http://www.ibm.com/systems/i/infocenter/.

Ce paramètre est obligatoire.

Exemples

Exemple 1 : Modification de variables décimales

CHGVAR   &A  &B

La variable &A prend la valeur de la variable &B. Si &B a une valeur de 37.2, alors la valeur de &A devient également 37.2.

CHGVAR   &Y  (&Y + 1)

La valeur de la variable &Y augmente de 1. Si &Y a la valeur 216, sa valeur passe alors 217.

Exemple 2 : Modification de variables logiques

CHGVAR   &X  (&Y *OR &Z)

La variable logique &X prend la valeur du résultat de l'opération OR de la variable logique &Y avec &Z. Ces deux variables doivent être des variables logique lorsque *OR est utilisé. Si &Y est égal à '0' et &Z à '1', alors &X prend la valeur '1'.

CHGVAR   &A  %SWITCH(10XXXX10)

La valeur de la variable logique &A est déterminée par les résultats logiques de la fonction intégrée %SWITCH. Les positions 1, 2, 7 et 8 du masque à 8 caractères indiquent que les indicateurs externes du travail doivent être testés pour les valeurs indiquées dans le masque. Les indicateurs externes 1 et 7 sont testés pour les valeurs 1, et les indicateurs externes 2 et 8 pour les valeurs 0. (Les indicateurs externes 3 à 6 ne sont pas testés.) Si tous les quatre indicateurs contiennent les valeurs indiquées dans le masque %SWITCH, le résultat logique de la fonction intégrée est vérifié et la variable &A prend la valeur '1'. Si l'un des quatre indicateurs externes contient une valeur ne figurant pas dans le masque, le résultat est faux et &A prend la valeur '0'.

Exemple 3 : Modification des variables alphanumériques

CHGVAR   VAR(&A)  VALUE(AB *CAT CD)
CHGVAR   &A  ('AB' *CAT 'CD')

Ces deux commandes rendent la valeur de la variable &A égale à la chaîne de caractères ABCD, qui est le résultat de la concaténation des deux chaînes de caractères AB et CD. La première commande est codée sous forme de mot clé avec des chaînes qui ne sont pas indiquées entre apostrophes. La seconde commande est codée sous forme de position fixe avec le paramètre VALUE indiquant deux chaînes de caractères entre apostrophes.

CHGVAR   &VAR1  &VAR2

Cet exemple illustre une variable à 6 caractères dont la valeur est remplacée par une chaîne de caractères plus courte. Si &VAR1 = ABCDEF et &VAR2 = XYZ avant le traitement de la commande, le résultat est &VAR1 = XYZ complété à droite par trois blancs.

CHGVAR   &VAR1  '12'

Si &VAR1 est considérée comme une variable alphanumérique d'une longueur de 6 caractères, le résultat est &VAR1 = 12 complété à droite par quatre blancs. Les apostrophes sont obligatoires dans cet exemple.

CHGVAR   VAR(%SUBSTRING(&A 4 3))  VALUE(REP)
ou
CHGVAR   VAR(%SST(&A 4 3))  VALUE(REP)

La fonction intégrée de sous-chaîne est utilisée pour modifier 3 caractères de la constante alphanumérique figurant dans la variable &A. Si &A a pour valeur ABCDEFGH, les quatrième, cinquième et sixième caractères de &A prennent la valeur REP, ce qui donne ABCREPGH.

CHGVAR   VAR(%SST(*LDA 1 512))  VALUE(' ')

La fonction intégrée de sous-chaîne est utilisée pour remplacer toute la zone de données locale par des blancs.

CHGVAR  VAR(%BINARY(&A 1 2))  VALUE(20)

ou

CHGVAR  VAR(%BIN(&A 1 2))  VALUE(20)

La fonction intégrée binaire est utilisée pour remplacer les deux premiers caractères de la variable alphanumérique &A par la valeur binaire signée du nombre 20 ou le nombre hexadécimal X'0014'. Si la variable alphanumérique &A a une longueur égale à 10, les caractères 3 à 10 de cette variable demeurent inchangés.

Messages d'erreur

Messages *ESCAPE

CPF0816
Valeur &1 incorrecte pour le masque %SWITCH.

© Copyright IBM Corp. Texte d'aide reproduit à des fins de formation.