我有一个如下所示的输入文件:
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
(虽然我几乎可以肯定没有,因为我搜索过),我想知道是否有办法在 JCL 或程序中做到这一点?
提前谢谢您。
JCL 中的 SORT :将标题与数据分开排序,
按程序断点(如果是数字,如果不是,但无法存储内联数据,因为我不知道任何给定标题可以有多少行):它需要多次读取输入文件(数十万个)线)。
查看 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)
/*
如果标题是可区分的,则可以使用三部分键来维护每个组内内联数据的顺序,同时重新排列标题组。
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
已排序(原始输入)记录的其余部分拖放到输出。