Найти и удалить динамическую строку, используя 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.

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