【问题标题】:Can this multistep SORT JCL be condensed?这个多步 SORT JCL 可以浓缩吗?
【发布时间】:2017-04-21 16:59:18
【问题描述】:

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

【问题讨论】:

    标签: mainframe jcl


    【解决方案1】:

    首先,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) 
    

    这是你的前两个步骤。我已经删除了虚假的“-”,我只删除了你的 cmets,因为它们不适合,你可以像你一样拥有内联 cmets,或者整行,开始与 *。我已将 FIELDS 更改为 BUILD(FIELDS 从第一天起就已经存在,并且在不同的环境中有多种用途:BUILD 已经存在了 10 年,每次你看到它(在 INREC、OUTREC 或 OUTFIL 上)它只意味着 BUILD .

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

    您将:临时扩展记录以包含一个 SEQNUM,该 SEQNUM 足够大,可以轻松地表示您的所有记录:在 OUTFIL 中,标识第一条记录,并使用斜线运算符 (/) 输出两条记录,首先是标题,您可以按照自己的方式格式化,然后是实际的数据记录(请记住排除您暂时扩展的任何数据)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 2022-01-17
      • 2017-11-08
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多