使用 JCL 查找和删除动态字符串

Find and delete dynamic string using JCL

我有一个要求。

读取一条记录,找到一个以'Q'开头的5字节字符串(如:Q$A12),将该字符串从记录中删除。

这个 5 位数字的字符串可以出现在记录中的任何位置。以 'Q' 开头的字符串和其余 4 个字节可以变化。我的记录长度是 15 个字节。

我必须使用 SORT 来执行此操作。

示例:

输入:

ABCDEFG123**QABC2**
ACDHLAMANWST2HY
HAI**Q&A12**ACMATLK

输出:

ABCDEFG123 
ACDHLAMANWST2HY
HAIACMATLK 
  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。

将所有原始空白更改为非显示字符(假设您的数据仅显示)。

将任何后面没有跟随四个字节的Qs更改为另一个非显示字符。

使用 PARSE 将输入拆分为最多三个字段:Q 之前的数据(如果存在,则为所有数据); Q开头的五个字节;余数(当 Q 存在且不在最终位置时)。

使用 BUILD 生成一个新记录,具有 space-value,其中五个,如果需要将 Q-data 设置为 space。用户 OVERLAY 从字段中删除尾随空白。

将 space 值改回 space。将 Q 值改回 Q.