0

我想根据日期列拆分我的输入文件,我的输入文件将有多个日期。我想根据输入中的日期数拆分文件。就像我在输入文件中有 5 个不同的日期,那么我应该得到 5 个输出文件。输出文件名应与输入日期相同。

就像我的输入数据是这样的:

201607131000 201607131500 201607142000 201607142500

然后根据在前 8 列中输入图像描述的日期,我应该有 2 个输出文件。

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

假设我有 3 条记录,日期为 20160712,2 条记录为 20160713 ......那么我的两个输出文件各有 3 条记录。out1 中的第三条记录在 out2 中重复。

4

1 回答 1

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. 记住数据集的命名规则,这就是我使用 'PT[date]' 的原因

  3. 如果数据集已经存在,这里就没有逻辑了。

Bill Woodger是正确的……花时间键入代码而不是截取错误的屏幕截图。

于 2017-01-23T20:37:06.127 回答