Les tables de conversion sont des objets de type *TBL
Vous en trouvez un grand nombre dans QSYS ou QUSRSYS les 2 plus connues sont
QEBCDIC *TBL QSYS ASCII TO EBCDIC TRANSLATE TO ASCII
QASCII *TBL QSYS EBCDIC TO ASCII TRANSLATE TO EBCDIC
elles servent à convertir une donnée, elle sont utilisées dans certaines commandes FTP ou QUERY Etc …
Vous pouvez également les utiliser vous dans vos développements (bien qu’aujourd’hui SQL semble une meilleur alternative)
Imaginons que vous voulez crypter quelque chose par exemple dans une field proc et que pour vous l’utilisation des API Qc3EncryptData et Qc3DecryptData soit un peu compliqué.
Vous pouvez utiliser cette solution c’est pas le top mais la multiplication des moyens de cryptage ralenti les hackers …
Vous devrez donc créer votre table de conversion
dans un fichier source le plus souvent QTBLSRC
Vous devez alors compiler votre table par la commande CRTTBL …
j’ai choisi pour mon exercice de faire une table alternative, la première fois elle crypte la deuxième elle decrypte
il existe une API système qui s’appelle QCDXLATE qui a un format très simple
https://www.ibm.com/docs/en/i/7.3?topic=ssw_ibm_i_74/apis/QDCXLATE.html
Voici un exemple d’utilisation en RPG et en CLP
les programmes donneront ce résultat
en CLP
pgm
dcl &MyValLen *dec (5 0) 30
dcl &MyVal *char 30
chgvar &myval 'Bonjour Michel'
sndusrmsg ('Avant :' *bcat &myval) msgtype(*info)
call QDCXLATE (&MyValLen &MyVal 'CONVERT')
sndusrmsg ('Premier :' *bcat &myval) msgtype(*info)
call QDCXLATE (&MyValLen &MyVal 'CONVERT')
sndusrmsg ('Second :' *bcat &myval) msgtype(*info)
endpgm
en RPGLE
**free
CTL-OPT
DFTACTGRP(*NO)
DATFMT(*ISO)
OPTION(*SRCSTMT : *NODEBUGIO) ;
Dcl-PR Translate ExtPgm('QDCXLATE');
Length Packed(5:0) const;
Data Char(30) options(*varsize);
Table Char(10) const;
End-PR;
dcl-s Texte Char(30) ;
Texte = 'Bonjour Michel' ;
dsply ('Avant : ' + Texte);
Translate(128 : Texte : 'CONVERT');
dsply ('Premier :' + Texte) ;
Translate(128 : Texte : 'CONVERT');
dsply ('Second : ' + Texte) ;
*inlr = *on ;
Conclusion :
Ce n’est pas forcément beaucoup utilisé mais ca peut être utilisé pour des conversions basiques ASCII EBCDIC ANSII etc …
Ne plus utiliser pour mettre en majuscule les fonctions UCASE en RGP ou SQL sont plus performantes et plus simples
un source de table peut être extrait par la commande RTVTBLSRC …