需要使用JCL SORT比较不同记录中的相同字段

时间:2016-07-04 13:37:01

标签: mainframe jcl dfsort

我有一个输入文件,此文件中的第3个字段是一个数字。这个数字通常在同一个字段中重复约30-40个记录,当读取的记录在该字段中具有不同的值时我需要数字' 1'在以下记录的第一个位置打印。 e.g。

<a>

我已尝试使用&#39; SECTIONS&#39;像:

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

但这会打印数字&#39; 1&#39;在另一条线上:

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

我需要像叠加一样的东西,但我不确定如何将这个用于&#39; SECTIONS&#39;。
注意:上面的数字,317786762从第26位开始。

修订

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

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

此代码在POS 101,8中设置序列号。然后它重新启动Seqnum 当26,9中出现新值时。我还需要重新启动序列号 当SEQNUM的值为30.但据我所知,只有当字段的值发生变化时,Restart才有效。你不能用它来使用逻辑表达式。

所以我的问题是, 有没有人知道如何写一个SORT来读取一个顺序文件并打印一个&#39; 1&#39;在每30个记录之后或在某个字段中找到新值之后的位置1。

2 个答案:

答案 0 :(得分:1)

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

使用带有IFTHEN的INREC =(WHEN = INIT ...暂时扩展记录以包含序列号。序列号需要足够大以覆盖组中可能存在的最大记录数(并且它的功率大于10)。在序列号上使用RESTART =,并在那里指定你的关键字段。

然后,就像你最近的另一个问题一样,使用IFTHEN =(WHEN =(logicalexpression来识别组中的第一个(序列是一个)和OVERLAY C&#39; 1&#39;在第一列。

将IFOUTLEN =与原始记录长度一起使用,将记录恢复为原始大小。 IFOUTLEN在完成IFTHEN处理后说&#34;将记录长度设置为&#34;。保存你不得不做一个BUILD来放下临时扩展。

对于可变长度记录,过程略有不同(在第一个数据位置延伸,5,并且必须有一个BUILD以返回大小)。

答案 1 :(得分:0)

WHEN = GROUP有帮助吗?或者也许TRAILERn?