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
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
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é.