Gregorian date to Julian date



Support for NetApp SyncSort for z/OS, Visual SyncSort, SYNCINIT, SYNCLIST and SYNCTOOL

Gregorian date to Julian date

Postby Thampy » Thu Jan 21, 2010 12:51 am

I am having an input file with 1st field (Position 1-8) in Gregorian date format (ccyymmdd) and want to convert this to Julian date format(yyddd).

My shop is using Syncsort V1.3.

Appreciate if someone can help me on this.
Thampy
 
Posts: 35
Joined: Sat Sep 26, 2009 2:27 pm
Has thanked: 0 time
Been thanked: 3 times

Re: Gregorian date to Julian date

 

Re: Gregorian date to Julian date

Postby Alissa Margulies » Thu Jan 28, 2010 11:42 pm

For the purpose of illustration, the Original Input and Final Output Data Files are both 60 bytes. This is a 1-step process which reads the input date using Gregorian format, located at column 1. This process overlays this same field with a date using the Julian Date Format. Since this uses only 5 character positions, it puts spaces in the remaining 3 positions.

This works with Leap Years and non-Leap Years. If you need to go further back than 1996 or further forward past 2103, then please let me know.

ORIGINAL INPUT RECORD: LRECL=60
----+----1----+----2----+----3----+----4----+----5----+----6
20081231SDQFKASDFASQFJQKJQASWCTWFMQKPSCYQKQKJASFDFFHA3FBRESF


FINAL OUTPUT RECORD: LRECL=60
----+----1----+----2----+----3----+----4----+----5----+----6
08366   SDQFKASDFASQFJQKJQASWCTWFMQKPSCYQKQKJASFDFFHA3FBRESF


The Complete Solution follows:
//STEP1    EXEC PGM=SORT
//SORTIN   DD DSN=INPUT.RECORDS
//SORTOUT  DD DSN=OUTPUT.RECORDS
//SYSOUT   DD SYSOUT=*
//SYSIN DD *
  SORT FIELDS=COPY                                                 
  INREC IFTHEN=(WHEN=INIT,                                         
  BUILD=(3,2,6X,9,52,C'N',1,8)),                                         
       IFTHEN=(WHEN=(62,4,CH,EQ,L(C'1996',C'2000',C'2004',C'2008',
   C'2012',C'2016',C'2020',C'2024',C'2028',C'2032',C'2036',C'2040',
   C'2044',C'2048',C'2052',C'2056',C'2060',C'2064',C'2068',C'2072',
   C'2076',C'2080',C'2084',C'2088',C'2092',C'2096')),             
  OVERLAY=(61:C'L'),HIT=NEXT),                                     
       IFTHEN=(WHEN=(66,2,ZD,EQ,1),                               
  OVERLAY=(3:C'000')),                                           
       IFTHEN=(WHEN=(66,2,ZD,EQ,2),                               
  OVERLAY=(3:C'031')),                                           
       IFTHEN=(WHEN=(66,2,ZD,EQ,3,AND,61,1,CH,EQ,C'N'),           
  OVERLAY=(3:C'059')),                                           
       IFTHEN=(WHEN=(66,2,ZD,EQ,4,AND,61,1,CH,EQ,C'N'),           
  OVERLAY=(3:C'090')),                                           
       IFTHEN=(WHEN=(66,2,ZD,EQ,5,AND,61,1,CH,EQ,C'N'),           
  OVERLAY=(3:C'120')),                                           
       IFTHEN=(WHEN=(66,2,ZD,EQ,6,AND,61,1,CH,EQ,C'N'),
  OVERLAY=(3:C'151')),                                 
       IFTHEN=(WHEN=(66,2,ZD,EQ,7,AND,61,1,CH,EQ,C'N'),
  OVERLAY=(3:C'181')),                                 
       IFTHEN=(WHEN=(66,2,ZD,EQ,8,AND,61,1,CH,EQ,C'N'),
  OVERLAY=(3:C'212')),                                 
       IFTHEN=(WHEN=(66,2,ZD,EQ,9,AND,61,1,CH,EQ,C'N'),
  OVERLAY=(3:C'243')),                                 
       IFTHEN=(WHEN=(66,2,ZD,EQ,10,AND,61,1,CH,EQ,C'N'),
  OVERLAY=(3:C'273')),                                 
       IFTHEN=(WHEN=(66,2,ZD,EQ,11,AND,61,1,CH,EQ,C'N'),
  OVERLAY=(3:C'304')),                                 
       IFTHEN=(WHEN=(66,2,ZD,EQ,12,AND,61,1,CH,EQ,C'N'),
  OVERLAY=(3:C'334')),                                 
       IFTHEN=(WHEN=(66,2,ZD,EQ,3,AND,61,1,CH,EQ,C'L'),
  OVERLAY=(3:C'060')),                                 
       IFTHEN=(WHEN=(66,2,ZD,EQ,4,AND,61,1,CH,EQ,C'L'),
  OVERLAY=(3:C'091')),                                 
       IFTHEN=(WHEN=(66,2,ZD,EQ,5,AND,61,1,CH,EQ,C'L'),
  OVERLAY=(3:C'121')),                                 
       IFTHEN=(WHEN=(66,2,ZD,EQ,6,AND,61,1,CH,EQ,C'L'),
  OVERLAY=(3:C'152')),                                     
       IFTHEN=(WHEN=(66,2,ZD,EQ,7,AND,61,1,CH,EQ,C'L'),     
  OVERLAY=(3:C'182')),                                     
       IFTHEN=(WHEN=(66,2,ZD,EQ,8,AND,61,1,CH,EQ,C'L'),     
  OVERLAY=(3:C'213')),                                     
       IFTHEN=(WHEN=(66,2,ZD,EQ,9,AND,61,1,CH,EQ,C'L'),     
  OVERLAY=(3:C'244')),                                     
       IFTHEN=(WHEN=(66,2,ZD,EQ,10,AND,61,1,CH,EQ,C'L'),     
  OVERLAY=(3:C'274')),                                     
       IFTHEN=(WHEN=(66,2,ZD,EQ,11,AND,61,1,CH,EQ,C'L'),     
  OVERLAY=(3:C'305')),                                     
       IFTHEN=(WHEN=(66,2,ZD,EQ,12,AND,61,1,CH,EQ,C'L'),     
  OVERLAY=(3:C'335'))                                       
  OUTREC FIELDS=(1,2,68,2,ZD,ADD,3,3,ZD,EDIT=(TTT),3X,9,52)
//
Alissa Margulies
Syncsort Mainframe Product Services
201-930-8260
zos_tech@syncsort.com
Alissa Margulies
Global moderator
 
Posts: 369
Joined: Tue Feb 26, 2008 11:15 pm
Location: USA
Has thanked: 1 time
Been thanked: 1 time

Re: Gregorian date to Julian date

Postby Thampy » Fri Feb 05, 2010 4:59 am

Alissa,

Thanks for the solution.

I have coded another jcl that make use of FINDREP and the jcl uses only 3 IFTHEN statements.
Tested the jcl and its giving the correct results.
//STEP010   EXEC PGM=SORT                                           
//SYSOUT    DD SYSOUT=*                                             
//SORTIN    DD *                                                   
20081231SDQFKASDFASQFJQKJQASWCT                                     
20090204DDDDDDDDDDDDDDDDDDDDDDD                                     
20070405SEEEEEEEEEEEEEEEEEEEEEE                                     
20040331***********************                                     
19000413***********************                                     
//*                                                                 
//SORTOUT  DD SYSOUT=*                                             
//SYSIN    DD *                                                     
  OPTION COPY                                                       
  INREC IFTHEN=(WHEN=INIT,OVERLAY=(61:1,8,                         
                                   69:1,4,ZD,MOD,+4,M11,LENGTH=3,   
                                   72:1,4,ZD,MOD,+100,M11,LENGTH=3,
                                   75:1,4,ZD,MOD,+400,M11,LENGTH=3,
                                   5:5,2,ZD,ADD,+0,M11,LENGTH=3)), 
        IFTHEN=(WHEN=INIT,FINDREP=(STARTPOS=5,ENDPOS=7,             
          INOUT=(C'001',C'000',C'002',C'031',C'003',C'059',         
           C'004',C'090',C'005',C'120',C'006',C'151',               
           C'007',C'181',C'008',C'212',C'009',C'243',               
           C'010',C'273',C'011',C'304',C'012',C'334'))),     
        IFTHEN=(WHEN=(((69,3,ZD,EQ,0,AND,72,3,ZD,GT,0),OR,   
                   75,3,ZD,EQ,0),AND,(5,3,ZD,GT,31)),       
               OVERLAY=(5:5,3,ZD,ADD,+1,M11,LENGTH=3))       
  OUTFIL BUILD=(3,2,67,2,ZD,ADD,5,3,ZD,EDIT=(TTT),9,52,80:X)
//*       


Output:
08366SDQFKASDFASQFJQKJQASWCT
09035DDDDDDDDDDDDDDDDDDDDDDD
07095SEEEEEEEEEEEEEEEEEEEEEE
04091***********************
00103***********************
Thampy
 
Posts: 35
Joined: Sat Sep 26, 2009 2:27 pm
Has thanked: 0 time
Been thanked: 3 times


Return to Syncsort/Synctool

 


  • Related topics
    Replies
    Views
    Last post