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
Tester des BITS avec RPG en format libre
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 cette ressource
Sécuriser Microsoft 365 avec une approche Zero-Trust
Découvrez comment renforcer la cyber-résilience de Microsoft 365 grâce à une approche Zero-Trust, une administration granulaire et une automatisation avancée. La technologie Virtual Tenant de CoreView permet de sécuriser et simplifier la gestion des environnements complexes, tout en complétant vos stratégies IAM, y compris dans les secteurs réglementés.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Cybersécurité française 2026 : explosion des startups, ralentissement des scale-ups et virage stratégique de l’IA
- Le Cercle de l’Innovation décerne le Prix de l’Innovation du Public 2026
- Avec l’IA agentique, la robustesse des SI redevient stratégique
- Les erreurs du secteur bancaire dans son approche IA
Articles les + lus
Couchbase lance AI Data Plane pour industrialiser l’IA agentique
Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
Computex 2026 : 5 signaux forts à retenir
La chaîne d’approvisionnement, point de rupture récurent du SI
Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
À la une de la chaîne Tech
- Couchbase lance AI Data Plane pour industrialiser l’IA agentique
- Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
- Computex 2026 : 5 signaux forts à retenir
- La chaîne d’approvisionnement, point de rupture récurent du SI
- Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
