> Tech > RIP KLIST

RIP KLIST

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

D'emblée, RPG IV a promu la carte D comme un emplacement de programme unique et, plus important, une syntaxe unique pour définir chaque élément de données que votre programme devra traiter. Les champs de travail (variables autonomes), les structures de données, et les constantes nommées sont tous définis au moyen

RIP KLIST

de cartes D. Même les listes de
paramètres ont ouvert la voie à  des
prototypes et à  des interfaces de procédures
définies avec des cartes D.
Seule exception de taille : les listes
de clés. Curieusement, les codes opération
KLIST et KFLD s’entêtent à  être
le seul moyen de grouper des champs
dans le but de lire des fichiers avec des
clés complexes. En V5R2, la nouvelle
fonction %KDS (Key Data Structure)
permet de nommer une structure de
données simple que l’on utilisera
comme argument de recherche (key
list) pour n’importe quelle opération
d’I/O sur des fichiers avec clés, comme
CHAIN, READE ou SETLL.
La définition de structure de données
n’a pas d’exigences particulières.
Cependant, vous pourriez tirer parti
d’une poignée de nouvelles possibilités
de structure de données V5R2 qui
aident à  définir une structure de données
d’après le format d’enregistrement
d’un fichier. Utilisez le mot-clé LIKEREC
pour définir une structure de
données d’enregistrement avec des sous-champs qui imitent un format
d’enregistrement dans un fichier décrit
en externe (à  partir des cartes F).
Outre le fait de nommer le format
d’enregistrement, LIKEREC supporte
également un second argument facultatif
qui permet de limiter la structure
de données à  certains champs, dans ce
cas, les champs clés listés dans le DDS
pour un fichier avec clés :

LIKEREC(record-name:*KEY)

Les autres options sont *INPUT
(champs acceptant l’entrée, par défaut),
*OUTPUT (champs permettant
la sortie), ou *ALL. La figure 2 illustre la
définition d’une structure de données
d’enregistrement.
Si la carte F spécifie le mot-clé PREFIX,
les sous-champs incluront le préfixe
; si la carte F spécifie le mot-clé RENAME, utilisez le nom interne du programme
pour le format d’enregistrement
(le nouveau nom) dans le motclé
LIKEREC. La structure de données
résultante est une structure de données
qualifiée implicitement. Cela signifie
que vous devez vous référer aux
noms de sous-champs dans la structure
de données par leur nom qualifié,
lequel inclut le nom de la structure de
données elle-même. Dans la figure 2,
les variables CustKey. CpyNbr et
CustKey.CustNbr sont des exemples de
noms de champs qualifiés. (Pour en savoir
plus sur les améliorations de structure
de données en V5R2, voir « 5 trucs
sur RPG », iSeries News, février 2003, et
« RPG IV s’améliore à  nouveau dans la
V5R2 », iSeries News, avril 2003 ou sur
www.itpro.fr .)
Signalons au passage que le motclé
EXTNAME supporte désormais le
même argument final que LIKEREC
(c’est-à -dire, *KEY, *INPUT, *OUTPUT
ou *ALL), conduisant à  des structures
de données décrites en externe présentant
peu ou prou le même potentiel
que les structures de données
d’enregistrement.
Une fois que vous avez défini une
structure de données – que ce soit une
structure de données d’enregistrement
ou toute autre structure de données
– vous pouvez simplement nommer
la structure de données comme
un argument de la fonction %KDS
quand vous effectuez une opération
d’I/O fichier sur un fichier décrit en externe.
La figure 2 utilise CustKey
comme la structure de données clé
pour une opération CHAIN. Tous les
sous-champs de CustKey seront utilisés
comme une liste de clés dans l’opération
d’I/O.
Et, si vous voulez accéder à  un fichier
au moyen d’une clé partielle ? La
fonction %KDS vous permet aussi de
coder le nombre de champs à  utiliser
comme second argument facultatif :

Chain %KDS(CustKey:2) Customer;

A proprement parler, la fonction %KDS n’a vraiment rien d’une fonction,
même si elle utilise la même syntaxe
que les autres BIF. Mais, contrairement
à  la plupart des autres fonctions
intégrées, %KDS ne renvoie pas une
valeur et ne peut pas être incorporé
dans une expression.
Autre remarque importante : la
fonction %KDS n’est valide que dans
un bloc de spécifications en format
libre. Vous ne pouvez pas spécifier
%KDS en Factor 1 d’une carte C en format
fixe. La fonction %KDS est l’une de
plusieurs améliorations de coding
d’I/O de fichier en V5R2. Pour prendre
connaissance des autres améliorations
de coding d’I/O de fichier, voir l’encadré
« Mise à  jour d’I/O de fichier en
V5R2 ».

Téléchargez cette ressource

Guide des solutions de cloud & services managés simplifiés

Guide des solutions de cloud & services managés simplifiés

A la fois cloud provider et ESN, le groupe ACESI s’appuie sur les technologies VMware pour apporter toute la richesse du cloud dans des environnements hybrides. Découvrez, dans ce guide thématique, les bonnes pratiques pour répondre aux défis de simplification du Cloud.

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