使用 ICETOOL 将 3 个文件合并在一起并将它们放置在输出文件中的单独列中时遇到问题

问题描述 投票:0回答:1

最近遇到了使用 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

我想加入数据以获得一个输出文件,其中数据合并如下: Picture of what the data final data should look like

我如何使用冰工具 ICETOOL 并在我的系统中使用 SELECT FROM paramater 来做到这一点

我的 SYSIN 看起来像这样: Image of my SYSIN

每次提交作业时,我都会意识到只有我的 INPUT2 数据被复制到了 OUTPUT 文件中的错误列(第 1 至 7 列)。 注意:我的INPUT2文件是个人姓名,INPUT2文件只是数字,INPUT3文件是数字和字母的混合(地址和数字)

非常感谢任何人为解决此问题提供的任何帮助。

提前致谢:)

cobol jcl dfsort
1个回答
0
投票

查看数据,从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 

      
© www.soinside.com 2019 - 2024. All rights reserved.