JCL SORT - 需要将来自不同输入行的字段添加到单个输出行

时间:2016-04-27 13:02:51

标签: merge mainframe jcl dfsort

我有一个6行输入文件,它由一个字段(位置1到6)组成,每个行包含不同的值。根据此字段中包含的不同值,其他字段(从位置7到80)将移动到输出中的单个行。

E.G。

输入:

035MI 88122              
035ST 72261              
035SU 317786762          
105         06616858     
1601     11              
1651  0000000140006PC

输出:

1      8812272261317786762      06616858   11  0000000140006PC

我需要找出如何在不同的行中读取这些内容然后输出到单个行。我尝试过使用类似代码的东西:

SORT FIELDS=COPY                         
INREC IFTHEN=(WHEN=(1,6,CH,EQ,C'035MI '),
              OVERLAY=(3:7,5)),       

但是这会将数据移动到单独行上的正确位置,如下所示:

1      8812272261317786762                            
1                               06616858
1                                          11
1                                              0000000140006PC

所以现在我认为我需要在一个步骤中进行排序,在另一个步骤中进行合并。如果可能的话,我宁愿一个人做。我很感激你的帮助。感谢。

1 个答案:

答案 0 :(得分:1)

您可以为每条记录添加序列号。

使用WHEN = GROUP将数据从一个记录复制到一个或多个后续记录。

你使用OUTFIL INLUDE =来获取最终记录。

 OPTION COPY 

 INREC IFTHEN=(WHEN=INIT, 
               OVERLAY=(81:SEQNUM,1,ZD)), 

       IFTHEN=(WHEN=GROUP, 
               BEGIN=(81,1,CH,EQ,C'1'), 
               PUSH=(somestuff), 
               RECORDS=6), 

       IFTHEN=(WHEN=GROUP, 
               BEGIN=(81,1,CH,EQ,C'2'), 
               PUSH=(somestuff), 
               RECORDS=5), 

       IFTHEN=(WHEN=GROUP, 
               BEGIN=(81,1,CH,EQ,C'3'), 
               PUSH=(somestuff), 
               RECORDS=4), 

       IFTHEN=(WHEN=GROUP, 
               BEGIN=(81,1,CH,EQ,C'4'), 
               PUSH=(somestuff), 
               RECORDS=3), 

       IFTHEN=(WHEN=GROUP, 
               BEGIN=(81,1,CH,EQ,C'5'), 
               PUSH=(somestuff), 
               RECORDS=2), 


  OUTFIL INCLUDE=(81,1,CH,EQ,C'6'),
          BUILD=(1,80)

你需要做一些计划。第六条记录将包含所有数据,但可能尚未按您所需的顺序排列。要么在INREC上使用IFTHEN =(WHEN =(逻辑表达式)(以识别第六条记录),要么使用OUTREC上的BUILD,您可以进行最终格式化。

您需要每次更改something,它将是receivingposition:sourceposition,length

DFSORT手册非常好,有一个使用入门适用于产品新手,您需要的所有内容都在应用程序编程指南,