我正在尝试将IBM文件传递给十六进制值。
使用此输入:
H800
将此输出保存在文件中:
48383030
我试过这样:
//R45ORF80V JOB (EFAS,2SGJ000),'LLAMI',NOTIFY=R45ORF80,
// MSGLEVEL=(1,1),MSGCLASS=X,CLASS=A,
// REGION=0M,TIME=5
//*---------------------------------------------------
//SORTEST EXEC PGM=ICEMAN
//SORTIN DD DSN=LF58.DFE.V1408001,DISP=SHR
//SORTOUT DD DSN=LF58.DFE.V1408001.OUT,
// DISP=(NEW,CATLG,DELETE),
// LRECL=4,DATACLAS=CDMULTI
//SYSOUT DD SYSOUT=X
//SYSPRINT DD SYSOUT=X
//SYSUDUMP DD SYSOUT=X
//SYSIN DD *
SORT FIELDS=COPY
OUTREC FIELDS=(1,4,HEX)
END
/*
但它输出以下内容:
C8F1F0F0
我做错了什么? 是否可以将具有500个LREC和COMP-3字段的文件转换为十六进制? 顺便说一下,当我使用文件管理器浏览文件时,我可以使用“HEX”命令。
答案 0 :(得分:2)
您的控制卡正在为您提供所要求的输出。它们向您显示EBCDIC中这些字符的十六进制值,而不是ASCII,即您期望的十六进制值。
如果您确实想要查看ASCII等效项,请使用TRAN = ETOA,然后使用TRAN = HEX。
您正在使用OUTREC FIELDS
。 FIELDS
有一个新的同义词(从10年开始),即BUILD。支持FIELDS以实现向后兼容性。
INREC
和OUTREC
相似,INREC
之前在SORT
或MERGE
,OUTREC
之前运行。
除非您需要在SORT / MERGE之后执行此操作,否则我建议使用INREC
。
所以:
INREC BUILD=(1,4,TRAN=ETOA)
但是,没有必要使用BUILD。 BUILD始终创建新版本的记录。很多时候,当你重新排列领域时,这就是你想要的。在这里,你不是。
INREC OVERLAY=(1,4,TRAN=ETOA)
如果用此替换OUTREC,输出文件将以ASCII格式编码。
如果你想看到ASCII:
INREC OVERLAY=(1,4,TRAN=ETOA,1,4,TRAN=HEX)
如果您想要查看ASCII:
INREC OVERLAY=(1,4,TRAN=ETOA,1:1,4,TRAN=HEX)
请注意上一个示例中的1:
。这表示"结果将位于第1位和第34位,因此会覆盖以前转换的数据。 OVERLAY
可以做到这一点,BUILD
不能在一个声明中。