如何使用DFSORT将IBM文件转换为十六进制?

时间:2014-11-18 11:54:24

标签: hex jcl dfsort

我正在尝试将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”命令。

1 个答案:

答案 0 :(得分:2)

您的控制卡正在为您提供所要求的输出。它们向您显示EBCDIC中这些字符的十六进制值,而不是ASCII,即您期望的十六进制值。

如果您确实想要查看ASCII等效项,请使用TRAN = ETOA,然后使用TRAN = HEX。

您正在使用OUTREC FIELDSFIELDS有一个新的同义词(从10年开始),即BUILD。支持FIELDS以实现向后兼容性。

INRECOUTREC相似,INREC之前在SORTMERGEOUTREC之前运行。

除非您需要在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不能在一个声明中。