8.3 LES MOUVEMENTS DE DONNEES – MOVE

Quels que soient les PICTURE et USAGE, il n’existe qu’un seul ordre de mouvement de données en mémoire centrale, l’ordre MOVE.

Format 1 :

     |nom-de-donnée-1|
MOVE | littéral               |   TO nom-de-donnée-2 nom-de-donnée-3

Exemple :
MOVE TVA TO TVAED. (TVAED = TVA)
MOVE "EXERCICE N° 1 " TO TITRE. ( TITRE = EXERCICE N° 1)
MOVE ZERO TO V1 V2 V3 V4 V5.
MOVE STRUCTURE1 TO STRUCTURE2.

Remarque : le fait d’avoir un seul verbe MOVE pour tous les types de données implique de veiller à ne pas mouvementer n’importe quel type de donnée sur n’importe quel type de zone de données.
Dans le cas des alphabétiques A : ne pourront être mouvementés que sur des zones élémentaires A ou X et sur des zones groupes ( les structures sont toujours considérées comme des PIC X).

Les alphanumériques X : ne pourront en principe être mouvementés que sur des zones PIC X ou sur des structures. Toutefois, le mouvement sur une zone numérique est autorisé, mais le programmeur doit être certain que la zone ne contient que des données numériques sans quoi il provoquera un arrêt du programme (MCH1202).

Les numériques, ne peuvent être mouvementés que vers des numériques ou des numériques d’édition. L’instruction MOVE convertit immédiatement n’importe quel usage en n’importe quel autre usage, pour passer d’un DISPLAY à un BINARY ou d’un PACKED-DECIMAL vers un DISPLAY aucune information ou instruction complémentaire n’est demandée au programmeur, la conversion est immédiate.

Principes de cadrage :

Les règles de cadrage sont toujours dictées par la zone réceptrice.

– Dans le cas des alphabétiques et alphanumériques :
La donnée est cadrée à gauche avec troncature à droite si la zone émettrice est trop grande ou complétée avec des caractères blancs à droite si la zone est plus courte.
MOVE " " TO L120 avec 01 L120 PIC X(120).
MOVE 120 blancs dans L120

– Dans le cas des numériques :
Les nombres sont alignés sur la partie décimale, si celle-ci est absente de la zone réceptrice elle est considérée comme étant à l’extrême droite.
Il a ensuite troncature éventuel ou complément de zéros à droite et à gauche si le nombre de chiffres désignés par la PIC de la zone réceptrice l’exige.
Si la zone réceptrice n’a pas de signe alors c’est la valeur absolue qui est transférée.
Si la zone émettrice n’est pas purement numérique le résultat est alors imprévisible.

Un INDEX est formellement interdit dans un MOVE.

Le contenu de la zone émettrice reste exactement le même après l’instruction MOVE.

MOVE et REDEFINES :

Dans le cas d’une redéfinition de zone
02 B……
02 C REDEFINES B…

Le fait d’exécuter un MOVE B TO C ou MOVE C TO B alors qu’il s’agit de la même zone mémoire entraîne un résultat inconnu!!

LE MOVE CORRESPONDING

Format :
MOVE CORR nom-de-groupe-1 TO nom-de-groupe-2

Le MOVE CORRESPONDING suit le même principe que l’option CORR des instructions arithmétiques. Les données de la zone groupe-1 sont mouvementées sur les zones de même nom de la zone groupe-2.

Toutefois, avec MOVE, il n’est pas exigé que les zones de même nom soient toutes deux élémentaires , mais qu’au moins l’une des deux zones le soit.

Mais, toute zone élémentaire décrite avec une clause OCCURS ou REDEFINES est ignorée.

Utilisation des constantes figuratives.

Les constantes figuratives SPACE(S) et ZERO(S) peuvent être utilisées dans un MOVE.

SPACE : pour mettre une zone PIC X ou PIC A à blanc, toute la zone est remplie de blancs, il peut également être question d’une structure.

Exemple :
MOVE SPACE TO VAR.
La variable VAR PIC XX ou PIC AA est remplie de blancs

MOVE SPACE TO STRUCTURE.
Ici toutes les variables contenues dans le groupe STRUCTURE sont mises à blancs. Il s’agit donc d’être très prudent, car si dans la description de structure nous avons une variable en PIC 9 son contenu sera un BLANC.

ZERO : permet de mettre n’importe quel variable PIC 9 usage…… à ZERO. Il en ira exactement de même avec un groupe et dans ce cas toutes les variables du groupe seront initialisées à 0.

Exemple :
MOVE ZERO TO VAR ——-> Dans ce cas VAR PIC 99.

MOVE ZERO TO STRUCTURE.
Et dans ce cas 01 STRUCTURE.
                                    02 A PIC 9999 BINARY.
                                    02 B PIC 9(5).

A et B sont mises à 0.

Remarque : l’usage d’un caractère de la chaîne est possible par l’option
MOVE CHAINE(i:j) TO A
Ou de l’hexadécimal : MOVE X"09" TO A