0

我有一个输入文件,该文件中的第三个字段是一个数字。该数字通常在同一字段中重复大约 30-40 条记录,当读取该字段中具有不同值的记录时,我需要在下一条记录的第一个位置打印数字“1”。例如

           7226184019519       317786762  0000000000001POP160
           7226184019522       317786762  0000000000001POP160
1          7226139045234       326446460  0000000000001POP160
           7226139045242       326446460  0000000000001POP160
           7226139045274       326446460  0000000000001POP160
           7226139045277       326446460  0000000000001POP160
           7226139045280       326446460  0000000000001POP160

我尝试过使用“SECTIONS”,例如:

SORT FIELDS=COPY
   OUTFIL FNAMES=SORTOUT,
   SECTIONS=(26,9,HEADER3= (1:'1'))  

但这将在单独的行上打印数字“1”:

           7226184019519       317786762  0000000000001POP160
           7226184019522       317786762  0000000000001POP160
1          
           7226139045234       326446460  0000000000001POP160
           7226139045242       326446460  0000000000001POP160
           7226139045274       326446460  0000000000001POP160
           7226139045277       326446460  0000000000001POP160
           7226139045280       326446460  0000000000001POP160

我需要类似覆盖的东西,但我不确定如何将它与“SECTIONS”一起使用。
注意:上面的数字 317786762 从第 26 位开始。


修正案

我已经想出了如何将 1 移动到第一个位置(下面的代码)。完成此 SORT 的要求是在每 30 条记录后或当 POS 26,9 中的数字发生变化时在位置 1 打印一个“1”。

//SYSIN     DD *
   SORT FIELDS=COPY
    INREC IFTHEN=(WHEN=INIT,OVERLAY=(101:SEQNUM,8,ZD,
       RESTART=(26,9))),
       IFTHEN=(WHEN=(101,8,ZD,EQ,30),
       OVERLAY=(1:C'1'))
/*

此代码在 POS 101,8 中设置序列号。然后,当 26,9 中有新值时,它会重新启动 Seqnum。当 SEQNUM 的值为 30 时,我还需要重新启动序列号。但据我所知,重新启动仅在字段值更改时才有效。你不能对它使用逻辑表达式。

所以我的问题是,有没有人知道一种编写 SORT 的方法,它将读取一个顺序文件并在每 30 条记录之后或在某个字段中找到新值之后在位置 1 打印一个“1”。

4

2 回答 2

1

我猜你的记录是固定长度的。

将 INREC 与 IFTHEN=(WHEN=INIT... 一起使用以临时扩展记录以包含序列号。序列号需要足够大以覆盖组中可能包含的最大记录数(并使其成为幂10 大)。在您的序列号上使用 RESTART=,并在此处指定您的关键字段。

然后,与您最近的另一个问题一样,使用 IFTHEN=(WHEN=(logicalexpression 来标识组中的第一个(序列为一个)并在第一列中覆盖 C'1'。

将 IFOUTLEN= 与您的原始记录长度一起使用,将记录恢复为原始大小。IFOUTLEN 表示“在完成 IFTHEN 处理后,将记录长度设置为此”。节省您必须进行构建以放弃临时扩展。

可变长度记录的过程略有不同(在第一个数据位置 5 处扩展,并且必须有一个 BUILD 才能返回到大小)。

于 2016-07-05T22:02:52.780 回答
0

WHEN=GROUP 有帮助吗?或者可能是 TRAILERn?

于 2016-07-05T06:29:35.987 回答