Как преобразовать файл 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
не может в одном утверждении.