使用 JCL 排序在 x 条记录后写入字符
Writing characters after x amount of records using a JCL Sort
我编写了一个 JCL SORT,它将 sort/reformat 各种字段并将它们打印到新的输出文件中,如下面的代码所示。我需要修改此代码以简单地在每第十 (10) 条记录的开头打印数字“9”。我想我需要一个 'IFTHEN',但我不确定它是否可以与 'OUTREC FIELDS' 一起使用。
SORT FIELDS=COPY
OUTREC FIELDS=(2:26,5,
7:38,8,
22:15,9,
46:C'AAA')
首先,不要使用 OUTREC FIELDS=。或 INREC FIELDS=。或者 OUTFIL OUTREC=.
FIELDS= 是 "overloaded"。同一个词在不同的地方有不同的意思。
BUILD 是现代版本的 FIELDS= 在 INREC 和 OUTREC 上以及 OUTREC 在 OUTFIL 上。
使用 INREC BUILD=、OUTREC BUILD=、OUTFIL BUILD=。
在这些上下文中,BUILD 是 FIELDS/OUTREC 的 "alias",因此处理没有区别,对计算机没有区别,只是对人有区别。
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))
你想要的技巧是使用序列号。上面的代码在每个输出记录中包含一个单字节序列号,作为 Zoned Decimal。一个 "character" 号。序列号的默认开始是一,但对于您的情况,您希望从零开始,这很容易使用 START=。第 11 个及以后的序列号被截断(保留低位值)并不重要,因为这正是您想要的。
差不多。格式化记录后,测试序列号。如果不是“9”,则使用 OVERLAY 仅将第一个字节更改为空白(代码中的 X)。
IFTHEN=(WHEN=INIT 无条件地为每条记录完成,如果需要,您可以有很多。按顺序处理。
IFTHEN=(WHEN=(逻辑表达式必须在任何 WHEN=INIT 之后,它们的操作类似于 case/select-style 语句(或 COBOL EVALUATE)。一旦 IFTHEN=(WHEN=(logicalepxression 为真,当前记录的 IFTHEN 处理停止 - 除非指定 HIT=NEXT。
我编写了一个 JCL SORT,它将 sort/reformat 各种字段并将它们打印到新的输出文件中,如下面的代码所示。我需要修改此代码以简单地在每第十 (10) 条记录的开头打印数字“9”。我想我需要一个 'IFTHEN',但我不确定它是否可以与 'OUTREC FIELDS' 一起使用。
SORT FIELDS=COPY
OUTREC FIELDS=(2:26,5,
7:38,8,
22:15,9,
46:C'AAA')
首先,不要使用 OUTREC FIELDS=。或 INREC FIELDS=。或者 OUTFIL OUTREC=.
FIELDS= 是 "overloaded"。同一个词在不同的地方有不同的意思。
BUILD 是现代版本的 FIELDS= 在 INREC 和 OUTREC 上以及 OUTREC 在 OUTFIL 上。
使用 INREC BUILD=、OUTREC BUILD=、OUTFIL BUILD=。
在这些上下文中,BUILD 是 FIELDS/OUTREC 的 "alias",因此处理没有区别,对计算机没有区别,只是对人有区别。
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))
你想要的技巧是使用序列号。上面的代码在每个输出记录中包含一个单字节序列号,作为 Zoned Decimal。一个 "character" 号。序列号的默认开始是一,但对于您的情况,您希望从零开始,这很容易使用 START=。第 11 个及以后的序列号被截断(保留低位值)并不重要,因为这正是您想要的。
差不多。格式化记录后,测试序列号。如果不是“9”,则使用 OVERLAY 仅将第一个字节更改为空白(代码中的 X)。
IFTHEN=(WHEN=INIT 无条件地为每条记录完成,如果需要,您可以有很多。按顺序处理。
IFTHEN=(WHEN=(逻辑表达式必须在任何 WHEN=INIT 之后,它们的操作类似于 case/select-style 语句(或 COBOL EVALUATE)。一旦 IFTHEN=(WHEN=(logicalepxression 为真,当前记录的 IFTHEN 处理停止 - 除非指定 HIT=NEXT。