> Tech > Extraction des définitions de champs

Extraction des définitions de champs

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

Quand vous déclarez un fichier à  un programme CL, le programme peut accéder aux champs associés à  ce fichier. Les champs d'un fichier déclaré deviennent disponibles pour le programme comme variables CL - il n'est pas nécessaire de déclarer les variables séparément.

Quand le fichier est décrit en externe, le

Extraction des définitions de champs

compilateur utilise la définition
de format d’enregistrement externe
associée à  l’objet fichier pour
identifier chaque champ et son type et
longueur de donnée. La figure 1 présente
le DDS pour le fichier exemple TestPF. Pour déclarer ce fichier dans un
programme, codez

DclF TestPF

Le système met les variables suivantes
à  la disposition du programme :

Variable     Type
&Code        *Char1
&Number      *Dec5,0
&Field       *Char30

Votre programme peut ensuite utiliser ces variables bien qu'elles ne soient pas déclarées explicitement. Vous pourriez, par exemple, inclure dans le programme les instructions

If ((&Code *Eq 'A') *And + 
   (&Number *GT 1à˜)) +
   ChgVar &Code ('B')

A noter que quand vous faites référence au champ dans le programme, vous devez faire précéder le nom du champ par un caractère & comme préfixe. Toutes les variables CL, y compris celles qui sont définies implicitement à  l'aide de la commande DclF et les définitions de champs de fichiers, requièrent le préfixe & quand elles sont référencées dans un programme.

Qu'en est-il des fichiers décrits par programme - c'est-à -dire sans définition de données externes ? Supposons que vous créiez le fichier suivant en utilisant la commande CrtPF (Create Physical File)

CrtPF File(DiskFile) RcdLen(258)
puis que vous déclariez le fichier DiskFile dans votre programme CL. Comme il le fait avec des fichiers définis en externe, le compilateur CL donne automatiquement accès aux fichiers décrits par programme. Comme il n'y a pas de format d'enregistrement défini en externe, le compilateur reconnaît chaque enregistrement du fichier comme étant constitué d'un champ unique. Ce champ est toujours nommé &FileName, où FileName est le nom du fichier. Par conséquent, si vous codez
DclF DiskFile

votre programme CL reconnaît un
champ, &DiskFile, d'une longueur
égale à  la longueur d'enregistrement
de DiskFile. Vous pouvez ensuite extraire
les sous-champs avec lesquels il
vous faut travailler. En CL, vous extrayez
les champs en utilisant la fonction
intégrée %Sst (ou %Substring). Les instructions

ChgVar &Field1 (%Sst(&DiskFile 1 1à˜))
ChgVar &Field2 (%Sst(&DiskFile 11 25))
ChgVar &Field3 (%Sst(&DiskFile 5à˜ 1))

extraient trois sous-champs du
champ unique de &DiskFile.

Lorsque vous utilisez des fichiers
décrits par programme, deux règles
s'imposent. Premièrement, vous devez
extraire les sous-champs chaque fois
que vous lisez un enregistrement du fichier.
Contrairement à  RPG, CL n'a pas
de concept de structure de données
globale, applicable pour chaque
lecture. Avec chaque cycle de
lecture, il faut utiliser la fonction %Sst pour extraire les sous-champs.

Deuxièmement, la fonction %Sst
ne supporte qu'une donnée caractère.
Si un certain intervalle de positions
contient des données numériques, il
faut extraire ces données comme un
champ caractère puis les déplacer dans
un champ numérique. La commande
ChgVar (Change Variable) permet de
déplacer des données caractères dans
un champ numérique. Vous devez
aussi vérifier que le type de données
de la variable correspond à  celui des
données que vous êtes en train d'extraire.

Deuxièmement, la fonction %Sst
ne supporte qu'une donnée caractère.
Si un certain intervalle de positions
contient des données numériques, il
faut extraire ces données comme un
champ caractère puis les déplacer dans
un champ numérique. La commande
ChgVar (Change Variable) permet de
déplacer des données caractères dans
un champ numérique. Vous devez
aussi vérifier que le type de données
de la variable correspond à  celui des
données que vous êtes en train d'extraire.

Dcl &DateChar *Char ( 8 )
Dcl &DateNbr *Dec ( 8 à˜)
. . .
ChgVar &DateChar (%Sst(&DiskFile 251 8))
ChgVar &DateNbr (&DateChar)

La première commande ChgVar extrait
la sous-chaîne du champ
&DiskFile unique et la place dans la variable
&DateChar. La seconde ChgVar
place le contenu du champ &DateChar
dans le champ numérique et
&DateNbr.

En utilisant cette technique,
assurez-vous que la sous-chaîne ne
contient que des données numériques.
Si ce n’est pas le cas, le système
enverra à  votre programme un message
d’erreur franchement désagréable
et votre programme se terminera
anormalement.

Téléchargez cette ressource

Préparer l’entreprise à l’IA et aux technologies interconnectées

Préparer l’entreprise à l’IA et aux technologies interconnectées

Avec la « quatrième révolution industrielle », les environnements hyperconnectés entraînent de nouveaux risques en matière de sécurité. Découvrez, dans ce guide Kaspersky, comment faire face à cette nouvelle ère de vulnérabilité.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010