如何使用JCL根据特定字段拆分数据集?

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

我有一个数据集,我需要根据唯一的 ID 将其分成 10 个较小的块(数据集)。这些块不应具有相似的长度。例如,ID 1 到 200 应该在 chunk1 中,ID 201 到 240 应该在 chunk2 中,等等。 我搜索了很多并发现了以下一段对我不起作用的代码

//S1    EXEC  PGM=SORT
//SYSOUT    DD  SYSOUT=*
//SORTIN DD DSN=... input file
//OUT1 DD DSN=...  output file1
//OUT2 DD DSN=...  output file2
//SYSIN    DD    *
  OPTION COPY
  OUTFIL FNAMES=OUT1,INCLUDE=(1,6,PD,LE,200)
FNAMES=OUT2,INCLUDE=(1,6,ch,LE,250&#41

请帮助我...

jcl
2个回答
1
投票

索拉雅,

使用以下 DFSORT JCL,它展示了如何将输入文件拆分为多个输出文件。

//STEP0100 EXEC PGM=SORT                                           
//SYSOUT   DD SYSOUT=*                                             
//SORTIN   DD *                                                    
 01                                                                
 10                                                                
 99                                                                
225                                                                
151                                                                
240                                                                
200                                                                
201                                                                
//OUT1     DD SYSOUT=*                                             
//OUT2     DD SYSOUT=*                                             
//SYSIN    DD *                                                    
  OPTION COPY                                                      
  OUTFIL FNAMES=OUT1,INCLUDE=(1,3,UFF,LE,200)                      
  OUTFIL FNAMES=OUT2,INCLUDE=(1,3,UFF,GT,200,AND,1,3,UFF,LE,240)   
/*                                                                 

OUT1 文件的输出将是

 01
 10
 99
151
200

OUT2 文件的输出将是

201
225
240

-1
投票

这类似于尝试使用 JCL 脚本根据指定的标准对数据集进行排序和划分为更小的部分。让我向您推荐这段代码:

//S1    EXEC  PGM=SORT 
//SYSOUT    DD  SYSOUT=* 
//SORTIN DD DSN=... input file 
//OUT1 DD DSN=...  output file1 
//OUT2 DD DSN=...  output file2 
//SYSIN    DD    * 
   SORT FIELDS=(1,6,PD,A) 
   OUTFIL FNAMES=OUT1,INCLUDE=(1,6,PD,LE,200) 
   OUTFIL FNAMES=OUT2,INCLUDE=(1,6,PD,GT,200) 
/*
  • INCLUDE
    语句的
    OUTFIL
    参数中的比较值刚刚更新。
  • 然后我将
    (
    替换为
    (
    ,将
    )
    替换为
    )

希望这对您有帮助。

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