同步排序,File1的未配对记录在F2文件中没有记录的空格。我们可以用ZEROS替换那些特定列的空间吗?

时间:2013-11-20 14:24:46

标签: mainframe syncsort

SORT:

 JOINKEYS FILES=F1,FIELDS=(5,4,A,10,20,A)                  
 JOINKEYS FILES=F2,FIELDS=(1,4,A,6,20,A)                   
 REFORMAT FIELDS=(F1:10,20,9,1,5,4,30,1,31,10,F2:27,10)    
 JOIN UNPAIRED,F1                                          
 INREC BUILD=(1,36,C',',37,10,C',',27,10,SFF,SUB,37,10,SFF,
                 EDIT=(TTTTTT))        

OUTPUT IS:*第2行第4列是第2个文件未配对的空格,需要自动为0。

 22680372            ,5102,         1,         1,000000
 22222222            ,5105,         2,          ,000002   

OUTPUT shud be:*第2行第4列为0或0000s为未配对的第2个文件,需要自动为0。

 22680372            ,5102,         1,         1,000000
 22222222            ,5105,         2,         0,000002   

1 个答案:

答案 0 :(得分:3)

你需要一个条件,这意味着IFTHEN。你不能在同一个INREC上拥有IFTHEN和BUILD,但你可以拥有多个IFTHEN,而BUILD可以成为IFTHEN的一部分。

IFTHEN =(WHEN = INIT表示应该为每条记录做出的事情(无条件)。

IFTHEN =(WHEN =(逻辑表达式仅在条件为真时才会被执行。

每个BUILD语句都会创建一个完整的新中间记录(输入和输出之间的中间记录)。 OVERLAY仅影响指定位置的数据(假设没有记录的扩展名)。

您的条件是记录的第46个字节是空格。您已经使用过SFF(您是否尝试过其他建议,尤其是FS?),因此无需在构建之前将值设为零。

 JOINKEYS FILES=F1,FIELDS=(5,4,A,10,20,A)                  
 JOINKEYS FILES=F2,FIELDS=(1,4,A,6,20,A)                   
 REFORMAT FIELDS=(F1:10,20,9,1,5,4,30,1,31,10,F2:27,10)    
 JOIN UNPAIRED,F1                                          
 INREC IFTHEN=(WHEN=INIT,
                 BUILD=(1,36,
                        C',',
                        37,10,
                        C',',
                        27,10,SFF,
                         SUB,
                          37,10,SFF,
                         EDIT=(TTTTTT))),
       IFTHEN=(WHEN=(47,1,CH,EQ,C' '),
                OVERLAY=(46:C'0'))  

我不会像只是那样格式化语句,而是为了让它们更容易理解和维护。

好的,那个解决方案有点笨重。你可以用这个替换INREC,对于这种类型的数据,它可以替代编辑:

INREC IFTHEN=(WHEN=INIT, 
                BUILD=(1,36, 
                       C',', 
                       37,10,FS,TO=FS,LENGTH=10,
                       C',', 
                       27,10,FS, 
                        SUB, 
                         37,10,FS, 
                        TO=FS,LENGTH=8)) 

这更加自然,因为空间变为零,前导空白完全没有条件,并且仅在REFORMAT记录中使用对该字段的引用。