使用 JCL 排序在 x 条记录后写入字符

Posted

技术标签:

【中文标题】使用 JCL 排序在 x 条记录后写入字符【英文标题】:Writing characters after x amount of records using a JCL Sort 【发布时间】:2016-06-30 08:59:28 【问题描述】:

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

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

【问题讨论】:

你对“每十分之一”的记录有何看法?不同的人意味着不同的事情。您希望所有其他记录的第一个位置是什么? 因此将有 9 条记录以第一个位置的空格开头。之后的记录将有一个 9 在第一个位置。接下来的 9 条记录将在第一个位置有一个空格,后面的记录将在第一个位置有一个“9”,依此类推。 【参考方案1】:

首先,不要使用 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。

【讨论】:

谢谢比尔。这就是我一直在寻找的答案。

以上是关于使用 JCL 排序在 x 条记录后写入字符的主要内容,如果未能解决你的问题,请参考以下文章

MAINFRAME:在 JCL 中排序以将数据集转换为 CSV 格式

仅获取记录 nr。 x 通过在 JCL 中使用 dfsort

winform导出数据时怎么加进度条?或者弹出一个窗口“正正在导出...”多少条记录!如何实现?

Firebase 实时数据库:如何在按值排序后围绕特定键检索 10 条记录?

JCL 在一行中合并记录

oracle 取第一条或者最后一条记录