Как преобразовать файл IBM в шестнадцатеричный с использованием 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 ответ

Решение

Ваши контрольные карты дают вам результат, о котором вы просили. Они показывают вам шестнадцатеричные значения этих символов в EBCDIC, а не в ASCII, шестнадцатеричные значения, которые вы ожидаете.

Если вы действительно хотите увидеть эквивалент ASCII, используйте TRAN=ETOA, затем TRAN=HEX.

Ты используешь OUTREC FIELDS, FIELDS имеет новый синоним (от ровно 10 лет), который является BUILD. ПОЛЯ поддерживаются для обратной совместимости.

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", поэтому перезаписываете ваши предыдущие преобразованные данные. OVERLAY может сделать это, BUILD не может в одном утверждении.

Другие вопросы по тегам