实验目的
练习使用jcl
学习iebgener的使用
实验要求
熟悉运用jcl,
阅读utilities 中关于iebgener的用法,编写jcl验证
实验过程
实例一:
源程序
****** ***************************** Top of Data *****************************
000100 //UR644CP1 JOB ,MARTIN,CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1),NOTIFY=&SYSUID
000200 //**此步执行将in-stream复制入分区数据集的成员中***********************
000300 //CP2FILE EXEC PGM=IEBGENER
000400 //SYSUT1 DD *
000500 MARTIN 200992403 19901031
000600 FEDORA 200882463 19891209
000700 VENCET 203311214 19898791
000800 /*
000900 //SYSUT2 DD DSN=UR644.JCL.OUTPUT(CP1#OUT),DISP=(NEW,CATLG,DELETE),
001000 // SPACE=(TRK,(1,1,1)),RECFM=FB,LRECL=80,UNIT=SYSDA,VOL=SER=URVOL4
001100 //SYSPRINT DD SYSOUT=*
001200 //SYSIN DD DUMMY
001300 //**此步实现将分区数据集中成员复制到输出队列中************************
001400 //CP2STM EXEC PGM=IEBGENER
001500 //SYSUT1 DD DSN=UR644.JCL.OUTPUT(CP1#OUT),DISP=SHR
001600 //SYSUT2 DD SYSOUT=*
001700 //SYSPRINT DD SYSOUT=*
001800 //SYSIN DD DUMMY
001900 //********此步实现分区数据集之间成员的复制***************************
002000 //CPFL2FL EXEC PGM=IEBGENER
002100 //SYSUT1 DD DSN=UR644.JCL.OUTPUT(CP1#OUT),DISP=SHR
002200 //SYSUT2 DD DSN=UR644.JCL.OUTPUT(CP2#OUT),DISP=(OLD,CATLG,DELETE),
002300 // LRECL=80,SPACE=(TRK,(1,1,1))
002400 //SYSPRINT DD SYSOUT=*
002500 //SYSIN DD DUMMY
****** **************************** Bottom of Data ****************************
输出
第一作业部:
****** ***************************** Top of Data ************************
000500 MARTIN 200992403 19901031
000600 FEDORA 200882463 19891209
000700 VENCET 203311214 19898791
****** **************************** Bottom of Data ***********************
第二作业部:队列中的内容
********************************* TOP OF DATA **************************
MARTIN 200992403 19901031 00050001
FEDORA 200882463 19891209 00060001
VENCET 203311214 19898791 00070001
******************************** BOTTOM OF DATA ************************
第三作业部:
****** ***************************** Top of Data *************************
000500 MARTIN 200992403 19901031
000600 FEDORA 200882463 19891209
000700 VENCET 203311214 19898791
****** **************************** Bottom of Data ***********************
分析
主要是DD语句的使用
l 第一步CP2FILE
实现从内部数据流将内容复制到数据集中,未指定控制参数
在此处遇到的错误
l 第二步 CP2STM
实现将内部数据流输出,未指定控制参数
l 第三步 CPFL2FL
实现数据集之间内容的复制,未指定控制参数
遇到错误:
u 在定义SYSUT2中space is not specified.加上space参数定义就好了
u 在运行时,定义SYSUT2的DD语句失败,是因为文件已存在。删掉已有文件就行了
u 在对已经存在的数据集中添加成员时,disp定义为(new,catlg,delete),由于此数据集系统中本来就有,所以导致错误,改为(old,catlg,delete),正常了
实例二
源程序:
000100 //UR644CP2 JOB ,MARTIN,CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1),NOTIFY=&SYSUID
000200 //*此步实现将数据进行分组,并换了各列的顺序****************************
000300 //CHROWS EXEC PGM=IEBGENER
000400 //SYSUT1 DD DSN=UR644.JCL.OUTPUT(CP1#OUT),DISP=SHR
000500 //SYSUT2 DD DSN=UR644.JCL.OUTPUT,DISP=(OLD,CATLG,DELETE),
000600 // SPACE=(TRK,(1,1,1))
000700 //SYSPRINT DD SYSOUT=*
000800 //SYSIN DD *
000900 GENERATE MAXNAME=3,MAXGPS=3,MAXFLDS=5
001000 MEMBER NAME=CP3#OUT
001100 GROUP1 RECORD IDENT=(6,'MARTIN',1),FIELD=(6,1,,11),FIELD=(9,8,,1),
001110 FIELD=(8,18,,18) 换第一列与第二列,将第一行记录导出
001200 MEMBER NAME=CP4#OUT
001300 GROUP2 RECORD IDENT=(6,'FEDORA',1) 将第二行导出
001400 MEMBER NAME=CP5#OUT
001500 GROUP3 RECORD IDENT=(6,'VENCET',1),FIELD=(7,1,,20),FIELD=(19,8,,1)
001600 // 将第一列与二三列互换,将第三列导出
****** **************************** Bottom of Data ****************************
输出
分区数据集多了三个成员
原文件:
分析
主要是SYSIN中参数的使用方法将分区数据集中的成员数据当作输入,生成三个分区数据集的成员
l 将输入数据中从第一列开始出现6字符MARTIN那一行之前的数据包括这一行拿出来,将第一列与第二列对调,存入分区数据集的cp3#out 成员中
l 将输入数据中剩余部分从第一列开始出现6字符FEDORA那一行之前的数据包括这一行拿出来,存入分区数据集的cp4#out成员中
l 将输入数据中剩余部分从第一列开始出现6字符的VENCET那一行之前的数据包括这一行拿出来,将第一列与后两列的内容对调,出入分区数据集的cp5#out成员中
遇到错误
重复运行时,系统中已存在要创建的数据集导致运行失败,运行前删除同名文件即可
Generate语句中maxname,maxflds,maxgps定义过多,导致处理多个record或者是member语句时运行失败,将个数定位各语句执行的次数即可。
实验总结
l Iebgener
Iebgener用于复制顺序数据集和分区数据集成员或创建数据集
具体功能:
复制顺序文件 | u 可以用来重命名文件 u 当用于处理分区数据集的成员时,此程序不提供针对目录块的操作 |
从顺序数据集中构造分区数据集 | l 当记录中有续行时,此功能不可用 l 生成分区数据集中新的成员 l 构造新的分区数据集 |
对记录进行编辑 | l 更改记录的顺序 l 记录码制转换 l 将记录中特定内容,根据指定的参数进行替换 l 如果记录格式不为fb,此功能不可用 |
可以重新定义记录长度 | l 只有输入数据集和输出数据集都是定长时,此功能才可用 |
输入/输出
SYSUT1 | 定义输入的数据集 | 记录格式不限,输入数据的记录格式必须可见,当为定长时,记录长度必须指定,格式默认为u,默认长度为80 | |
SYSUT2 | 定义输出的数据集 | 顺序数据集或分区数据集的成员 | |
SYSPRINT | 定义存放消息输出的数据集 | 顺序数据集,可以是输出设备,或是磁盘上, | 记录块的记录长度必须是121的整数倍 |
SYSIN | 定义控制语句 | 当无编辑操作,输出为顺序时,可以为DUMMY,一般为内部数据流中,也可在磁盘中分区数据集的成员中。 | 记录块长度必须是80的整数倍 |
Sysin中涉及到的参数:
Generate | Maxname | 定义生成的member的数量 | 必须大于Member出现次数 |
Maxflds | 定义记录中有几个段用来编辑 | 必须等于field出现的次数, | |
Maxgps | 定义数据分成多少个组 | 等于或大于group标识出现的次数 | |
Member | Name | 定义新成员的名字和别名 | 别和现有成员名重名 |
Record | Ident | 定义数据的分割行的特征 | 标志长,标志数据,输出列起始位置 |
field | 定义对数据列的编辑操作 | 数据长,起始位置,转换,输出列起始位置 | |
Exits | Ioerror | 定义用户的出错处理 |