给定一个字符的十六进制代码,如何将它转换为CL程序中的相应字符?

时间:2012-05-29 15:41:40

标签: character-encoding ibm-midrange hex journal

现在我需要使用CL程序在日记中找到特定条目。我用来定位它的方法是DSPJRNE将日志条目放在输出文件中,然后使用OPNQRYF过滤所需的日志条目。该文件是唯一键控的,因此我的计划是将日记帐分录数据与密钥进行比较。问题是其中一个密钥是压缩十进制,因此在日记帐分录中它被视为十六进制字符代码并显示为一些奇怪的符号。所以为了比较我需要将压缩十进制密钥转换成相应字符的字符串。如何在CL中实现这一目标?如果不能使用CL,那么RPG呢?

2 个答案:

答案 0 :(得分:2)

要回答您的直接问题,CVTCH MI指令会将十六进制转换为char,但我不会走这条路线;既不是CL也不是RPG。相反,我会采取一些额外的步骤来接受詹姆斯的建议。

DSPJRNE OUTFILE(QTEMP/DSPJRNE)
QRY input file DSPJRNE, output file QRYJRNE, select only JOESD
CRTDUPOBJ PRODUCTION_FILE QTEMP/JRNF DATA(*NO)
CPYF QRYJRNE JRNF FMTOPT(*NOCHK)

这将为您提供一个外部描述的文件,其格式与生产文件完全相同。你可以查询等等。

答案 1 :(得分:1)

如果要为特定文件提取日记条目,可以将它们转储到外部描述的文件中,并巧妙地使用SQL:

CREATE TABLE QTEMP/QADSPJRN LIKE QSYS/QADSPJRN

ALTER TABLE QTEMP/QADSPJRN DROP COLUMN JOESD

CREATE TABLE QTEMP/DSPJRNE AS (SELECT * FROM QTEMP/QADSPJRN, FILE-LIB/FILE) 
WITH NO DATA

DSPJRNE ... OUTPUT(*OUTFILE) OUTFILFMT(*TYPE1) OUTFILE(QTEMP/DSPJRNE) 
ENDDTALEN(*CALC)