Rexx根据日期列拆分文件

时间:2016-07-18 16:19:23

标签: mainframe rexx

我想基于日期列拆分我的输入文件,我的输入文件将有多个日期。我想基于输入中的日期分割来分割文件。 就像我在输入文件中有5个不同的日期然后我应该得到5个输出文件。 输出文件名应与输入日期相同。

像我的输入数据一样:

201607131000 201607131500 201607142000 201607142500

然后基于前8列中的enter image description here日期,我应该有2个输出文件。

这个图像是我当前的代码,我的问题是前一个干文件中的数据在下一个干文件中重复。

假设我有3条记录,日期20160712和2条记录20160713 ...然后我的两个输出文件各有3条记录。 out1中的第3条记录在out2中重复出现。

1 个答案:

答案 0 :(得分:0)

您应该使用嵌套循环来分配数据集。

/*
INPUT:
201607131000 201607131500 201607142000 201607142500 
*/


/* REXX EXEC */                                                         
input1 = USER.PAULWILL.INPUT                                          
output_dataset = USER.PAULWILL.TEST2016                                   
"ALLOC F(INFILE) DSN('"INPUT1"') SHR REUSE"                             
"EXECIO * DISKR INFILE(FINIS STEM RECD."                                
"FREE F(INFILE)"                                                        

Call MOVE_DATE recd.0 output_dataset    /* pass number of dates, output dsn format */                                

MOVE_DATE:                                                              
arg rec_count dsname                                                    
do i = 1 to recd.0                                                      
  DateCount = WORDS(recd.i)                                             
  say 'DateCount:'DateCount                                             
  do j = 1 to DateCount                                                                 
    dnum = SUBSTR(WORD(recd.i,j),5,6)                                     
    "ALLOC DA('"dsname'.PT'dnum"')                          /* allocate new dataset */
    NEW DIR(0) SPACE(10,10) DSORG(ps)                                   
      RECFM(f,b) LRECL(1000) BLKSIZE(0)"                             
    "ALLOC DA('"dsname'.PT'dnum"') FI(OFILE) SHR REUSE"     
    QUEUE dnum                                             /* write some input in */                       
    "EXECIO * DISKW OFILE (FINIS"                                       
    "FREE F(OFILE)"                                                     
  end                                                                   
end /* do */                                                            


/*
OUTPUT:
USER.PAULWILL.TEST2016.PT071310 
USER.PAULWILL.TEST2016.PT071315 
USER.PAULWILL.TEST2016.PT071420 
USER.PAULWILL.TEST2016.PT071425 
*/

需要考虑的事项:

  1. 此示例中的中级限定符(MLQ)数据集必须是 提前分配。

    USER.PAULWILL.TEST2016
    
  2. 请记住naming rules for datasets,这就是我使用' PT [日期]'

  3. 的原因
  4. 如果数据集已经存在,那么这里没有逻辑。

  5. Bill Woodger是正确的......请花点时间输入代码,而不是拍错屏幕截图。