Найти и удалить динамическую строку, используя JCL
У меня есть требование.
Прочитайте запись, найдите 5-байтовую строку, начинающуюся с 'Q' (например: Q$A12), и удалите строку из записи.
Эта 5-значная строка может присутствовать в любом месте записи. Строка, начинающаяся с 'Q', и остальные 4 байта могут быть разными. Моя длина записи составляет 15 байт.
Я должен сделать это с помощью сортировки.
Пример:
Входные данные :
ABCDEFG123**QABC2**
ACDHLAMANWST2HY
HAI**Q&A12**ACMATLK
Выход:
ABCDEFG123
ACDHLAMANWST2HY
HAIACMATLK
1 ответ
OPTION COPY
INREC IFOUTLEN=15,
IFTHEN=(WHEN=INIT,
FINDREP=(IN=C' ',
OUT=X'FE')),
IFTHEN=(WHEN=INIT,
FINDREP=(IN=C'Q',
OUT=X'FD',
STARTPOS=12)),
IFTHEN=(WHEN=INIT,
PARSE=(%00=(ENDBEFR=C'Q',
FIXLEN=15),
%01=(SUBPOS=1,
STARTAT=C'Q',
FIXLEN=5),
%02=(FIXLEN=10)),
BUILD=(%00,
X'FEFEFEFEFE',
%02)),
IFTHEN=(WHEN=INIT,
OVERLAY=(1,30,
SQZ=(SHIFT=LEFT))),
IFTHEN=(WHEN=INIT,
FINDREP=(IN=X'FE',
OUT=C' ')),
IFTHEN=(WHEN=INIT,
FINDREP=(IN=X'FD',
OUT=C'Q'))
Установите длину выходных записей 15.
Измените все исходные пробелы на не отображаемый символ (при условии, что ваши данные только для отображения).
Измените любые Q, за которыми не следуют четыре байта, на другой не отображаемый символ.
Используйте PARSE, чтобы разбить ввод на три поля: данные до Q (если есть, все данные); Пять байтов, начинающихся с Q; остаток (когда Q присутствует, а не в конечной позиции).
Используйте BUILD, чтобы сгенерировать новую запись с пробелом, пять из них, если необходимо, чтобы установить Q-данные в пробел. Пользователь OVERLAY, чтобы удалить конечные пробелы с полей.
Изменить значения пространства обратно в пространство. Измените Q-значение обратно на Q.