Sorting 如何编写一个JCL排序来复制条件上的排序字段+;检查文件第一行是否包含';文件1';写在第一行

Sorting 如何编写一个JCL排序来复制条件上的排序字段+;检查文件第一行是否包含';文件1';写在第一行,sorting,jcl,Sorting,Jcl,假设我们有一个输入文件: 123456789+123456789+ FILE1 -X-X-X-X-X-X-X ABCD 1234 XOXOXO 001 WXYZ 5678 YOYOYO 002 ABCD 0011 XOXOXO 003 我需要整理文件2中的数据 INCLUDE=(11,6,CH,EQ,C'xoxo'),很容易得到 但我还需要检查第一行(它是文件的头)是否应该包含写入第一行的FILE1。 那么只有我们可以检查包含条件 INCLUDE=(11,6,CH,EQ,C'xoxo

假设我们有一个输入文件:

 123456789+123456789+
 FILE1 -X-X-X-X-X-X-X
 ABCD 1234 XOXOXO 001
 WXYZ 5678 YOYOYO 002
 ABCD 0011 XOXOXO 003
我需要整理文件2中的数据 INCLUDE=(11,6,CH,EQ,C'xoxo'),很容易得到

但我还需要检查第一行(它是文件的头)是否应该包含写入第一行的FILE1。 那么只有我们可以检查包含条件 INCLUDE=(11,6,CH,EQ,C'xoxo')


我想我需要IF-then=(类似的东西)

您需要临时向记录中添加一个序列号,测试序列号是否为WHEN=组中的一个序列号,并推送值1,6。然后使用OUTFIL INCLUDE=(这类似于INCLUDE COND的“第二次射击”)和BUILD将记录恢复到以前的大小

  OPTION COPY
  INREC IFTHEN=(WHEN=INIT,
                     OVERLAY=(21:SEQNUM,7,ZD)),
        IFTHEN=(WHEN=GROUP,BEGIN=(21,7,ZD,EQ,1),
                     PUSH=(28:1,6))
  OUTFIL INCLUDE=(28,6,CH,EQ,C'FILE1 ',
                 AND,
                 rest of your condition),
         BUILD=(1,20)
请注意,SEQNUM后面的7和BEGIN中的7是同一个字段,这应该足够长,可以计算文件中的所有记录,否则会出现pickle


您不能使用INCLUDE COND=,因为您似乎无法识别标题,除非它是第一条记录,并且INCLUDE/ommit COND=是在处理其他任何内容之前处理的。

您使用的是DFSort还是其他排序例程???,根据实际的排序路线,可能会有更好的解决方案。我假设您希望使用JCL来实现这一点。1可能的解决方案是使用三个步骤步骤步骤1(*包括读取限制为1的排序)步骤2测试步骤(idcams???)步骤3排序步骤(带if/cond)