#sorting #mainframe #jcl
Вопрос:
У меня есть файл VB, в котором может быть шестнадцатеричное значение «0D25″ в любой позиции от 1 до 20 (значения из 21 позиции не должны изменяться). Это необходимо заменить шестнадцатеричным значением » 4040’.
Ввод:
---- ----1---- ----2---- ----3---- ----4----
0000/12345678 566 @(#)@0000/12345678 566
FFFF6FFFFFFFF02FFF44B475BFFFF6FFFFFFFF02FFF02
0000112345678D5566005DBD50000112345678D5566D5
Ожидаемый результат:
---- ----1---- ----2---- ----3---- ----4----
0000/12345678 566 @(#)@0000/12345678 566
FFFF6FFFFFFFF44FFF44B475BFFFF6FFFFFFFF02FFF02
000011234567800566005DBD50000112345678D5566D5
Я использовал СОРТИРОВКУ с контрольной картой ниже.
SORT FIELDS=COPY
OUTREC FIELDS=(1,4,5,20,CHANGE=(20,X'0D25',X'4040'),
NOMATCH=(5,20),
21)
Ответ №1:
CHANGE=
это работает не так, как вы думаете. Он выполняет поиск только в указанной позиции. Затем он заменяется либо заменяющим символом(символами), либо NOMATCH=
символом(символами) точно такой длины, которая указана в качестве первого подпараметра CHANGE=
(в вашем случае 20).
FINDREP=
выполняет поиск указанного символа(ов) в каждой позиции и заменяет его заменяющим символом(символами). Вы ограничиваете часть записи , подлежащую проверке STARTPOS=
, ENDPOS=
ключевыми словами и, соответственно.
В вашем случае следующее утверждение должно делать то, что вы хотите:
OUTREC FINDREP=(INOUT=(X'0D25',X'4040'),STARTPOS=5,ENDPOS=24)
Комментарии:
1. большое спасибо за помощь. Это сработало так, как мне нужно.