View previous topic :: View next topic
Author
Message
abhijit.nayak01 Active User Joined: 22 Mar 2009Posts: 161 Location: South Africa
Hi,
I have one input tape file in which a huge amount of data are present.In the 178 positin of the file the date column starts which is in YYYYMMDD format and i need to do put data in the 36 input files based on the last 36 month records The sort card is like this:
Code:
//SYSOUT DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//SORTIN DD DSN=TESTITN.S18.SARBANE.MNTHLY.NEW.RFMT,DISP=SHR
//SORTO1 DD DSN=TESTITN.NOV06.FILE1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO2 DD DSN=TESTITN.NOV06.FILE2,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO3 DD DSN=TESTITN.NOV06.FILE3,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO4 DD DSN=TESTITN.NOV06.FILE4,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO5 DD DSN=TESTITN.NOV06.FILE5,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO6 DD DSN=TESTITN.NOV06.FILE6,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO7 DD DSN=TESTITN.NOV06.FILE7,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO8 DD DSN=TESTITN.NOV06.FILE8,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO9 DD DSN=TESTITN.NOV06.FILE9,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO10 DD DSN=TESTITN.NOV06.FILE10,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO11 DD DSN=TESTITN.NOV06.FILE11,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO12 DD DSN=TESTITN.NOV06.FILE12,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO13 DD DSN=TESTITN.NOV06.FILE13,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO14 DD DSN=TESTITN.NOV06.FILE14,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO15 DD DSN=TESTITN.NOV06.FILE15,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO16 DD DSN=TESTITN.NOV06.FILE16,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO17 DD DSN=TESTITN.NOV06.FILE17,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO18 DD DSN=TESTITN.NOV06.FILE18,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO19 DD DSN=TESTITN.NOV06.FILE19,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO20 DD DSN=TESTITN.NOV06.FILE20,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO21 DD DSN=TESTITN.NOV06.FILE21,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO22 DD DSN=TESTITN.NOV06.FILE22,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO23 DD DSN=TESTITN.NOV06.FILE23,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO24 DD DSN=TESTITN.NOV06.FILE24,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO25 DD DSN=TESTITN.NOV06.FILE25,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO26 DD DSN=TESTITN.NOV06.FILE26,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO27 DD DSN=TESTITN.NOV06.FILE27,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO28 DD DSN=TESTITN.NOV06.FILE28,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO29 DD DSN=TESTITN.NOV06.FILE29,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO30 DD DSN=TESTITN.NOV06.FILE30,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO31 DD DSN=TESTITN.NOV06.FILE31,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO32 DD DSN=TESTITN.NOV06.FILE32,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO33 DD DSN=TESTITN.NOV06.FILE33,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO34 DD DSN=TESTITN.NOV06.FILE34,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO35 DD DSN=TESTITN.NOV06.FILE35,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO36 DD DSN=TESTITN.NOV06.FILE361,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SYSIN DD *
SORT FIELDS=COPY
OUTFIL FNAMES=SORTO1,INCLUDE=(178,8,CH,EQ,C'20091031')
OUTFIL FNAMES=SORTO2,INCLUDE=(178,8,CH,EQ,C'20090930')
OUTFIL FNAMES=SORTO3,INCLUDE=(178,8,CH,EQ,C'20090831')
OUTFIL FNAMES=SORTO4,INCLUDE=(178,8,CH,EQ,C'20090731')
OUTFIL FNAMES=SORTO5,INCLUDE=(178,8,CH,EQ,C'20090630')
OUTFIL FNAMES=SORTO6,INCLUDE=(178,8,CH,EQ,C'20090531')
OUTFIL FNAMES=SORTO7,INCLUDE=(178,8,CH,EQ,C'20090430')
OUTFIL FNAMES=SORTO8,INCLUDE=(178,8,CH,EQ,C'20090331')
OUTFIL FNAMES=SORTO9,INCLUDE=(178,8,CH,EQ,C'20090228')
OUTFIL FNAMES=SORTO10,INCLUDE=(178,8,CH,EQ,C'20090131')
OUTFIL FNAMES=SORTO11,INCLUDE=(178,8,CH,EQ,C'20081231')
OUTFIL FNAMES=SORTO12,INCLUDE=(178,8,CH,EQ,C'20081130')
OUTFIL FNAMES=SORTO13,INCLUDE=(178,8,CH,EQ,C'20081031')
OUTFIL FNAMES=SORTO14,INCLUDE=(178,8,CH,EQ,C'20080930')
OUTFIL FNAMES=SORTO15,INCLUDE=(178,8,CH,EQ,C'20080831')
OUTFIL FNAMES=SORTO16,INCLUDE=(178,8,CH,EQ,C'20080731')
OUTFIL FNAMES=SORTO17,INCLUDE=(178,8,CH,EQ,C'20080630')
OUTFIL FNAMES=SORTO18,INCLUDE=(178,8,CH,EQ,C'20080531')
OUTFIL FNAMES=SORTO19,INCLUDE=(178,8,CH,EQ,C'20080430')
OUTFIL FNAMES=SORTO20,INCLUDE=(178,8,CH,EQ,C'20080331')
OUTFIL FNAMES=SORTO21,INCLUDE=(178,8,CH,EQ,C'20080229')
OUTFIL FNAMES=SORTO22,INCLUDE=(178,8,CH,EQ,C'20080131')
OUTFIL FNAMES=SORTO23,INCLUDE=(178,8,CH,EQ,C'20071231')
OUTFIL FNAMES=SORTO24,INCLUDE=(178,8,CH,EQ,C'20071130')
OUTFIL FNAMES=SORTO25,INCLUDE=(178,8,CH,EQ,C'20071031')
OUTFIL FNAMES=SORTO26,INCLUDE=(178,8,CH,EQ,C'20070930')
OUTFIL FNAMES=SORTO27,INCLUDE=(178,8,CH,EQ,C'20070831')
OUTFIL FNAMES=SORTO28,INCLUDE=(178,8,CH,EQ,C'20070731')
OUTFIL FNAMES=SORTO29,INCLUDE=(178,8,CH,EQ,C'20070630')
OUTFIL FNAMES=SORTO30,INCLUDE=(178,8,CH,EQ,C'20070531')
OUTFIL FNAMES=SORTO31,INCLUDE=(178,8,CH,EQ,C'20070430')
OUTFIL FNAMES=SORTO32,INCLUDE=(178,8,CH,EQ,C'20070331')
OUTFIL FNAMES=SORTO33,INCLUDE=(178,8,CH,EQ,C'20070228')
OUTFIL FNAMES=SORTO34,INCLUDE=(178,8,CH,EQ,C'20070131')
OUTFIL FNAMES=SORTO35,INCLUDE=(178,8,CH,EQ,C'20061231')
OUTFIL FNAMES=SORTO36,INCLUDE=(178,8,CH,EQ,C'20061130')
/*
But my problem is instead of hardcoding the date value in the include condition i want some automated way .
Thanks,
Abhijit.
Back to top
gcicchet Senior Member Joined: 28 Jul 2006Posts: 1702 Location: Australia
Hi,
if you want the last 36 months, shouldn't the selection be based on YYYYMM and not YYYYMMDD which results in only the last day of each month being selected ?
Gerry
Back to top
gcicchet Senior Member Joined: 28 Jul 2006Posts: 1702 Location: Australia
Hi,
if my assumptions are correct, this may help
Code:
//STEP0001 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD *
REC
/*
//SORTOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
OUTFIL BUILD=(1:C' OUTFIL FNAMES=SORTO1,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-1,C''')',/,
1:C' OUTFIL FNAMES=SORTO2,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-2,C''')',/,
1:C' OUTFIL FNAMES=SORTO3,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-3,C''')',/,
1:C' OUTFIL FNAMES=SORTO4,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-4,C''')',/,
1:C' OUTFIL FNAMES=SORTO5,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-5,C''')',/,
1:C' OUTFIL FNAMES=SORTO6,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-6,C''')',/,
1:C' OUTFIL FNAMES=SORTO7,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-7,C''')',/,
1:C' OUTFIL FNAMES=SORTO8,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-8,C''')',/,
1:C' OUTFIL FNAMES=SORTO9,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-9,C''')',/,
1:C' OUTFIL FNAMES=SORTO10,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-10,C''')'/,
1:C' OUTFIL FNAMES=SORTO11,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-11,C''')'/,
1:C' OUTFIL FNAMES=SORTO12,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-12,C''')'/,
1:C' OUTFIL FNAMES=SORTO13,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-13,C''')'/,
1:C' OUTFIL FNAMES=SORTO14,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-14,C''')'/,
1:C' OUTFIL FNAMES=SORTO15,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-15,C''')'/,
1:C' OUTFIL FNAMES=SORTO16,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-16,C''')'/,
1:C' OUTFIL FNAMES=SORTO17,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-17,C''')'/,
1:C' OUTFIL FNAMES=SORTO18,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-18,C''')'/,
1:C' OUTFIL FNAMES=SORTO19,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-19,C''')'/,
1:C' OUTFIL FNAMES=SORTO20,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-20,C''')'/,
1:C' OUTFIL FNAMES=SORTO21,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-21,C''')'/,
1:C' OUTFIL FNAMES=SORTO22,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-22,C''')'/,
1:C' OUTFIL FNAMES=SORTO23,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-23,C''')'/,
1:C' OUTFIL FNAMES=SORTO24,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-24,C''')'/,
1:C' OUTFIL FNAMES=SORTO25,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-25,C''')'/,
1:C' OUTFIL FNAMES=SORTO26,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-26,C''')'/,
1:C' OUTFIL FNAMES=SORTO27,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-27,C''')'/,
1:C' OUTFIL FNAMES=SORTO28,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-28,C''')'/,
1:C' OUTFIL FNAMES=SORTO29,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-29,C''')'/,
1:C' OUTFIL FNAMES=SORTO30,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-30,C''')'/,
1:C' OUTFIL FNAMES=SORTO31,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-31,C''')'/,
1:C' OUTFIL FNAMES=SORTO32,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-32,C''')'/,
1:C' OUTFIL FNAMES=SORTO33,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-33,C''')'/,
1:C' OUTFIL FNAMES=SORTO34,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-34,C''')'/,
1:C' OUTFIL FNAMES=SORTO35,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-35,C''')'/,
1:C' OUTFIL FNAMES=SORTO36,',
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-36,C''')',80:X),
REMOVECC,HEADER1=(' SORT FIELDS=COPY ')
/*
Gerry
Back to top
abhijit.nayak01 Active User Joined: 22 Mar 2009Posts: 161 Location: South Africa
Hi, I forgot to tell u that I have already tried this one and it ran successfully but here the performance issue comes into the picture. In the hard coded job it was taking 1 hour 25 minutes but the way suggested by u is taking 3.25 hours and i have the target to complete it within 2 hour....so please suggest me.
Thanks,
Abhijit.
Back to top
Craq Giegerich Senior Member Joined: 19 May 2007Posts: 1512 Location: Virginia, USA
Since the file names would have to change along with the dates in the control cards, I would suggest a simple little program to create the jcl and the sort control cards and submit the job.
Back to top
abhijit.nayak01 Active User Joined: 22 Mar 2009Posts: 161 Location: South Africa
can u plz suggest any idea for the simple program....
Thanks,
Abhijit.
Back to top
Craq Giegerich Senior Member Joined: 19 May 2007Posts: 1512 Location: Virginia, USA
That's what programming is all about. Once the solution is defined translating it into a programming language.
Back to top
dick scherrer Moderator Emeritus Joined: 23 Nov 2006Posts: 19244 Location: Inside the Matrix
Hello,
Do you have this running? Do you understand the solution? What have you coded so far?
If you get stuck, someone can probably help. . .
Consider that the only input this simple "front-end" process needs is the control date. All of the jcl and control statements can then be generated and written to the "internal reader". There are multiple topics in the forum about using the internal reader.
Back to top
gcicchet Senior Member Joined: 28 Jul 2006Posts: 1702 Location: Australia
Hi,
how can generating the sort card which takes less than 1 minute cause the job to run for an additional 2 hours, after all the statements are no different to the hard coded job.
I suggest you are not comparing apples with apples.
A quote from Robert Sample
Quote:
Elapsed time is more affected by system load, WLM definitions, I/O contention, paging, and so forth
Gerry
Back to top
enrico-sorichetti Superior Member Joined: 14 Mar 2007Posts: 10873 Location: italy
I hope that nobody complains...
here is a non sort solution to create the sort control cards
feel free to delete if it does not follow the dfsort forum standards
the rexx coding reflects the sort control statements not the topic text
here is a small REXX snippet to achieve what You ask for...
( quick and dirty non frills )
rexx script tested
Code:
/* REXX */
parse value date("S") with 1 year 5 month 7 .
sortc.0 = 37
sortc.1 = " SORT FIELDS=COPY"
do i = 1 to 36
d = date("S",(date("B",year!!right(month,2,"0")!!"01","S")-1) ,"B")
j = i + 1
sortc.j = " OUTFIL FNAMES=SORTO" !!,
right(i,2,"0") !! ,
",INCLUDE=(178,8,CH,EQ,C'" !! ,
d !! ,
"')"
month = month-1
if month = 0 then do
month = 12
year = year - 1
end
end
do i = 1 to sortc.0
say ">"sortc.i"<"
end
exit
here is the result of the test ( on my pc ), should run also on TSO
Code:
> SORT FIELDS=COPY<
> OUTFIL FNAMES=SORTO01,INCLUDE=(178,8,CH,EQ,C'20091031')<
> OUTFIL FNAMES=SORTO02,INCLUDE=(178,8,CH,EQ,C'20090930')<
> OUTFIL FNAMES=SORTO03,INCLUDE=(178,8,CH,EQ,C'20090831')<
> OUTFIL FNAMES=SORTO04,INCLUDE=(178,8,CH,EQ,C'20090731')<
> OUTFIL FNAMES=SORTO05,INCLUDE=(178,8,CH,EQ,C'20090630')<
> OUTFIL FNAMES=SORTO06,INCLUDE=(178,8,CH,EQ,C'20090531')<
> OUTFIL FNAMES=SORTO07,INCLUDE=(178,8,CH,EQ,C'20090430')<
> OUTFIL FNAMES=SORTO08,INCLUDE=(178,8,CH,EQ,C'20090331')<
> OUTFIL FNAMES=SORTO09,INCLUDE=(178,8,CH,EQ,C'20090228')<
> OUTFIL FNAMES=SORTO10,INCLUDE=(178,8,CH,EQ,C'20090131')<
> OUTFIL FNAMES=SORTO11,INCLUDE=(178,8,CH,EQ,C'20081231')<
> OUTFIL FNAMES=SORTO12,INCLUDE=(178,8,CH,EQ,C'20081130')<
> OUTFIL FNAMES=SORTO13,INCLUDE=(178,8,CH,EQ,C'20081031')<
> OUTFIL FNAMES=SORTO14,INCLUDE=(178,8,CH,EQ,C'20080930')<
> OUTFIL FNAMES=SORTO15,INCLUDE=(178,8,CH,EQ,C'20080831')<
> OUTFIL FNAMES=SORTO16,INCLUDE=(178,8,CH,EQ,C'20080731')<
> OUTFIL FNAMES=SORTO17,INCLUDE=(178,8,CH,EQ,C'20080630')<
> OUTFIL FNAMES=SORTO18,INCLUDE=(178,8,CH,EQ,C'20080531')<
> OUTFIL FNAMES=SORTO19,INCLUDE=(178,8,CH,EQ,C'20080430')<
> OUTFIL FNAMES=SORTO20,INCLUDE=(178,8,CH,EQ,C'20080331')<
> OUTFIL FNAMES=SORTO21,INCLUDE=(178,8,CH,EQ,C'20080229')<
> OUTFIL FNAMES=SORTO22,INCLUDE=(178,8,CH,EQ,C'20080131')<
> OUTFIL FNAMES=SORTO23,INCLUDE=(178,8,CH,EQ,C'20071231')<
> OUTFIL FNAMES=SORTO24,INCLUDE=(178,8,CH,EQ,C'20071130')<
> OUTFIL FNAMES=SORTO25,INCLUDE=(178,8,CH,EQ,C'20071031')<
> OUTFIL FNAMES=SORTO26,INCLUDE=(178,8,CH,EQ,C'20070930')<
> OUTFIL FNAMES=SORTO27,INCLUDE=(178,8,CH,EQ,C'20070831')<
> OUTFIL FNAMES=SORTO28,INCLUDE=(178,8,CH,EQ,C'20070731')<
> OUTFIL FNAMES=SORTO29,INCLUDE=(178,8,CH,EQ,C'20070630')<
> OUTFIL FNAMES=SORTO30,INCLUDE=(178,8,CH,EQ,C'20070531')<
> OUTFIL FNAMES=SORTO31,INCLUDE=(178,8,CH,EQ,C'20070430')<
> OUTFIL FNAMES=SORTO32,INCLUDE=(178,8,CH,EQ,C'20070331')<
> OUTFIL FNAMES=SORTO33,INCLUDE=(178,8,CH,EQ,C'20070228')<
> OUTFIL FNAMES=SORTO34,INCLUDE=(178,8,CH,EQ,C'20070131')<
> OUTFIL FNAMES=SORTO35,INCLUDE=(178,8,CH,EQ,C'20061231')<
> OUTFIL FNAMES=SORTO36,INCLUDE=(178,8,CH,EQ,C'20061130')<
here is the jcl stream ( modify according to Your needs )
jcl stream not tested
Code:
// ... JOB ...
//* CREATE THE PDS CONTAINING THE REXX SCRIPT
//CREATE EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSIN DD DUMMY
//SYSUT1 DD DATA,DLM=$$
/* REXX */
parse value date("S") with 1 year 5 month 7 .
sortc.0 = 37
sortc.1 = " SORT FIELDS=COPY"
do i = 1 to 36
d = date("S",(date("B",year!!right(month,2,"0")!!"01","S")-1) ,"B")
j = i + 1
sortc.j = " OUTFIL FNAMES=SORTO" !!,
right(i,2,"0") !! ,
",INCLUDE=(178,8,CH,EQ,C'" !! ,
d !! ,
"')"
month = month-1
if month = 0 then do
month = 12
year = year - 1
end
end
do i = 1 to sortc.0
say ">"sortc.i"<"
end
Address TSO "EXECIO" sortc.0 "DISKW SYSUT2 (STEM SORTC. FINIS"
exit
$$
//SYSUT2 DD DISP=(NEW,PASS),
// DSN=&&SCRIPT(MY),
// UNIT=SYSDA,SPACE=(TRK,(1,1,1))
// DCB=(RECFM=FB,LRECL=80)
//*
//* RUN THE REXX SCRIPT TO PREPARE THE SORT CONTROL CARDS
//IKJ EXEC PGM=IKJEFT01
//SYSPROC DD DISP=(OLD,PASS),
// DSN=&&SCRIPT
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
MY
//SYSUT2 DD DISP=(NEW,PASS),
// DSN=&&SORTCNTL,
// UNIT=SYSDA,SPACE=(TRK,(1,1))
// DCB=(RECFM=FB,LRECL=80)
//*
//* RUN YOUR SORT
//SORT EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//SORTIN DD DSN=TESTITN.S18.SARBANE.MNTHLY.NEW.RFMT,DISP=SHR
//SORTO01 DD DSN=TESTITN.NOV06.FILE1,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO02 DD DSN=TESTITN.NOV06.FILE2,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO03 DD DSN=TESTITN.NOV06.FILE3,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO04 DD DSN=TESTITN.NOV06.FILE4,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO05 DD DSN=TESTITN.NOV06.FILE5,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO06 DD DSN=TESTITN.NOV06.FILE6,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO07 DD DSN=TESTITN.NOV06.FILE7,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO08 DD DSN=TESTITN.NOV06.FILE8,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO09 DD DSN=TESTITN.NOV06.FILE9,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO10 DD DSN=TESTITN.NOV06.FILE10,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO11 DD DSN=TESTITN.NOV06.FILE11,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO12 DD DSN=TESTITN.NOV06.FILE12,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO13 DD DSN=TESTITN.NOV06.FILE13,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO14 DD DSN=TESTITN.NOV06.FILE14,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO15 DD DSN=TESTITN.NOV06.FILE15,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO16 DD DSN=TESTITN.NOV06.FILE16,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO17 DD DSN=TESTITN.NOV06.FILE17,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO18 DD DSN=TESTITN.NOV06.FILE18,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO19 DD DSN=TESTITN.NOV06.FILE19,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO20 DD DSN=TESTITN.NOV06.FILE20,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO21 DD DSN=TESTITN.NOV06.FILE21,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO22 DD DSN=TESTITN.NOV06.FILE22,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO23 DD DSN=TESTITN.NOV06.FILE23,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO24 DD DSN=TESTITN.NOV06.FILE24,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO25 DD DSN=TESTITN.NOV06.FILE25,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO26 DD DSN=TESTITN.NOV06.FILE26,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO27 DD DSN=TESTITN.NOV06.FILE27,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO28 DD DSN=TESTITN.NOV06.FILE28,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO29 DD DSN=TESTITN.NOV06.FILE29,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO30 DD DSN=TESTITN.NOV06.FILE30,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO31 DD DSN=TESTITN.NOV06.FILE31,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO32 DD DSN=TESTITN.NOV06.FILE32,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO33 DD DSN=TESTITN.NOV06.FILE33,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO34 DD DSN=TESTITN.NOV06.FILE34,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO35 DD DSN=TESTITN.NOV06.FILE35,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SORTO36 DD DSN=TESTITN.NOV06.FILE361,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
//SYSIN DD DISP=(OLD,PASS),DSN=&&SORTCNTL
Back to top
gcicchet Senior Member Joined: 28 Jul 2006Posts: 1702 Location: Australia
Hi Enrico,
but will it run less than 3.25 hours ?
Gerry
Back to top
gcicchet Senior Member Joined: 28 Jul 2006Posts: 1702 Location: Australia
Hi,
there is a correction to my code
Code:
C'INCLUDE=(178,8,CH,EQ,C''',DATE2-1,C''')',/,
should be
Code:
C'INCLUDE=(178,6,CH,EQ,C''',DATE2-1,C''')',/,
The 178,8 should be 178,6 for all the statements
Gerry
Back to top
enrico-sorichetti Superior Member Joined: 14 Mar 2007Posts: 10873 Location: italy
Hi Gerry !
I wonder what were the tests carried on by the TS
as usual the description does not match the coding ...
running the sort with Your first snippet should have given some kind of error
running with the proper card after Your correction might have certainly caused a greater elapsed, just for rewriting around 36 months of data instead of 36 days...
the 3 hours something might be reasonable since the data written is ~30 times the data as sampled in the original post.
let' s wait and see!
Back to top
Skolusu Senior Member Joined: 07 Dec 2007Posts: 2205 Location: San Jose
abhijit.nayak01,
The following DFSORT JCL will give you the desired results.
Code:
//STEP0100 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD *
DUMMY RECORD
//SORTOUT DD DSN=&&C1,DISP=(,PASS),SPACE=(TRK,(1,1),RLSE)
//SYSIN DD *
OPTION COPY
INREC IFTHEN=(WHEN=INIT,BUILD=(1:DATE2,10:DATE2-12,
20:DATE2-24,30:DATE2-36,40:4X)),
IFTHEN=(WHEN=INIT,OVERLAY=(140:1,4,ZD,MOD,+4,EDIT=(T),
141:1,4,ZD,MOD,+100,EDIT=(TTT),144:1,4,ZD,MOD,+400,EDIT=(TTT))),
IFTHEN=(WHEN=INIT,OVERLAY=(150:10,4,ZD,MOD,+4,EDIT=(T),
151:10,4,ZD,MOD,+100,EDIT=(TTT),154:10,4,ZD,MOD,+400,EDIT=(TTT))),
IFTHEN=(WHEN=INIT,OVERLAY=(160:20,4,ZD,MOD,+4,EDIT=(T),
161:20,4,ZD,MOD,+100,EDIT=(TTT),164:20,4,ZD,MOD,+400,EDIT=(TTT))),
IFTHEN=(WHEN=INIT,OVERLAY=(170:30,4,ZD,MOD,+4,EDIT=(T),
171:30,4,ZD,MOD,+100,EDIT=(TTT),174:30,4,ZD,MOD,+400,EDIT=(TTT))),
IFTHEN=(WHEN=(144,3,ZD,EQ,0,OR,(140,1,ZD,EQ,0,AND,141,3,ZD,GT,0)),
OVERLAY=(40:C'L'),HIT=NEXT),
IFTHEN=(WHEN=(154,3,ZD,EQ,0,OR,(150,1,ZD,EQ,0,AND,151,3,ZD,GT,0)),
OVERLAY=(41:C'L'),HIT=NEXT),
IFTHEN=(WHEN=(164,3,ZD,EQ,0,OR,(160,1,ZD,EQ,0,AND,161,3,ZD,GT,0)),
OVERLAY=(42:C'L'),HIT=NEXT),
IFTHEN=(WHEN=(174,3,ZD,EQ,0,OR,(170,1,ZD,EQ,0,AND,171,3,ZD,GT,0)),
OVERLAY=(43:C'L'))
OUTREC BUILD=(81:1,4,10,4,20,4,30,4,40,4)
OUTFIL REPEAT=37,IFOUTLEN=80,
IFTHEN=(WHEN=INIT,BUILD=(3:C'OUTFIL FNAMES=SORTOF',
SEQNUM,2,ZD,START=0,INCR=1,C',INCLUDE=(178,8,CH,EQ,C''',
DATE2,2X,C'''',C')',81:81,20)),
IFTHEN=(WHEN=(23,2,ZD,EQ,00),OVERLAY=(03:C'OPTION COPY',80X)),
IFTHEN=(WHEN=(23,2,ZD,EQ,01),OVERLAY=(49:DATE2-01),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,02),OVERLAY=(49:DATE2-02),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,03),OVERLAY=(49:DATE2-03),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,04),OVERLAY=(49:DATE2-04),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,05),OVERLAY=(49:DATE2-05),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,06),OVERLAY=(49:DATE2-06),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,07),OVERLAY=(49:DATE2-07),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,08),OVERLAY=(49:DATE2-08),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,09),OVERLAY=(49:DATE2-09),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,10),OVERLAY=(49:DATE2-10),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,11),OVERLAY=(49:DATE2-11),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,12),OVERLAY=(49:DATE2-12),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,13),OVERLAY=(49:DATE2-13),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,14),OVERLAY=(49:DATE2-14),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,15),OVERLAY=(49:DATE2-15),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,16),OVERLAY=(49:DATE2-16),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,17),OVERLAY=(49:DATE2-17),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,18),OVERLAY=(49:DATE2-18),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,19),OVERLAY=(49:DATE2-19),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,20),OVERLAY=(49:DATE2-20),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,21),OVERLAY=(49:DATE2-21),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,22),OVERLAY=(49:DATE2-22),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,23),OVERLAY=(49:DATE2-23),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,24),OVERLAY=(49:DATE2-24),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,25),OVERLAY=(49:DATE2-25),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,26),OVERLAY=(49:DATE2-26),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,27),OVERLAY=(49:DATE2-27),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,28),OVERLAY=(49:DATE2-28),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,29),OVERLAY=(49:DATE2-29),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,30),OVERLAY=(49:DATE2-30),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,31),OVERLAY=(49:DATE2-31),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,32),OVERLAY=(49:DATE2-32),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,33),OVERLAY=(49:DATE2-33),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,34),OVERLAY=(49:DATE2-34),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,35),OVERLAY=(49:DATE2-35),HIT=NEXT),
IFTHEN=(WHEN=(23,2,ZD,EQ,36),OVERLAY=(49:DATE2-36),HIT=NEXT),
IFTHEN=(WHEN=(53,2,ZD,EQ,01),OVERLAY=(55:C'31'),HIT=NEXT),
IFTHEN=(WHEN=(53,2,ZD,EQ,02),OVERLAY=(55:C'28'),HIT=NEXT),
IFTHEN=(WHEN=(53,2,ZD,EQ,03),OVERLAY=(55:C'31'),HIT=NEXT),
IFTHEN=(WHEN=(53,2,ZD,EQ,04),OVERLAY=(55:C'30'),HIT=NEXT),
IFTHEN=(WHEN=(53,2,ZD,EQ,05),OVERLAY=(55:C'31'),HIT=NEXT),
IFTHEN=(WHEN=(53,2,ZD,EQ,06),OVERLAY=(55:C'30'),HIT=NEXT),
IFTHEN=(WHEN=(53,2,ZD,EQ,07),OVERLAY=(55:C'31'),HIT=NEXT),
IFTHEN=(WHEN=(53,2,ZD,EQ,08),OVERLAY=(55:C'31'),HIT=NEXT),
IFTHEN=(WHEN=(53,2,ZD,EQ,09),OVERLAY=(55:C'30'),HIT=NEXT),
IFTHEN=(WHEN=(53,2,ZD,EQ,10),OVERLAY=(55:C'31'),HIT=NEXT),
IFTHEN=(WHEN=(53,2,ZD,EQ,11),OVERLAY=(55:C'30'),HIT=NEXT),
IFTHEN=(WHEN=(53,2,ZD,EQ,12),OVERLAY=(55:C'31'),HIT=NEXT),
IFTHEN=(WHEN=(49,4,ZD,EQ,81,4,ZD,AND,
53,2,ZD,EQ,2,AND,97,1,CH,EQ,C'L'),OVERLAY=(55:C'29'),HIT=NEXT),
IFTHEN=(WHEN=(49,4,ZD,EQ,85,4,ZD,AND,
53,2,ZD,EQ,2,AND,98,1,CH,EQ,C'L'),OVERLAY=(55:C'29'),HIT=NEXT),
IFTHEN=(WHEN=(49,4,ZD,EQ,89,4,ZD,AND,
53,2,ZD,EQ,2,AND,99,1,CH,EQ,C'L'),OVERLAY=(55:C'29'),HIT=NEXT),
IFTHEN=(WHEN=(49,4,ZD,EQ,93,4,ZD,AND,
53,2,ZD,EQ,2,AND,100,1,CH,EQ,C'L'),OVERLAY=(55:C'29'))
//*
//STEP0200 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=TESTITN.S18.SARBANE.MNTHLY.NEW.RFMT,DISP=SHR
//*
//SORTOF01 DD DSN=TESTITN.NOV06.FILE01,
// DISP=(NEW,CATLG,DELETE,UNIT=SYSDA,
// SPACE=(CYL,(X,Y),RLSE)
//*
//SORTOF02 DD DSN=TESTITN.NOV06.FILE02,
// DISP=(NEW,CATLG,DELETE,UNIT=SYSDA,
// SPACE=(CYL,(X,Y),RLSE)
//*
//SORTOF03 DD DSN=TESTITN.NOV06.FILE03,
// DISP=(NEW,CATLG,DELETE,UNIT=SYSDA,
// SPACE=(CYL,(X,Y),RLSE)
//*
//SORTOF04 DD DSN=TESTITN.NOV06.FILE04,
// DISP=(NEW,CATLG,DELETE,UNIT=SYSDA,
// SPACE=(CYL,(X,Y),RLSE)
//*
...code all your outfil names here
//SORTOF36 DD DSN=TESTITN.NOV06.FILE36,
// DISP=(NEW,CATLG,DELETE,UNIT=SYSDA,
// SPACE=(CYL,(X,Y),RLSE)
//*
//SYSIN DD DSN=&&C1,DISP=SHR
Back to top
abhijit.nayak01 Active User Joined: 22 Mar 2009Posts: 161 Location: South Africa
Hi,
Thanks for all your updates and I completed the task from your valuable inputs. I putted the sort card by using cobol program and it took 1.42 hour. Check the below code and let me know if any further tuning can be done.
Code:
PROGRAM:
000110 INPUT-OUTPUT SECTION.
000120 FILE-CONTROL.
000130 SELECT SORT-FILE ASSIGN TO SORTWK.
000140 DATA DIVISION.
000150 FILE SECTION.
000160 FD SORT-FILE
000170 BLOCK CONTAINS 0 RECORDS
000180 RECORDING MODE IS F
000190 LABEL RECORDS ARE STANDARD
000200 DATA RECORD IS SORT-FILE-REC.
000210 01 SORT-FILE-REC.
000220 02 SORT-OUTFIL PIC X(23).
000230 02 SORT-COUNTER PIC 9(02).
000240 02 SORT-INCLUDE PIC X(24).
000250 02 SORT-DATE PIC 9(08).
000260 02 SORT-CHAR PIC X(02).
000270 02 SORT-FILLER PIC X(21).
000280 WORKING-STORAGE SECTION.
000290 01 WS-SORT-FILE-REC.
000300 02 WS-OUTFIL PIC X(23).
000310 02 WS-COUNTER PIC 9(02).
000320 02 WS-INCLUDE PIC X(24).
000330 02 WS-DATE PIC 9(08).
000340 02 WS-CHAR PIC X(02).
000350 02 WS-FILLER PIC X(21).
000360 *PXP
000370 01 WS-SORT-COPY PIC X(80) VALUE ' SORT FIELDS=COPY'.
000380 *PXP
000390 01 WS-SORT-OUTFIL PIC X(23) VALUE ' OUTFIL FNAMES=SORTO'.
000400 01 WS-SORT-CTR PIC 9(02).
000410 01 WS-SORT-INCLUDE PIC X(24)
000420 VALUE ',INCLUDE=(178,8,CH,EQ,C'''.
000430 01 WS-SORT-CHAR PIC X(02) VALUE ''')'.
000440 01 WS-CURR-DATE PIC 9(08).
000450 01 WS-SORT-DATE REDEFINES WS-CURR-DATE.
000460 05 WS-DATE-CC PIC 9(02).
000470 05 WS-DATE-YY PIC 9(02).
000480 05 WS-DATE-MM PIC 9(02).
000490 05 WS-DATE-DD PIC 9(02).
000500 01 WS-QUOTIENT PIC 9(02).
000510 01 WS-REMAINDER PIC 9(02).
000520 PROCEDURE DIVISION.
000530 PERFORM OPEN-PARA.
000540 PERFORM FIRST-WRITE-PARA.
000550 PERFORM MAIN-PARA.
000560 PERFORM CLOSE-PARA.
000570 STOP RUN.
000580 OPEN-PARA.
000590 OPEN OUTPUT SORT-FILE.
000600 * END OPEN-PARA.
000610 * FIRST-MOVE-PARA.
000620 * MOVE 'SORT FIELDS=COPY' TO SORT-FILE-REC.
000630 * PERFORM WRITE-PARA.
000640 * END FIRST-MOVE-PARA.
000650 MAIN-PARA.
000660 MOVE FUNCTION CURRENT-DATE(1:8) TO WS-CURR-DATE.
000670 MOVE 01 TO WS-SORT-CTR.
000680 PERFORM CALC-DATE-PARA UNTIL WS-SORT-CTR = 37.
000690 * END MAIN-PARA.
000700 CALC-DATE-PARA.
000710 SUBTRACT 01 FROM WS-DATE-MM.
000720 IF WS-DATE-MM = ZERO
000730 MOVE 12 TO WS-DATE-MM
000740 SUBTRACT 01 FROM WS-DATE-YY.
000750 EVALUATE WS-DATE-MM
000760 WHEN 01 MOVE 31 TO WS-DATE-DD
000770 WHEN 02 PERFORM LEAP-YEAR-PARA
000780 WHEN 03 MOVE 31 TO WS-DATE-DD
000790 WHEN 04 MOVE 30 TO WS-DATE-DD
000800 WHEN 05 MOVE 31 TO WS-DATE-DD
000810 WHEN 06 MOVE 30 TO WS-DATE-DD
000820 WHEN 07 MOVE 31 TO WS-DATE-DD
000830 WHEN 08 MOVE 31 TO WS-DATE-DD
000840 WHEN 09 MOVE 30 TO WS-DATE-DD
000850 WHEN 10 MOVE 31 TO WS-DATE-DD
000860 WHEN 11 MOVE 30 TO WS-DATE-DD
000870 WHEN 12 MOVE 31 TO WS-DATE-DD.
000880 PERFORM MAIN-MOVE-PARA.
000890 PERFORM MAIN-WRITE-PARA.
000900 ADD 1 TO WS-SORT-CTR.
000910 * END CALC-DATE-PARA.
000920 MAIN-MOVE-PARA.
000930 INITIALIZE WS-SORT-FILE-REC.
000940 MOVE WS-SORT-OUTFIL TO WS-OUTFIL.
000950 MOVE WS-SORT-CTR TO WS-COUNTER.
000960 MOVE WS-SORT-INCLUDE TO WS-INCLUDE.
000970 MOVE WS-SORT-DATE TO WS-DATE.
000980 MOVE WS-SORT-CHAR TO WS-CHAR.
000990 * END MAIN-MOVE-PARA.
001000 FIRST-WRITE-PARA.
001010 WRITE SORT-FILE-REC FROM WS-SORT-COPY.
001020 * END FIRST-WRITE-PARA.
001030 MAIN-WRITE-PARA.
001040 WRITE SORT-FILE-REC FROM WS-SORT-FILE-REC.
001050 * END WRITE-PARA.
001060 LEAP-YEAR-PARA.
001070 IF WS-DATE-YY EQUAL ZERO
001080 DIVIDE WS-DATE-CC BY 4
001090 GIVING WS-QUOTIENT REMAINDER WS-REMAINDER
001100 ELSE
001110 DIVIDE WS-DATE-YY BY 4
001120 GIVING WS-QUOTIENT REMAINDER WS-REMAINDER
001130 END-IF.
001140 IF WS-REMAINDER EQUAL ZERO
001150 MOVE 29 TO WS-DATE-DD
001160 ELSE
001170 MOVE 28 TO WS-DATE-DD
001180 END-IF.
001190 * END LEAP-YEAR-PARA.
001200 CLOSE-PARA.
001210 CLOSE SORT-FILE.
001220 * END CLOSE-PARA.
**************************************************
JOB
005310 //ITSORT EXEC PGM=ITSORT
005320 //STEPLIB DD DSN=TEST.LINKLIB,
005330 // DISP=SHR
005340 //SORTWK DD DSN=TESTITN.SORT.TEST,DISP=(NEW,CATLG,DELETE),
005341 //*SORTWK DD DSN=&&SORTCARD,
005342 //* DISP=(NEW,PASS),
005350 // UNIT=SYSDA,SPACE=(TRK,(1,1)),
005360 // DCB=(RECFM=FB,LRECL=80)
005400 //SYSOUT DD SYSOUT=*
005500 //SYSPRINT DD SYSOUT=*
005600 //SORT1 EXEC PGM=SORT
005700 //SYSOUT DD SYSOUT=*
005800 //DFSMSG DD SYSOUT=*
005900 //SORTIN DD DSN=TESTITN.S18.SARBANE.MNTHLY.NEW.RFMT,DISP=SHR
006000 //SORTO01 DD DSN=TESTITN.SARBANE.FILE01.OCTAC,
006100 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
006200 //SORTO02 DD DSN=TESTITN.SARBANE.FILE02.OCTAC,
006300 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
006400 //SORTO03 DD DSN=TESTITN.SARBANE.FILE03.OCTAC,
006500 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
006600 //SORTO04 DD DSN=TESTITN.SARBANE.FILE04.OCTAC,
006700 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
006800 //SORTO05 DD DSN=TESTITN.SARBANE.FILE05.OCTAC,
006900 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
007000 //SORTO06 DD DSN=TESTITN.SARBANE.FILE06.OCTAC,
007100 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
007200 //SORTO07 DD DSN=TESTITN.SARBANE.FILE07.OCTAC,
007300 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
007400 //SORTO08 DD DSN=TESTITN.SARBANE.FILE08.OCTAC,
007500 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
007600 //SORTO09 DD DSN=TESTITN.SARBANE.FILE09.OCTAC,
007700 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
007800 //SORTO10 DD DSN=TESTITN.SARBANE.FILE10.OCTAC,
007900 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
008000 //SORTO11 DD DSN=TESTITN.SARBANE.FILE11.OCTAC,
008100 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
008200 //SORTO12 DD DSN=TESTITN.SARBANE.FILE12.OCTAC,
008300 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
008400 //SORTO13 DD DSN=TESTITN.SARBANE.FILE13.OCTAC,
008500 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
008600 //SORTO14 DD DSN=TESTITN.SARBANE.FILE14.OCTAC,
008700 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
008800 //SORTO15 DD DSN=TESTITN.SARBANE.FILE15.OCTAC,
008900 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
009000 //SORTO16 DD DSN=TESTITN.SARBANE.FILE16.OCTAC,
009100 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
009200 //SORTO17 DD DSN=TESTITN.SARBANE.FILE17.OCTAC,
009300 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
009400 //SORTO18 DD DSN=TESTITN.SARBANE.FILE18.OCTAC,
009500 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
009600 //SORTO19 DD DSN=TESTITN.SARBANE.FILE19.OCTAC,
009700 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
009800 //SORTO20 DD DSN=TESTITN.SARBANE.FILE20.OCTAC,
009900 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
010000 //SORTO21 DD DSN=TESTITN.SARBANE.FILE21.OCTAC,
010100 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
010200 //SORTO22 DD DSN=TESTITN.SARBANE.FILE22.OCTAC,
010300 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
010400 //SORTO23 DD DSN=TESTITN.SARBANE.FILE23.OCTAC,
010500 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
010600 //SORTO24 DD DSN=TESTITN.SARBANE.FILE24.OCTAC,
010700 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
010800 //SORTO25 DD DSN=TESTITN.SARBANE.FILE25.OCTAC,
010900 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
011000 //SORTO26 DD DSN=TESTITN.SARBANE.FILE26.OCTAC,
011100 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
011200 //SORTO27 DD DSN=TESTITN.SARBANE.FILE27.OCTAC,
011300 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
011400 //SORTO28 DD DSN=TESTITN.SARBANE.FILE28.OCTAC,
011500 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
011600 //SORTO29 DD DSN=TESTITN.SARBANE.FILE29.OCTAC,
011700 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
011800 //SORTO30 DD DSN=TESTITN.SARBANE.FILE30.OCTAC,
011900 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
012000 //SORTO31 DD DSN=TESTITN.SARBANE.FILE31.OCTAC,
012100 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
012200 //SORTO32 DD DSN=TESTITN.SARBANE.FILE32.OCTAC,
012300 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
012400 //SORTO33 DD DSN=TESTITN.SARBANE.FILE33.OCTAC,
012500 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
012600 //SORTO34 DD DSN=TESTITN.SARBANE.FILE34.OCTAC,
012700 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
012800 //SORTO35 DD DSN=TESTITN.SARBANE.FILE35.OCTAC,
012900 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
013000 //SORTO36 DD DSN=TESTITN.SARBANE.FILE36.OCTAC,
013100 // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,LRECL=899
013200 //*SYSIN DD DSN=&&SORTCARD,DISP=(OLD,PASS)
013300 //SYSIN DD DSN=TESTITN.SORT.TEST,DISP=SHR
Back to top
enrico-sorichetti Superior Member Joined: 14 Mar 2007Posts: 10873 Location: italy
this topic is really going down the sink...
why do You believe that changing the method for the generation of the sort control card should change the overall performace of Your jcl...
look at the job output read the cpu/elapsed of --
a) the step which generates the control cards
b) the sort step itself
compare it to the cpu/elapsed of a sort whith the hand written control cards
and meditate, please, meditate ...
Back to top
abhijit.nayak01 Active User Joined: 22 Mar 2009Posts: 161 Location: South Africa
Hi can anybody suggest me:
AFTER CHANGE
PROGRAM CC ELAPSED CPU RESIDENT SWAP SERV. PAGE DISK TAPE
NAME HH:MM:SS MMM:SS.TH HH:MM:SS CNT UNITS IN+OUT IO'S IO'S
U**** 0 0:00:03 000:00.20 0:00:03 0 6469 0 0 0
ITSORT 0 0:00:00 000:00.01 0:00:00 0 293 0 31 0
SORT 0 1:28:20 024:33.60 1:28:20 0 47969K 0 1139K 87461
BEFORE CHANGE
PROGRAM CC ELAPSED CPU RESIDENT SWAP SERV. PAGE DISK TAPE
NAME HH:MM:SS MMM:SS.TH HH:MM:SS CNT UNITS IN+OUT IO'S IO'S
U**** 0 0:00:00 000:00.01 0:00:00 0 485 0 0 0
I**** 0 2:22:08 023:03.56 2:22:08 0 45604K 0 1159K 5684K
Here after change refers to the run after including the new program mentioned in previous page.check this and please suggest me whether the after change is good or the before change.
Back to top
enrico-sorichetti Superior Member Joined: 14 Mar 2007Posts: 10873 Location: italy
ok... lety' s start over again...
You have a sort step ? OK
before
You hand write/modify the needed sort control cards OK
You run the sort step with the <hand written/modified> sort control cards OK
after
instead of writing/modifying the sort control cards by hand You generate them with a <program> OK
I assume that You checked/inspected the <program generated> control cards for correctness
and found that they were exactly the same cards that You would have written/modified by hand OK
You run the sort step with the <program generated> sort control cards OK
what reason do You have to believe that the two sort steps would behave differently
from a resource consumption point of view ( not elapsed )
given that the elapsed and resurce consumption of the <generating program> is negligible
Back to top
Robert Sample Global Moderator Joined: 06 Jun 2008Posts: 8696 Location: Dubuque, Iowa, USA
How are you defining "good"? If I'm reading your post right (you really should use BBcode to post anything from the computer -- it keeps the columns aligned), elapsed time went from 2 hours 22 minutes 8 seconds to 1 hour 28 minutes 20 seconds, while CPU time went from 23 minutes 3.56 seconds to 24 minutes 33.6 seconds. If "good" means reducing the overall time the job takes, the after is better. If "good" means reducing CPU usage, then the before is better. Define your term and then you can choose which is better -- but not before defining!
Back to top
Please enable JavaScript!