在 JCL 或 COBOL 中排序

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

我有一个如下所示的输入文件:

01 heading of data
inline-data of heading 01
inline-data of heading 01
09 heading of data
inline-data of heading 09
inline-data of heading 09
inline-data of heading 09
inline-data of heading 09
05  heading of data
inline-data of heading 05

预期输出:

01 heading of data
inline-data of heading 01
inline-data of heading 01
05  heading of data
inline-data of heading 05
09 heading of data
inline-data of heading 09
inline-data of heading 09
inline-data of heading 09
inline-data of heading 09
  • 我的程序中的断点是标题。
  • 我需要对整个数据块(以其内联数据为标题)进行排序,以首先管理较低的数字。
  • 内联数据可以从 1 行到无限行数不等
  • 内联数据行上没有任何内容表明它们属于某个标题或另一个标题。

(虽然我几乎可以肯定没有,因为我搜索过),我想知道是否有办法在 JCL 或程序中做到这一点?

提前谢谢您。

JCL 中的 SORT :将标题与数据分开排序,

按程序断点(如果是数字,如果不是,但无法存储内联数据,因为我不知道任何给定标题可以有多少行):它需要多次读取输入文件(数十万个)线)。

cobol jcl
2个回答
2
投票

查看 DFSORT 智能技巧“对记录组进行排序”,可以在以下位置找到

https://www.ibm.com/support/pages/smart-dfsort-tricks

假设您的输入有 LRECL=80 且 RECFM=FB,您可以使用以下控制卡

//SYSIN    DD *                                   
  INREC IFTHEN=(WHEN=GROUP,                       
               BEGIN=(04,08,CH,EQ,C'heading'),    
                PUSH=(81:01,02))                  
                                                  
  SORT FIELDS=(81,02,CH,A),EQUALS                 
                                                  
  OUTREC BUILD=(01,80)                            
/*                              

              

如果您的输入是RECFM=V或VB那么您可以使用以下控制卡

//SYSIN    DD *                                  
  INREC IFTHEN=(WHEN=INIT,                       
               BUILD=(01,04,2X,5)),              
        IFTHEN=(WHEN=GROUP,                      
               BEGIN=(10,08,CH,EQ,C'heading'),   
                PUSH=(05:07,02))                 
                                                 
  SORT FIELDS=(05,02,CH,A),EQUALS                
                                                 
  OUTREC BUILD=(01,04,07)                        
/*                                

           

0
投票

如果标题是可区分的,则可以使用三部分键来维护每个组内内联数据的顺序,同时重新排列标题组。

Three-part key
  Sequence number for the major group (01 heading)
  Heading level (01, 05, 09)
  Sequence number for the original position in the input file

对于每条输入记录:

如果

01 heading
,则增加
sequence number for the major group

如果

xx heading
,请将标题编号插入标题级别。

增加

sequence number for the original position

合并

three-part key
和输入记录。

将合并记录释放到

SORT
。 (按
ASCENDING three-part key
排序。)

SORT
之后:

对于每个

RETURN
,将
three-part key
WRITE
已排序(原始输入)记录的其余部分拖放到输出。

© www.soinside.com 2019 - 2024. All rights reserved.