📅  最后修改于: 2020-11-22 17:08:56             🧑  作者: Mango
下图说明了使用实用程序可以满足的企业环境中的日常应用程序要求:
1.一个文件有100条记录。前10条记录需要写入输出文件。
//JSTEP020 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN1 DD DSN=MYDATA.URMI.STOPAFT,DISP=SHR
//OUT1 DD SYSOUT=*
//TOOLIN DD *
COPY FROM(IN1) TO(OUT1) USING(CTL1)
/*
//CTL1CNTL DD *
OPTION STOPAFT=10
/*
STOPAFT选项将在第10条记录后停止读取输入文件并终止程序。因此,将10条记录写入输出。
2.输入文件具有一个或多个相同员工编号的记录。将唯一记录写入输出。
//STEP010 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=MYDATA.URMI.DUPIN,DISP=SHR
//SORTOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=(1,15,ZD,A)
SUM FIELDS=NONE
/*
SUM FIELDS = NONE删除SORT FIELDS中指定的字段上的重复项。在上面的示例中,员工编号在字段位置1,15。输出文件将包含按升序排序的唯一员工编号。
3.覆盖输入记录内容。
//JSTEP010 EXEC PGM=SORT
//SORTIN DD DSN= MYDATA.URMI.SAMPLE.MAIN,DISP=SHR
//SORTOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
INREC OVERLAY=(47:1,6)
/*
在输入文件中,位置1,6的内容被覆盖到位置47,6,然后复制到输出文件。 INREC OVERLAY操作用于在复制到输出之前重写输入文件中的数据。
4.在输出文件中添加序列号。
//JSTEP010 EXEC PGM=SORT
//SORTIN DD *
data1
data2
data3
/*
//SORTOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
BUILD=(1:1,5,10:SEQNUM,4,ZD,START=1000,INCR=2)
/*
输出将是:
data1 1000
data2 1002
data3 1004
在位置10的输出中添加4位序列号,从1000开始,每条记录增加2。
5.将标题/尾部添加到输出文件。
//JSTEP010 EXEC PGM=SORT
//SORTIN DD *
data1
data2
data3
/*
//SORTOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
OUTFIL REMOVECC,
HEADER1=(1:C'HDR',10:X'020110131C'),
TRAILER1=(1:C'TRL',TOT=(10,9,PD,TO=PD,LENGTH=9))
/*
输出将是:
HDR 20110131
data1
data2
data3
TRL 000000003
TOT计算输入文件中的记录数。 HDR和TRL作为标识符添加到标题/尾部,标题/尾部是用户定义的,可以根据用户需要进行自定义。
6.条件处理
//JSTEP010 EXEC PGM=SORT
//SORTIN DD *
data1select
data2
data3select
/*
//SORTOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD *
INREC IFTHEN=(WHEN=(6,1,CH,NE,C' '),BUILD=(1:1,15),
IFTHEN=(WHEN=(6,1,CH,EQ,C' '),BUILD=(1:1,5,7:C'EMPTY ')
OPTION COPY
/*
输出将是:
data1select
data2 EMPTY
data3select
根据文件的第六个位置,输出文件的BUILD会有所不同。如果第6位是SPACES,则将文本“ EMPTY”附加到输入记录中。否则,将输入记录原样写入输出。
7.备份文件
//JSTEP001 EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
//SYSOUT DD SYSOUT=*
//SORTOUT DD DUMMY
//SYSUT1 DD DSN=MYDATA.URMI.ORIG,DISP=SHR
//SYSUT2 DD DSN=MYDATA.URMI.BACKUP,DISP=(NEW,CATLG,DELETE),
// DCB=*.SYSUT1,SPACE=(CYL,(50,1),RLSE)
IEBGENER将SYSUT1中的文件复制到SYSUT2中的文件。请注意,在上面的示例中,SYSUT2中的文件使用与SYSUT1相同的DCB。
8.文件比较
//STEP010 EXEC PGM=SORT
//MAIN DD *
1000
1001
1003
1005
//LOOKUP DD *
1000
1002
1003
//MATCH DD DSN=MYDATA.URMI.SAMPLE.MATCH,DISP=OLD
//NOMATCH1 DD DSN=MYDATA.URMI.SAMPLE.NOMATCH1,DISP=OLD
//NOMATCH2 DD DSN=MYDATA.URMI.SAMPLE.NOMATCH2,DISP=OLD
//SYSOUT DD SYSOUT=*
//SYSIN DD *
JOINKEYS F1=MAIN,FIELDS=(1,4,A)
JOINKEYS F2=LOOKUP,FIELDS=(1,4,A)
JOIN UNPAIRED,F1,F2
REFORMAT FIELDS=(?,F1:1,4,F2:1,4)
OPTION COPY
OUTFIL FNAMES=MATCH,INCLUDE=(1,1,CH,EQ,C'B'),BUILD=(1:2,4)
OUTFIL FNAMES=NOMATCH1,INCLUDE=(1,1,CH,EQ,C'1'),BUILD=(1:2,4)
OUTFIL FNAMES=NOMATCH2,INCLUDE=(1,1,CH,EQ,C'2'),BUILD=(1:2,4)
/*
JOINKEYS指定比较两个文件的字段。
REFORMAT FIELDS =?将“ B”(匹配的记录),“ 1”(出现在文件1中,但不在文件2中)或“ 2”(出现在文件2中,但不在文件1中)放置在输出BUILD的第一位置。
JOIN UNPAIRED对两个文件进行完全外部联接。
输出将是:
MATCH File
1000
1003
NOMATCH1 File
1001
1005
NOMATCH2 File
1002
使用ICETOOL也可以实现相同的功能。