具有多个输入文件的 IEBGENER
IEBGENER with multiple input file
我是大型机新手。
我有一份工作,在 JCL 中的这一步似乎有点混乱。
//*----------------------------------------------------------
//* IEBGENER
//*----------------------------------------------------------
//GENER02 EXEC PGM=IEBGENER,COND=(8,LT)
//SYSPRINT DD SYSOUT=I
//SYSUT1 DD DSN=&&FILE1,DISP=(OLD,DELETE)
// DD DSN=&&FILE2,DISP=(OLD,DELETE)
// DD DSN=&&FILE3,DISP=(OLD,DELETE)
//SYSUT2 DD DSN=&&OUT1,DISP=(NEW,PASS),
// SPACE=(TRK,(100,100),RLSE),UNIT=WORK,
// DCB=(LRECL=90,BLKSIZE=22950,RECFM=FB)
//SYSIN DD *
GENERATE MAXLITS=100
RECORD FIELD=(20,' ',,1),
FIELD=(28,' ',,21),
FIELD=(16,'AB110000AB012561',,49),
FIELD=(26,' ',,65)
/*
我知道 IEBGENER 是一个复制实用程序,但是有 3 个输入文件和那个参数,输出文件到底是什么?
它是否合并了 3 个文件?
简短的回答是肯定的。 z/OS将一条DD语句中的所有DD卡拼接成一个逻辑包,然后一起处理。参见 https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.ieab600/iea3b6_Syntax4.htm
较长的答案是,您是从文件(z/OS 术语中的数据集)的角度来看事物; z/OS 的大部分内容都不是这种结构。 z/OS 实用程序倾向于从某种面向数据的角度看待事物,通常称为记录或记录块;在上面的示例中,IEBGENER 将查看通过 SYSUT1 提供的每条记录,进行一些处理(记录在此处:https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.idau100/u1132.htm),然后将输出写入 SYSUT2。 IEBGENER 甚至不知道有多个输入数据集;它只是向操作系统询问来自 SYSUT1 的下一条记录,z/OS 将响应,然后 IEBGENER 告诉 z/OS 将输出记录写入 SYSUT2。
回答你的第二个问题,输出会是什么样子。这种编码方式看起来像是从输出中删除字段并在其位置放置空格。基本上它会是这样的:
输入记录
1 2 3 4 5 6 7 8 9
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
This is my input data to IEBGENER so I can see what the output records will look like ....
输出记录
注意:_
表示根据您的实用程序 FIELD 语句插入的空格。
1 2 3 4 5 6 7 8 9
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
________________________________________________AB110000AB012561__________________________
实际上,IEBGENER 作业不会复制任何数据,而是将一个文字放入输出数据集中。
看来您还需要 MAXFLDS=4,否则您会收到一条消息:
IEB342I INVALID SPACE ALLOCATION
如果你想用真正的大型机系统练习,我建议MVS 3.8 Turkey 4-系统。它从 1980 年的 Free MVS 3.8 开始,系统修复到 1985 年 5 月,运行在模拟器上使用用户开发程序来替换一些受版权保护的软件,其他软件则丢失。 99.99% 的功能都可以在 z/OS 2.3 上完成,更新了一些功能并添加了其他功能。一些依赖较新功能的项目不会 运行。
我是大型机新手。 我有一份工作,在 JCL 中的这一步似乎有点混乱。
//*----------------------------------------------------------
//* IEBGENER
//*----------------------------------------------------------
//GENER02 EXEC PGM=IEBGENER,COND=(8,LT)
//SYSPRINT DD SYSOUT=I
//SYSUT1 DD DSN=&&FILE1,DISP=(OLD,DELETE)
// DD DSN=&&FILE2,DISP=(OLD,DELETE)
// DD DSN=&&FILE3,DISP=(OLD,DELETE)
//SYSUT2 DD DSN=&&OUT1,DISP=(NEW,PASS),
// SPACE=(TRK,(100,100),RLSE),UNIT=WORK,
// DCB=(LRECL=90,BLKSIZE=22950,RECFM=FB)
//SYSIN DD *
GENERATE MAXLITS=100
RECORD FIELD=(20,' ',,1),
FIELD=(28,' ',,21),
FIELD=(16,'AB110000AB012561',,49),
FIELD=(26,' ',,65)
/*
我知道 IEBGENER 是一个复制实用程序,但是有 3 个输入文件和那个参数,输出文件到底是什么? 它是否合并了 3 个文件?
简短的回答是肯定的。 z/OS将一条DD语句中的所有DD卡拼接成一个逻辑包,然后一起处理。参见 https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.ieab600/iea3b6_Syntax4.htm
较长的答案是,您是从文件(z/OS 术语中的数据集)的角度来看事物; z/OS 的大部分内容都不是这种结构。 z/OS 实用程序倾向于从某种面向数据的角度看待事物,通常称为记录或记录块;在上面的示例中,IEBGENER 将查看通过 SYSUT1 提供的每条记录,进行一些处理(记录在此处:https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.idau100/u1132.htm),然后将输出写入 SYSUT2。 IEBGENER 甚至不知道有多个输入数据集;它只是向操作系统询问来自 SYSUT1 的下一条记录,z/OS 将响应,然后 IEBGENER 告诉 z/OS 将输出记录写入 SYSUT2。
回答你的第二个问题,输出会是什么样子。这种编码方式看起来像是从输出中删除字段并在其位置放置空格。基本上它会是这样的:
输入记录
1 2 3 4 5 6 7 8 9
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
This is my input data to IEBGENER so I can see what the output records will look like ....
输出记录
注意:_
表示根据您的实用程序 FIELD 语句插入的空格。
1 2 3 4 5 6 7 8 9
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
________________________________________________AB110000AB012561__________________________
实际上,IEBGENER 作业不会复制任何数据,而是将一个文字放入输出数据集中。
看来您还需要 MAXFLDS=4,否则您会收到一条消息:
IEB342I INVALID SPACE ALLOCATION
如果你想用真正的大型机系统练习,我建议MVS 3.8 Turkey 4-系统。它从 1980 年的 Free MVS 3.8 开始,系统修复到 1985 年 5 月,运行在模拟器上使用用户开发程序来替换一些受版权保护的软件,其他软件则丢失。 99.99% 的功能都可以在 z/OS 2.3 上完成,更新了一些功能并添加了其他功能。一些依赖较新功能的项目不会 运行。