Формат даты в трейлере

OPTION COPY                                                 
  OUTFIL  REMOVECC,                                          
      TRAILER1=('FT',DATE,55X,COUNT=(EDIT=(IIITT)),   
     299X,TOTAL=(370,13,SFF,EDIT=(STTTTTTTTT.TT),       
                        SIGNS=(+,-),                    
                        LENGTH=13))                     

У меня есть запись трейлера с указанными выше параметрами. В этом сценарии дата отображается в формате, но я хочу, чтобы дата отображалась только в формате 2014-10-21. Моя запись трейлера будет выглядеть так, как показано ниже.

FT10/21/14       04    +000000192.21

Должно быть как показано ниже. FT2014-10-21 04 +000000192.21

Кроме того, в этом я нашел количество всех записей и общее количество всех записей. В моем входном файле есть A или L в столбце 2 и соответствующие суммы в столбце 370. Я также хочу найти количество записей, содержащих A или L в столбце 2, а также общее количество этих записей. Я также должен отображать это количество и сумму в записи трейлера.

Примечание: в моем трейлере мне нужно отображать текущую дату в формате гггг-мм-дд, и я уже показываю количество и общее количество всех входных записей, я также хочу отображать количество и общее количество записей с A или L в столбце 2 и сумма соответствующих сумм в столбце 370.

Судя по ответу Билла, это то, что у меня есть.

//SORTA    EXEC PGM=SORT                                                
//SORTIN   DD  DSN=TESTIBN.MYFILE.CHGHIS.SAMP,                    
//             DISP=SHR                                                 
//SORTOUT  DD  DSN=TESTIBN.MYFILE.CHGHIS.NEW,                     
//             DISP=(NEW,CATLG,DELETE),                                 
//             UNIT=SYSDA,                                              
//             RECFM=FB                                                 
//SORTWK01 DD  SPACE=(CYL,(364)),                                       
//             UNIT=SYSDA                                               
//SORTWK02 DD  SPACE=(CYL,(364)),                                       
//             UNIT=SYSDA                                               
//SORTWK03 DD  SPACE=(CYL,(364)),                                       
//             UNIT=SYSDA                                               
//SORTWK04 DD  SPACE=(CYL,(364)),                                       
//             UNIT=SYSDA                                               
//SORTWK05 DD  SPACE=(CYL,(364)),                                       
//             UNIT=SYSDA                                               
//SYSPRINT DD  SYSOUT=*                                                 
//SYSOUT   DD  SYSOUT=*                                                 
//SYSIN    DD  *                                                        
  OPTION COPY                                                           
   OUTFIL  REMOVECC,                                                    
            TRAILER1=('FT',DATE=(4MD-),55X,COUNT=(EDIT=(IIITT)),        
           299X,TOTAL=(370,13,SFF,EDIT=(STTTTTTTTT.TT),                 
                              SIGNS=(+,-),                              
                              LENGTH=13)) 

Да, длина записи 500. Во входном файле буквы A или L стоят на позиции 2 только для нескольких записей. Это корректировочные записи. У них может быть C в позиции 2 для записей о расходах. Я уже поместил итоги всех записей (начисление + корректировки) в трейлер, теперь я должен также указать количество и общее количество записей корректировок.


person user3885073    schedule 21.10.2014    source источник


Ответы (1)


Из Руководства по программированию приложений DFSORT

ДАТА=(abcd)

указывает, что текущая дата должна отображаться в записи отчета в форме «adbdc», где a, b и c указывают порядок, в котором должны отображаться месяц, день и год, и должен ли год отображаться как два или четыре цифры, а d — символ, используемый для разделения месяца, дня и года. Для a, b и c используйте M для представления месяца (01-12), D для представления дня (01-31), Y для представления двух последних цифр года (например, 05) или 4 для представления четырех цифр года (например, 2005). M, D и Y или 4 можно указать только один раз. Примеры: DATE=(DMY.) создаст дату в форме «дд.мм.гг», которая 29 марта 2005 г. будет отображаться как «29.03.05». DATE=(4MD-) создаст дату в форме «гггг-мм-дд», которая 29 марта 2005 г. будет выглядеть как «2005-03-29».

Самая последняя строка описания дает вам именно то, что вы хотите, а именно заменить простую DATE на DATE=(4MD-).

Чтобы получить количество и общее количество записей A и L:

Использовать

 INREC IFTHEN=(WHEN=INIT,OVERLAY=(position-after-end-of-record:Z,13Z,Z,13Z),

Предполагая, что ваши записи имеют размер 500 байт и фиксированную длину, которая будет (501: Z, 13Z, Z, 13Z),

Это временно (потому что позже мы их обрежем) расширит записи.

Затем используйте два IFTHEN=(WHEN=(логическое-выражение) для проверки ваших A и L. Если A, используйте OVERLAY, чтобы поместить C'1' в позицию 501 и сумму, начинающуюся с 502. Если L, используйте OVERLAY, чтобы поместить C'1' в позиции 515 и сумма, начинающаяся с 516.

Измените свой TRAILER1, чтобы сделать TOT/TOTAL всех этих четырех полей. Это даст вам количество As и общую сумму As, количество Ls и общую сумму Ls. Добавьте BUILD=(1,500) к вашему OUTFIL, чтобы вернуть вашим записям исходный размер.

Обратите внимание, я использую 500 в качестве примера. Используйте фактический LRECL ваших записей.

Если у вас есть записи переменной длины, их нужно немного изменить.

 OPTION COPY

 INREC IFTHEN=(WHEN=INIT,
                OVERLAY=(501:Z,13Z,Z,13Z)),
       IFTHEN=(WHEN=(2,1,CH,EQ,C'A'),
                OVERLAY=(501:C'1',370,13)),
       IFTHEN=(WHEN=(2,1,CH,EQ,C'A'),
                OVERLAY=(515:C'1',370,13))

 OUTFIL  REMOVECC,                                          
         TRAILER1=('FT',DATE,55X,COUNT=(EDIT=(IIITT)),
                   TOTAL=(501,1,ZD,EDIT=(IIITT)),   
                   TOTAL=(502,13,ZD,EDIT=(STTTTTTTTT.TT),       
                                               SIGNS=(+,-),
                   TOTAL=(515,1,ZD,EDIT=(IIITT)),   
                   TOTAL=(516,13,ZD,EDIT=(STTTTTTTTT.TT),       
                                               SIGNS=(+,-),
                   263X,TOTAL=(370,13,SFF,EDIT=(STTTTTTTTT.TT),       
                                               SIGNS=(+,-),                    
                                               LENGTH=13))  

Я даже не бросил его в машину, но он должен быть рядом.

Я не могу сказать, где вам нужны новые цифры, поэтому я просто поместил их в первую доступную область из 299 пробелов.

Вы используете OPTION COPY, вам вообще не нужны файлы SORTWK. Вы получаете более 1500 цилиндров пространства, которые вам не нужны, но будут удерживаться до конца шага.

Я бы посоветовал вашему сайту провести расследование с использованием динамического выделения рабочего пространства. Судя по показанному вами JCL, это значительно уменьшит конкуренцию за место.

Вы также не должны указывать какую-либо информацию DCB для выходного файла (SORTOUT), так как DFSORT предоставит все это, и лучше всего это сделать в одном месте только для ясности и во избежание путаницы/ошибок при обслуживании.

person Bill Woodger    schedule 21.10.2014