2014-10-21 3 views
1
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 и соответствующие суммы в coloumn 370. Я также хочу найти счетчик записей, которые имеют A или L в столбце 2, а также общее количество этих записей. Я должен показать это количество и сумму в записи трейлера. Эксперты помогают в срочном порядке.

Примечание: в моем трейлере мне нужно отобразить текущую дату в формате yyyy-mm-dd, и я уже показываю счет и общее количество всех входных записей, я также хочу отображать счет и общее количество записи с 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 для записей заряда. Я уже поставил итоговые суммы всех записей (заряд + корректировки) в трейлере, теперь я должен также поместить счет и общее количество записей настройки. Пожалуйста, помогите мне с фактическим кодом.

ответ

0

Из Руководства по программированию DFSORT Application

ДАТА = (ABCD)

указывает, что текущая дата появится в записи отчета в форму 'adbdc', где а, Ь, и c указать порядок, в котором должны появляться цифры, дни и год , и должен ли год отображаться как две или четыре цифры, а d - символ, который будет использоваться для разделения месяца, дня и года. Для a, b и c используйте M для представления месяца (01-12), D для представления дня (01-31), Y для представления последних двух цифр года (например, 05), или 4 для представления четырех цифр года (например, 2005 год). M, D и Y или 4 могут быть указаны как . Примеры: DATE = (DMY.) Создаст дату формы 'dd.mm.yy', которая 29 марта 2005 года появится как «29 .03.05». DATE = (4MD-) создаст дату формы «yyyy-mm-dd», которая на 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 предоставит все это, и лучше всего это сделать в одном месте только для ясности и избежать путаницы/ошибки при обслуживании.

+0

Большое спасибо за законопроект. – user3885073