我是大型机新手。 我有工作,在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个文件吗?
答案 0 :(得分:4)
简短的回答是。 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 :(得分:1)
回答您的第二个问题,即输出的外观。这种编码方式看起来像是从输出中删除字段并在其位置放置空格。基本上是这样的:
输入记录
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
答案 2 :(得分:1)
如果您想在真正的大型机系统上进行练习,建议使用MVS 3.8 Turkey 4-系统。它从1980年的Free MVS 3.8开始,到1985年5月进行了系统修复,在带有用户开发程序的仿真器上运行,以替换某些受版权保护的软件,而其他丢失了。它在z / OS 2.3上可以完成的功能的99.99%,已更新了某些功能,并添加了其他功能。某些依赖更新功能的项目将无法运行。