> Tech > Tester des BITS avec RPG en format libre

Tester des BITS avec RPG en format libre

Tech - Par iTPro - Publié le 24 juin 2010
email

Q: Je lis un fichier dans un programme RPG en format libre dont un champ est appelé YSTATI, c’est un champ caractère d’un octet de long. J’aimerais faire quelque chose de particulier quand le huitième bit est activé (on). Comment puis-je tester la valeur d’un bit

en RPG en format libre ?

R : Le code opération TESTB a été remplacé par le BIF %bitand() en RPG en format libre. Le BIF %bitand effectue une opération AND sur chaque bit dans un champ sur deux champs ou plus. Quand vous effectuez une opération AND, le bit dans le résultat est activé (on) uniquement si les bits dans tous les champs comparés sont activés. Soit les deux octets suivants et le résultat (exprimé en binaire) :

Octet 1 : 01010101
Octet 2 : 10110011
                ________
                00010001

Seuls les quatrième et huitième bits, à partir de la gauche, sont activés dans le résultat. La raison en est que ce sont les seuls bits qui étaient activés (c’est-à-dire de valeur 1) dans les deux octets.

Pour utiliser %bitand() pour tester les valeurs de certains bits, vous pouvez créer un champ « bit mask ». Là, mettez à 1 les bits vérifier, et à 0 les autres. Un bit mask qui ne vérifie que le huitième bit serait donc 00000001. Avant d’utiliser ce bit mask, vous devez le convertir en hexadécimal. Ici, la valeur hexa correspondante est x’01′. Vous pouvez ensuite l’utiliser dans le programme RPG en format libre comme le montre la figure 4.

Le BIF %bitand() a été introduit en V5R2. Pour activer des bits dans des releases antérieures, il faut utiliser le code opération TESTB. Malheureusement, cela n’existe pas dans RPG en format libre. L’exemple de la figure 5 fait la même chose que le code de la figure 4, mais avec TESTB. J’aime montrer clairement que je vérifie certains bits d’un champ. Pour cela, je définis une constante nommée qui correspond au bit que je vérifie. Ainsi, si l’activation du bit 8 signifie qu’un client a payé en totalité, alors je définirai la constante de la figure 6. Quand je veux vérifier cette constante, je peux coder en V5R2 ou version ultérieure, comme le montre la figure 7. La figure 8 montre comment je peux utiliser cette constante dans des releases antérieures.

Il est judicieux de définir tous les « flags de bits » utilisés pour un fichier particulier dans un membre /copy. Vous pourrez ainsi les utiliser pour tous vos programmes sans être obligés de les redéfinir.

Par Scott Klement

Téléchargez gratuitement cette ressource

IBMi et Cloud : Table ronde Digitale

IBMi et Cloud : Table ronde Digitale

Comment faire évoluer son patrimoine IBMi en le rendant Cloud compatible ? Comment capitaliser sur des bases saines pour un avenir serein ? Faites le point et partagez l'expertise Hardis Group et IBM aux côtés de Florence Devambez, DSI d'Albingia.

Tech - Par iTPro - Publié le 24 juin 2010