首先,不要使用 OUTREC FIELDS=。或 INREC FIELDS=。或OUTFIL OUTREC=。
FIELDS= 是“重载”。同一个词在不同的地方有不同的意思。
BUILD 是 INREC 和 OUTREC 上的 FIELDS= 以及 OUTFIL 上的 OUTREC 的现代版本。
使用 INREC BUILD=、OUTREC BUILD=、OUTFIIL BUILD=。
在这些情况下,BUILD 是 FIELDS/OUTREC 的“别名”,因此处理没有区别,计算机没有区别,只是人类不同。
SORT FIELDS=COPY
INREC BUILD=(02:
26,5,
38,8,
22:
15,9,
46:
C'AAA')
对人类可读性的建议。SORT 不在乎,所以为人类编写代码。请注意,我已经删除了多余的 7:。第七列是下一个可用位置,因此您只需指定它就可以混淆。
甚至考虑使用 SORT 符号。
SORT FIELDS=COPY
INREC IFTHEN=(WHEN=INIT,
BUILD=(SEQNUM,
1,
ZD,
START=0,
26,5,
38,8,
22:
15,9,
46:
C'AAA')),
IFTHEN=(WHEN=(1,1,CH,NE,C'9'),
OVERLAY=(1:X))
您想要的诀窍是使用序列号。上面的代码在每个输出记录中包含一个单字节序列号,作为分区十进制。一个“字符”数字。序列号的默认开始是一,但对于您的情况,您希望从零开始,这很容易使用 START=。第 11 个序列号及以后的序列号被截断(保留低阶值)并不重要,因为这正是您想要的。
几乎。格式化记录后,您可以测试序列号。如果它不是“9”,则使用 OVERLAY 将第一个字节更改为空白(代码中的 X)。
IFTHEN=(WHEN=INIT 无条件地为每条记录完成,如果需要,您可以拥有很多记录。按顺序处理。
IFTHEN=(WHEN=(logicalexpression 必须出现在任何 WHEN=INIT 之后,并且它们像 case/select 样式语句(或 COBOL EVALUATE)一样运行。一旦 IFTHEN=(WHEN=(logicalepxression 为真,对 IFTHEN 的处理将停止当前记录 - 除非指定 HIT=NEXT。