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

时间:2015-12-06 11:30:36

标签: mainframe dfsort

我有一个要求。

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

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

我必须使用SORT。

示例:

输入:

"{0} {1}".format("Hello", "World")

输出

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

1 个答案:

答案 0 :(得分: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.