使用 dfsort 按年份对记录组进行排序

问题描述 投票:0回答:1

我正在尝试按年份降序对记录组进行排序,其中关键字段是前 10 个字节,年份将始终出现在“000010YY”之后,如下所示,

我只需要对带有年份的组进行排序,而不是对组内一年的记录进行排序。

输入输出文件为FB,LRECL 80

输入:

12345 5555 000010YY2021j020
12345 5555 000020AB
12345 5555 000130BC
12345 5555 000141BT01
12345 5555 000143BT05
12356 5555 000010YY2022j020
12356 5555 000020AB  
12356 5555 000130BC  
12356 5555 000141BT01
12367 5555 000010YY2023j020
12367 5555 000130AB
12367 5555 000020BC
12378 5555 000010YY2018j020
12378 5555 000020AB    
12378 5555 000130BC    
12378 5555 000141BT01  
12378 5555 000143BT05
12379 5555 000010YY2017j020
12379 5555 000020AB    
12379 5555 000130BC    

预期输出:

12367 5555 000010YY2023j020
12367 5555 000130AB
12367 5555 000020BC
12356 5555 000010YY2022j020
12356 5555 000020AB        
12356 5555 000130BC  
12356 5555 000141BT01
12345 5555 000010YY2021j020
12345 5555 000020AB
12345 5555 000130BC
12345 5555 000141BT01
12345 5555 000143BT05
12378 5555 000010YY2018j020
12378 5555 000020AB    
12378 5555 000130BC    
12378 5555 000141BT01  
12378 5555 000143BT05
12379 5555 000010YY2017j020
12379 5555 000020AB    
12379 5555 000130BC

我尝试使用下面的 ICEMAN

//SYSIN DD *                                             
  INREC IFTHEN=(WHEN=GROUP,BEGIN=(12,8,CH,EQ,C'000010YY'),
  PUSH=(81:ID=8))                                       
  SORT FIELDS=(81,8,ZD,D,1,10,BI,A)
  OUTREC BUILD=(1,80)                                   
/*

但它没有提供预期的输出。

请提供有关如何获得上述输出的任何建议。

mainframe jcl dfsort
1个回答
0
投票

请参阅 DFSORT 智能技巧页面中的“对记录组进行排序”,该页面位于 https://www.ibm.com/support/pages/smart-dfsort-tricks

这是一个 DFSORT JCL,它将为您提供所需的结果。

//STEP0100 EXEC PGM=SORT                           
//SYSOUT   DD SYSOUT=*                             
//SORTIN   DD *                                    
----+----1----+----2----+----3----+----4----+----5-
12345 5555 000010YY2021J020                        
12345 5555 000020AB                                
12345 5555 000130BC                                
12345 5555 000141BT01                              
12345 5555 000143BT05                              
12356 5555 000010YY2022J020                        
12356 5555 000020AB                                
12356 5555 000130BC                                
12356 5555 000141BT01                              
12367 5555 000010YY2023J020                        
12367 5555 000130AB                                
12367 5555 000020BC                                
12378 5555 000010YY2018J020                        
12378 5555 000020AB                                
12378 5555 000130BC                                
12378 5555 000141BT01                              
12378 5555 000143BT05                              
12379 5555 000010YY2017J020                        
12379 5555 000020AB                                
12379 5555 000130BC                                
//SORTOUT  DD SYSOUT=*                             
//SYSIN    DD *                                    
  INREC IFTHEN=(WHEN=GROUP,                        
               BEGIN=(12,08,CH,EQ,C'000010YY'),    
                PUSH=(81:20,04))                   
                                                   
  SORT FIELDS=(81,4,CH,D),EQUALS                   
                                                   
  OUTREC BUILD=(01,80)                             
/*                                                 
© www.soinside.com 2019 - 2024. All rights reserved.