加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

JCL DataSet的Copy,Sort,Sum,Omit

(2014-10-28 14:39:56)
分类: MF

一、COPY的用法,单个文件间的COPY

//RPSORT49 JOB MSGLEVEL=(1,1),MSGCLASS=X,CLASS=B

//*------------------------------------------------------------------*

//*  DELETE FILE                                                     *

//*------------------------------------------------------------------*

//DELFILE  EXEC PGM=IEFBR14

//DELFILE1 DD DSN=FNSAP49.RPLD8071,DISP=(MOD,DELETE,DELETE),

//            SPACE=(TRK,0)

//*------------------------------------------------------------------*

//*  CREATE FILE                                                     *

//*------------------------------------------------------------------*

//CREFILE  EXEC PGM=IEFBR14

//DEFFILE1 DD DSN=FNSAP49.RPLD8071,

//         DISP=(,CATLG),DCB=(RECFM=FB,LRECL=83,DSORG=PS),

//         VOL=SER=BDMTS1,SPACE=(CYL,1)

//*------------------------------------------------------------------*

//*  SORT FILE                                                       *

//*------------------------------------------------------------------*

//DFSORT   EXEC PGM=SORT

//SYSOUT   DD SYSOUT=A                                              不写会报40的错

//SORTIN   DD DSN=FNSAP49.RPLD807,DISP=SHR

//SORTOUT  DD DSN=FNSAP49.RPLD8071,DISP=SHR

//SYSIN    DD *

  SORT     FIELDS=COPY

 

以下是对黄色标记段参数的修改

1COPY一个文件

参数:SORT   FIELDS=COPY

2COPY的时候选择某几个字段输出

参数:SORT FIELDS=COPY

      OUTREC FIELDS=(1,23,48,3)

3COPY的时候想在选出字段中加自己的数

注:CNY对应的16进制是:‘C3D5E8’,则参数为

16进制写法:SORT FIELDS=COPY

             OUTREC FIELDS=(1,23,48,3,X’C3D5E8’,49,1)

直接字符表示写法:SORT FIELDS=COPY

                  OUTREC FIELDS=(1,23,48,3,C’CNY’,49,1)

以上SORT的结果是一样的,表示取原来文件中1-23位,48-51位,后加上‘CNY’,加上文件中49位的值作为新的文件,而X表示16进制的写法,C表示直接字符的写法

4、有条件的COPY

参数:SORT FIELDS=COPY

      OUTREC FIELDS=(1,23,48,3)

      INCLUDE COND=(45,3,CH,EQ,C’CNY’)       —————比较字符还有GT/LE

选出原来文件中的1-23位,48-51位,并且原来字段中的45开始的3位值为’CNY’

注意INCLUDE选取条件的时候是对选取前文件字段的定义

INCLUDE有多个条件的时候可以这么写

INCLUDE COND=(5,5,CH,GT,X'000171909C',AND,5,5,CH,LE,X'000300000C')

不用OUTREC只用INCLUDE也行,就是整条记录全部复制

 

二、COPY的用法,把一个输入文件按照条件拆分成若干个文件

//RPSORT49 JOB MSGLEVEL=(1,1),MSGCLASS=X,CLASS=B

//*------------------------------------------------------------------*

//*  DELETE FILE                                                     *

//*------------------------------------------------------------------*

//DELFILE  EXEC PGM=IEFBR14

//DELFILE1 DD DSN=FNSAP49.RPLD8071,DISP=(MOD,DELETE,DELETE),

//            SPACE=(TRK,0)

//DELFILE2 DD DSN=FNSAP49.RPLD8072,DISP=(MOD,DELETE,DELETE),

//            SPACE=(TRK,0)

//DELFILE3 DD DSN=FNSAP49.RPLD8073,DISP=(MOD,DELETE,DELETE),

//            SPACE=(TRK,0)

//DELFILE4 DD DSN=FNSAP49.RPLD8074,DISP=(MOD,DELETE,DELETE),

//            SPACE=(TRK,0)

//*------------------------------------------------------------------*

//*  CREATE FILE                                                     *

//*------------------------------------------------------------------*

//CREFILE  EXEC PGM=IEFBR14

//DEFFILE1 DD DSN=FNSAP49.RPLD8071,

//         DISP=(,CATLG),DCB=(RECFM=FB,LRECL=83,DSORG=PS),

//         VOL=SER=BDMTS1,SPACE=(CYL,1)

//DEFFILE2 DD DSN=FNSAP49.RPLD8072,

//         DISP=(,CATLG),DCB=(RECFM=FB,LRECL=83,DSORG=PS),

//         VOL=SER=BDMTS1,SPACE=(CYL,1)

//DEFFILE3 DD DSN=FNSAP49.RPLD8073,

//         DISP=(,CATLG),DCB=(RECFM=FB,LRECL=83,DSORG=PS),

//         VOL=SER=BDMTS1,SPACE=(CYL,1)

//DEFFILE4 DD DSN=FNSAP49.RPLD8074,

//         DISP=(,CATLG),DCB=(RECFM=FB,LRECL=83,DSORG=PS),

//         VOL=SER=BDMTS1,SPACE=(CYL,1)

//*------------------------------------------------------------------*

//*  SORT FILE                                                       *

//*------------------------------------------------------------------*

//DFSORT   EXEC PGM=SORT

//SYSOUT   DD SYSOUT=A

//SORTIN   DD DSN=FNSAP49.RPLD807,DISP=SHR

//SORTOUT1 DD DSN=FNSAP49.RPLD8071,DISP=SHR

//SORTOUT2 DD DSN=FNSAP49.RPLD8072,DISP=SHR

//SORTOUT3 DD DSN=FNSAP49.RPLD8073,DISP=SHR

//SORTOUT4 DD DSN=FNSAP49.RPLD8074,DISP=SHR

//SYSIN    DD *

  SORT     FIELDS=COPY

  OUTFIL   FNAMES=SORTOUT1,

           INCLUDE=(45,4,CH,EQ,C'1307')

  OUTFIL   FNAMES=SORTOUT2,

           INCLUDE=(16,4,CH,EQ,C'1560',

                  AND,45,4,CH,EQ,C'0464')

  OUTFIL   FNAMES=SORTOUT3,

           INCLUDE=(45,4,CH,EQ,C'0464')

  OUTFIL   FNAMES=SORTOUT4,SAVE

/*

 

把一个文件按照条件拆分成多个文件,其中FNAMES是输出文件的名字,在前面已经定义,最后用SAVE表示把没有被前面文件接受的记录,输出到文件SORTOUT4当中,也可以不用SAVE只用前面的字段,表示按指定条件输出到指定的文件,这里INCLUDE后面直接加=号,不能写成INCLUDE COND=()

 

三、文件合并输出

//DFSORT   EXEC PGM=SORT

//SYSOUT   DD SYSOUT=A

//SORTIN01 DD DSN=FNSAP49.RPLD8071,DISP=SHR

//SORTIN02 DD DSN=FNSAP49.RPLD8072,DISP=SHR

//SORTIN03 DD DSN=FNSAP49.RPLD8074,DISP=SHR

//SORTOUT  DD DSN=FNSAP49.RPLD8073,DISP=SHR

//SYSIN    DD *

  MERGE    FIELDS=(1,19,CH,A)

/*

 

注意输入文件一定要命名成SORTIN01,SORTIN02的形式,输出文件一定要为SORTOUT

 

四、合并完删除记录为一定条件的

//DFSORT   EXEC PGM=SORT

//SYSOUT   DD SYSOUT=A

//SORTIN01 DD DSN=FNSAP49.RPLD8071,DISP=SHR

//SORTIN02 DD DSN=FNSAP49.RPLD8072,DISP=SHR

//SORTIN03 DD DSN=FNSAP49.RPLD8074,DISP=SHR

//SORTOUT  DD DSN=FNSAP49.RPLD8073,DISP=SHR

//SYSIN    DD *

  MERGE    FIELDS=(1,19,CH,A)

  OMIT     COND=(45,4,CH,EQ,C'3273')

/*

 

OMIT删除第45位开始4位值是为3273的所有字段

五、合并完按一定条件选取记录

//DFSORT   EXEC PGM=SORT

//SYSOUT   DD SYSOUT=A

//SORTIN01 DD DSN=FNSAP49.RPLD8071,DISP=SHR

//SORTIN02 DD DSN=FNSAP49.RPLD8072,DISP=SHR

//SORTIN03 DD DSN=FNSAP49.RPLD8074,DISP=SHR

//SORTOUT  DD DSN=FNSAP49.RPLD8073,DISP=SHR

//SYSIN    DD *

  MERGE    FIELDS=(1,19,CH,A)

  INCLUDE  COND=(45,4,CH,EQ,C'3273')

/*

 

当选取条件为多个的时候可以这样子写:

INCLUDE COND=(5,5,CH,GT,C’1909C',AND,5,5,CH,LE,C'0000C')

 

注意:OUTREC FIELDS=(1,23,48,3)不能与MERGE一起使用

 

六、OMIT还可以这样用,删除记录

注意OMIT一定要和MERGESORT一起使用,不能单独使用OMIT

//DFSORT   EXEC PGM=SORT

//SYSOUT   DD SYSOUT=A

//SORTIN   DD DSN=FNSAP49.RPLD807,DISP=SHR

//SORTOUT  DD DSN=FNSAP49.RPLD8073,DISP=SHR

//SYSIN    DD *

  SORT     FIELDS=(1,19,CH,A)

  OMIT     COND=(45,4,CH,EQ,C'0464')

/*

 

这里OMITSORT的顺序可以随意,但一定要有SORT

 

七、选择前几条记录输出

1、选择前几条记录输出

//DFSORT   EXEC PGM=SORT

//SYSOUT   DD SYSOUT=A

//SORTIN   DD DSN=FNSAP49.RPLD807,DISP=SHR

//SORTOUT  DD DSN=FNSAP49.RPLD8073,DISP=SHR

//SYSIN    DD *

SORT    FIELDS=COPY,STOPAFT=10

/*

 

这种语句可以与OUTRECINCLUDE一起使用

 

2、选择从某条开始的,后面几条输出

SORT FIELDS=COPY,SKIPREC=20,STOPAFT=10 21条开始的10条记录

 

SKIPREC指定开始的位置

 

八、去掉重复的记录,需要在SORT FIELDS指定关键字。

 SORT FIELDS=(34,10,CH,A)

 SUM FIELDS=NONE

 指定多个字段去重复:

 SORT     FIELDS=(1,21,CH,A,231,2,CH,A)

SUM      FIELDS=NONE

 

 

九、替换某字段的值

 

 SORT FIELDS=COPY

 OUTFIL FNAMES=SORTOUT,

 OUTREC=(1,18, 19,3,CHANGE=(3,C'123',C'456'), NOMATCH=(19,3),22,151)

 

注意这里用OUTREC的时候是直接加=号,没有FIELDS,而这里CHANGE表示如果19开始的三位值为123就用456来代替,否则就保留原来的值(NOMATCH来控制)。还要注意替代的时候输出文件的长度一定要等于定义的文件长度

 

OUTREC=(1,18, 19,3,CHANGE=(3,C'123',C'456'), NOMATCH=(45,3),22,151)

如果19开始的3位值为123就用456来代,否则则用45开始的3位来代,如果写成

NOMATCH=(45,1),表示用45位开始的1位来代替,不足位数补空格

 

十、求和

SORT  FIELDS=(1,67,CH,A)

SUM  FIELDS=(81,5,PD,86,5,PD,91,5,PD,96,5,PD,101,8,PD,109,8,PD)

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有