FINDREP一个简短的字符串较长,而不会覆盖下一列(FINDREP a short string

2019-10-23 19:29发布

所以,我有一组像这样的数据:

mxyzd1    0000015000
mxyzd2    0000016000 
xyzmd5823 0000017000

我需要使用DFSORT得到这样的数据:

123xyzd1  0000015000
123xyzd2  0000016000 
xyz123d5820000017000

所以,我的意思是:不覆盖的第二列由“123”替换所有字符“M”,所以你到了第二列(开始于POS 11)之前截断数据。

到目前为止,我已经能够替代数据,但不能防止所有我得到的数据转移的,这是我到目前为止的代码:

SYSIN    DATA  *                                                 
 SORT FIELDS=(1,1,CH,A)                                          
 OUTREC FINDREP=(IN=C'm',OUT=C'123',STARTPOS=1,ENDPOS=10,
 MAXLEN=20,OVERRUN=TRUNC,SHIFT=YES)                      
         DATAEND                                                 
*        

Answer 1:

你所面对的问题是,如果FINDREP变化增加了长度,并向左如果FINDREP变化减小长度上记录的所有数据将被转移到右侧。 在改变数据的长度的任何变化将影响整个记录 。 你有这样的发现自己。

以另外一种方式,FINDREP不知道字段(列最好称为类似的东西),只知道大约记录,即使它是在记录的一部分只想找,在长度的变化反映在记录的其余部分。

有没有办法写只是一个FINDREP避免这种情况。

  OPTION COPY
  INREC IFTHEN=(WHEN=INIT,
                 OVERLAY=(21:1,10)),
        IFTHEN=(WHEN=INIT,
                 FINDREP=(IN=C'm',
                          OUT=C'123',
                          STARTPOS=21)),
        IFTHEN=(WHEN=INIT,
                 BUILD=(21,10,
                        11,10))

这将使从1,10数据到临时扩展记录。 它会做只是暂时延长FINDREP。 然后,它会采取的第一个10个字节的延伸的并把它们纳入一个位置为长度为10。



文章来源: FINDREP a short string with longer without overwriting next column