flds:jcl实验——iebgener的使用

实验目的

练习使用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

定义用户的出错处理

 

转载于:https://www.cnblogs.com/martin-dlut/archive/2012/03/14/2395393.html

相关推荐

最新

相关文章