1

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

4

1 回答 1

2

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

如果您真的想查看等价的 ASCII,请使用 TRAN=ETOA,然后使用 TRAN=HEX。

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

INRECOUTREC相似,INREC在 aSORT或之前操作MERGEOUTREC之后。

我建议,除非您需要在 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”,因此覆盖您之前转换的数据。OVERLAY可以做到这一点,BUILD不能在一个声明中。

于 2014-11-18T13:37:34.613 回答