最近遇到了使用 JCL 代码进行合并/融合的问题,我今天正尝试这样做。 为了解释一下,我想使用 ICETOOL 融合/合并 3 个不同的文件,并将这些文件中的数据放置在输出文件的特定列中。
换句话说,我有 3 个输入文件,我想将它们插入到输出文件中,但这些文件中的数据会出现在输出文件中的单独列中。说明如下:
第一个 INPUT 文件中的数据:放置在第 1 至 7 列 INPUT2 文件:放置在第 10 列到第 20 列最后 INPUT3 文件:放置在第 25 至 40 列。
更详细地说,我的文件示例如下所示: INPUT1 有以下记录:
001 啊啊啊
002 中交会
003 呀呀呀
INPUT2 有以下记录:
001 BBBB
002 DDDDDD
003 FFFFFF
并且INPUT3有以下记录:
001 BB232
002DD985
003 FFF38
我如何使用冰工具 ICETOOL 并在我的系统中使用 SELECT FROM paramater 来做到这一点
每次提交作业时,我都会意识到只有我的 INPUT2 数据被复制到了 OUTPUT 文件中的错误列(第 1 至 7 列)。 注意:我的INPUT2文件是个人姓名,INPUT2文件只是数字,INPUT3文件是数字和字母的混合(地址和数字)
非常感谢任何人为解决此问题提供的任何帮助。
提前致谢:)
查看数据,从3个文件中获取数据作为一条记录非常简单。
根据您显示的内容,所有输入文件(1 到 3)的 LRECL=80 和 RECFM=FB。
因此,技巧是将 3 个文件连接到 SORTIN dd,然后识别与 $$ 内容连接的每个文件的开头。确保选择一个常量,确保您的文件的前 2 个字节中都没有该字符。
您可以使用 WHEN=GROUP 标记文件并为每个文件中的记录编号。根据文件标签号1、2、3,我们将数据排列在各自的位置。
为了将数据集中到一个文件中,我们根据使用 WHEN=GROUP 添加的记录编号进行排序,以便将每个文件中的数据记录标记在一起。即文件 1 中的第一条记录,然后是文件 2 中的第一条记录,然后是文件 3 中的第一条记录,依此类推。
数据排序后,我们再次使用 WHEN=GROUP 将文件 1 和文件 2 记录移动到文件 3 记录。完成后,我们需要的就是为每组记录号获取一条记录,这是使用 OUTFIL
完成的这里有一个 DFSORT JCL,它将为您提供所需的内容。
如果您的文件具有不同的 LRECL,则创建另一个具有相同 lrecl 的文件,并向其中添加 1 条包含 '$$' 的记录
//STEP0100 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD *
$$
// DD DISP=SHR,DSN=Your.input.file1
// DD *
$$
// DD DISP=SHR,DSN=Your.input.file2
// DD *
$$
// DD DISP=SHR,DSN=Your.input.file3
//*
//SORTOUT DD SYSOUT=*
//SYSIN DD *
INREC IFTHEN=(WHEN=INIT,
BUILD=(41:01,15)),
IFTHEN=(WHEN=GROUP,
BEGIN=(41,2,CH,EQ,C'$$'),
PUSH=(60:ID=2,
63:SEQ=8)),
IFTHEN=(WHEN=(60,2,ZD,EQ,1,AND,
63,8,ZD,GT,1),
OVERLAY=(01:41,09)),
IFTHEN=(WHEN=(60,2,ZD,EQ,2,AND,
63,8,ZD,GT,1),
OVERLAY=(10:41,10)),
IFTHEN=(WHEN=(60,2,ZD,EQ,3,AND,
63,8,ZD,GT,1),
OVERLAY=(25:41,15))
SORT FIELDS=(63,8,CH,A),EQUALS
OUTREC IFTHEN=(WHEN=GROUP,
BEGIN=(60,2,ZD,EQ,1),
END=(60,2,ZD,EQ,3),
PUSH=(01:01,09),RECORDS=3),
IFTHEN=(WHEN=GROUP,
BEGIN=(60,2,ZD,EQ,2),
END=(60,2,ZD,EQ,3),
PUSH=(10:10,10),RECORDS=2)
OUTFIL OMIT=(63,8,ZD,EQ,1),
REMOVECC,NODETAIL,BUILD=(40X),
SECTIONS=(63,8,
TRAILER3=(01,40))
/*
根据显示的数据,该作业的输出是
----+----1----+----2----+----3----+----4
AAAAA BBBBB BB232
CCCCC DDDDD DD985
EEEEE FFFFF FFF38