JCL DataSet的Copy,Sort,Sum,Omit
(2014-10-28 14:39:56)分类: MF |
一、COPY的用法,单个文件间的COPY
//RPSORT49 JOB MSGLEVEL=(1,1),MSGCLASS=X,CLASS=B
//*------------------------------------------------------------------*
//*
//*------------------------------------------------------------------*
//DELFILE
//DELFILE1 DD DSN=FNSAP49.RPLD8071,DISP=(MOD,DELETE,DELETE),
//
//*------------------------------------------------------------------*
//*
//*------------------------------------------------------------------*
//CREFILE
//DEFFILE1 DD DSN=FNSAP49.RPLD8071,
//
//
//*------------------------------------------------------------------*
//*
//*------------------------------------------------------------------*
//DFSORT
//SYSOUT
//SORTIN
//SORTOUT
//SYSIN
以下是对黄色标记段参数的修改
1、COPY一个文件
参数:SORT
2、COPY的时候选择某几个字段输出
参数:SORT FIELDS=COPY
3、COPY的时候想在选出字段中加自己的数
注:CNY对应的16进制是:‘C3D5E8’,则参数为
16进制写法:SORT FIELDS=COPY
直接字符表示写法:SORT FIELDS=COPY
以上SORT的结果是一样的,表示取原来文件中1-23位,48-51位,后加上‘CNY’,加上文件中49位的值作为新的文件,而X表示16进制的写法,C表示直接字符的写法
4、有条件的COPY
参数:SORT FIELDS=COPY
选出原来文件中的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
//*------------------------------------------------------------------*
//*
//*------------------------------------------------------------------*
//DELFILE
//DELFILE1 DD DSN=FNSAP49.RPLD8071,DISP=(MOD,DELETE,DELETE),
//
//DELFILE2 DD DSN=FNSAP49.RPLD8072,DISP=(MOD,DELETE,DELETE),
//
//DELFILE3 DD DSN=FNSAP49.RPLD8073,DISP=(MOD,DELETE,DELETE),
//
//DELFILE4 DD DSN=FNSAP49.RPLD8074,DISP=(MOD,DELETE,DELETE),
//
//*------------------------------------------------------------------*
//*
//*------------------------------------------------------------------*
//CREFILE
//DEFFILE1 DD DSN=FNSAP49.RPLD8071,
//
//
//DEFFILE2 DD DSN=FNSAP49.RPLD8072,
//
//
//DEFFILE3 DD DSN=FNSAP49.RPLD8073,
//
//
//DEFFILE4 DD DSN=FNSAP49.RPLD8074,
//
//
//*------------------------------------------------------------------*
//*
//*------------------------------------------------------------------*
//DFSORT
//SYSOUT
//SORTIN
//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
/*
把一个文件按照条件拆分成多个文件,其中FNAMES是输出文件的名字,在前面已经定义,最后用SAVE表示把没有被前面文件接受的记录,输出到文件SORTOUT4当中,也可以不用SAVE只用前面的字段,表示按指定条件输出到指定的文件,这里INCLUDE后面直接加=号,不能写成INCLUDE COND=()。
三、文件合并输出
//DFSORT
//SYSOUT
//SORTIN01 DD DSN=FNSAP49.RPLD8071,DISP=SHR
//SORTIN02 DD DSN=FNSAP49.RPLD8072,DISP=SHR
//SORTIN03 DD DSN=FNSAP49.RPLD8074,DISP=SHR
//SORTOUT
//SYSIN
/*
注意输入文件一定要命名成SORTIN01,SORTIN02的形式,输出文件一定要为SORTOUT
四、合并完删除记录为一定条件的
//DFSORT
//SYSOUT
//SORTIN01 DD DSN=FNSAP49.RPLD8071,DISP=SHR
//SORTIN02 DD DSN=FNSAP49.RPLD8072,DISP=SHR
//SORTIN03 DD DSN=FNSAP49.RPLD8074,DISP=SHR
//SORTOUT
//SYSIN
/*
OMIT删除第45位开始4位值是为3273的所有字段
五、合并完按一定条件选取记录
//DFSORT
//SYSOUT
//SORTIN01 DD DSN=FNSAP49.RPLD8071,DISP=SHR
//SORTIN02 DD DSN=FNSAP49.RPLD8072,DISP=SHR
//SORTIN03 DD DSN=FNSAP49.RPLD8074,DISP=SHR
//SORTOUT
//SYSIN
/*
当选取条件为多个的时候可以这样子写:
INCLUDE COND=(5,5,CH,GT,C’1909C',AND,5,5,CH,LE,C'0000C')
注意:OUTREC FIELDS=(1,23,48,3)不能与MERGE一起使用
六、OMIT还可以这样用,删除记录
注意OMIT一定要和MERGE和SORT一起使用,不能单独使用OMIT
//DFSORT
//SYSOUT
//SORTIN
//SORTOUT
//SYSIN
/*
这里OMIT和SORT的顺序可以随意,但一定要有SORT
七、选择前几条记录输出
1、选择前几条记录输出
//DFSORT
//SYSOUT
//SORTIN
//SORTOUT
//SYSIN
SORT
/*
这种语句可以与OUTREC和INCLUDE一起使用
2、选择从某条开始的,后面几条输出
SORT FIELDS=COPY,SKIPREC=20,STOPAFT=10 从21条开始的10条记录
SKIPREC指定开始的位置
八、去掉重复的记录,需要在SORT FIELDS指定关键字。
SUM
九、替换某字段的值
注意这里用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
SUM