Rexx разделить файл по столбцу даты

mainframe rexx

524 просмотра

1 ответ

1 Репутация автора

Я хочу разделить мой входной файл на основе столбца даты, мой входной файл будет иметь несколько дат. Я хочу разделить файл на основе количества дат на входе. Как у меня есть 5 разных дат во входном файле, то я должен получить 5 выходных файлов. Имена выходных файлов должны совпадать с датой ввода.

как мои входные данные, как:

201607131000 201607131500 201607142000 201607142500

затем на основе ввода описания изображения здесь дата в первых 8 столбцах у меня должно быть 2 выходных файла.

Это изображение - мой текущий код, моя проблема в том, что данные из предыдущего файла основы повторяются в следующем файле основы.

Допустим, у меня есть 3 записи с датой 20160712 и 2 записи 20160713 ... тогда оба моих выходных файла имеют по 3 записи в каждой. 3-я запись из out1 повторяется в out2.

Автор: KL_gun Источник Размещён: 18.07.2016 04:19

Ответы (1)


0 плюса

114 Репутация автора

Вы должны использовать вложенный цикл для выделения наборов данных.

/*
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. Здесь нет логики, если набор данных уже существует.

Билл Вуджер прав: потрать время на ввод кода, а не на плохой снимок экрана.

Автор: paulywill Размещён: 23.01.2017 08:37
Вопросы из категории :
32x32