使用JCL排序在x个记录数之后写入字符

时间:2016-06-30 08:59:29

标签: sorting mainframe jcl dfsort

我编写了一个JCL SORT,它将对各个字段进行排序/重新格式化,并将它们打印到新的输出文件中,如下面的代码所示。我需要修改此代码,只需在每十(10)条记录的开头打印数字'9'。我认为我需要'IFTHEN',但我不确定它是否可以与'OUTREC FIELDS'一起使用。

SORT FIELDS=COPY
  OUTREC FIELDS=(2:26,5,
                 7:38,8,
                 22:15,9,
                 46:C'AAA')

1 个答案:

答案 0 :(得分:0)

首先,不要使用OUTREC FIELDS =。或者INREC FIELDS =。或者OUTFIL OUTREC =。

FIELDS =“过载”。同一个词在不同的地方意味着不同的东西。

BUILD是现场版本的FIELDS = INREC和OUTREC以及OUTTRIL上的OUTREC。

使用INREC BUILD =,OUTREC BUILD =,OUTFIL 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)) 

您想要的技巧是使用序列号。上面的代码在每个输出记录中包括一个字节的序列号,作为Zoned Decimal。一个“字符”号码。序列号的默认开始是1,但对于您的情况,您希望从零开始,这对于START =来说很容易。第11个序列号和之后的序列号被截断(保留低位值)并不重要,因为这正是您想要的。

几乎。格式化记录后,测试序列号。如果它不是“9”,则使用OVERLAY将第一个字节更改为空白(代码中的X)。

IFTHEN =(WHEN = INIT对每条记录都是无条件的,如果需要你可以有很多。按顺序处理。

IFTHEN =(WHEN =(logicalexpression必须在任何WHEN = INIT之后,它们的操作类似于case / select-style语句(或COBOL EVALUATE)。一旦IFTHEN =(WHEN =(logicalepxression为true,处理为IFTHEN停止当前记录 - 除非指定了HIT = NEXT。