这个多步SORT JCL可以压缩吗?

时间:2017-04-21 16:59:19

标签: mainframe jcl

我正在使用以下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))
/*
//

1 个答案:

答案 0 :(得分:2)

首先,JCL是第一和第二列中以//(以及/ *)开头的东西。你想要的是SORT控制卡。

  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,我只删除了你的评论,因为它们不合适,你可以像过去那样拥有内联注释,或者以*开头的整行。我已经将FIELDS改为BUILD(FIELDS自第一天起就已经存在,并且在不同的环境中有多种用途:BUILD已经存在了10年,每次你看到它(在INREC,OUTREC或OUTFIL)它只有它意味着建立。

正如您所发现的,HEADER1的内容仅限于允许的内容。要么就是这样,要么HEADER1的内容不是你想要的,你可以制作自己的标题。

您将:暂时扩展记录以包含一个SEQNUM,其大小足以轻松代表您的所有记录:在OUTFIL中,识别第一条记录,并使用斜杠运算符(/)输出两条记录,首先是标题,您可以格式化您想要的格式,然后是实际数据记录(记住排除您暂时扩展的所有数据)。