Mainframe 这个多步骤排序JCL可以压缩吗?

Mainframe 这个多步骤排序JCL可以压缩吗?,mainframe,jcl,Mainframe,Jcl,我正在使用下面的JCL将DSNTEPZ查询的结果转换为所需的布局,以及添加标题和尾部。我已经能够完成我的任务了,但感觉很笨拙。有没有JCL向导能够压缩这些步骤?我真的很讨厌最后的排序,但是我找不到任何方法在格式MMYYYY的标题中输出日期 //**********remove extra output lines/reformat ******************* //SORT EXEC PGM=SORT, // REGION=2000K //SORTI

我正在使用下面的JCL将DSNTEPZ查询的结果转换为所需的布局,以及添加标题和尾部。我已经能够完成我的任务了,但感觉很笨拙。有没有JCL向导能够压缩这些步骤?我真的很讨厌最后的排序,但是我找不到任何方法在格式MMYYYY的标题中输出日期

//**********remove extra output lines/reformat   *******************
//SORT     EXEC PGM=SORT,
//             REGION=2000K
//SORTIN   DD  DSN=&&SORT1IN,DISP=(OLD,DELETE,DELETE)    * pds of query results
//SORTWK01 DD  UNIT=SYSDA,SPACE=(CYL,(20,5))
//SORTOUT  DD  DSN=&&SORT1OUT,
//             DISP=(NEW,PASS,DELETE),
//             AVGREC=K,LRECL=100,
//             SPACE=(100,(900,100),RLSE)
//SYSOUT   DD  SYSOUT=*
//SYSIN    DD  *
  SORT FIELDS=COPY -
  INCLUDE COND=(97,1,CH,EQ,C'1',OR,    * This removes the 'informational' Query lines
                97,1,CH,EQ,C'2',OR,
                97,1,CH,EQ,C'0') -
  OUTREC FIELDS=(C'DTL',32,9,71,10,5X,49,19,2X,84,4,89,2,      *Arranging the Output
              92,2,97,1,43X)
/*
//************************ add hdr/trl  ***********************
//SORT2    EXEC PGM=SORT,
//             REGION=2000K
//SORTIN   DD  DSN=&&SORT1OUT,DISP=(OLD,DELETE,DELETE)
//SORTWK01 DD  UNIT=SYSDA,SPACE=(CYL,(20,5))
//SORTOUT  DD  DSN=&&SORT2OUT,
//             DISP=(NEW,PASS,DELETE),
//             AVGREC=K,LRECL=100,
//             SPACE=(100,(900,100),RLSE)
//SYSOUT   DD  SYSOUT=*
//SYSIN    DD  *
  OPTION COPY
  OUTFIL REMOVECC,
  HEADER1=(C'HEADERENE',DATENS=(DM4),19:82X),
  TRAILER1=(C'TRAILER',COUNT=(M11,LENGTH=9),83X)
/*
//************************ CONVERT DATE  ***********************
//SORT3    EXEC PGM=SORT,
//             REGION=2000K
//SORTIN   DD  DSN=&&SORT2OUT,DISP=(OLD,DELETE,DELETE)
//SORTWK01 DD  UNIT=SYSDA,SPACE=(CYL,(20,5))
//SORTOUT  DD  SYSOUT=*
//SYSOUT   DD  SYSOUT=*
//SYSIN    DD  *
  OPTION COPY
  OUTREC IFTHEN=(WHEN=(1,7,CH,EQ,C'HEADERE'),
         BUILD=(1,9,12,6,85X))
/*
//

首先,JCL是第一列和第二列中以//(以及/*)开头的内容。您需要的是分拣控制卡

  OPTION COPY 
  INCLUDE COND=(97,1,CH,EQ,C'1',OR, 
                97,1,CH,EQ,C'2',OR, 
                97,1,CH,EQ,C'0') 

  INREC BUILD=(C'DTL', 
               32,9, 
               71,10, 
               5X, 
               49,19, 
               2X, 
               84,4, 
               89,2, 
               92,2, 
               97,1, 
               43X) 

  OUTFIL REMOVECC, 
      HEADER1=(01:C'HEADERENE', 
               10:DATENS=(DM4), 
               100:X), 
      TRAILER1=(C'TRAILER', 
                COUNT=(M11,LENGTH=9),
                100:X) 
这是您的前两个步骤。我删除了虚假的“-”s,我只删除了不合适的注释,您可以像以前一样使用内联注释,或者使用一整行,以*开头。我已经将字段更改为BUILD(字段从第一天开始就存在,并且在不同的上下文中有多种用途:BUILD已经存在了10年,每次您看到它(在INREC、OUTREC或OUTFIL上)时,它只意味着BUILD

正如您所发现的,HEADER1的内容仅限于允许的内容。要么接受它,要么如果HEADER1的内容不是您想要的,您可以制作自己的标题

您将:临时扩展记录以包括一个SEQNUM,它足够大,可以轻松地表示您的所有记录:在OUTFIL中,标识第一条记录,并使用斜杠运算符(/)输出两条记录,首先是页眉,您可以按需要格式化,然后是实际的数据记录(记住排除您临时扩展的任何数据)