我有一个输入文件,此文件中的第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。
答案 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?