|
|
| Author |
Message |
Pratikshya
New User
Joined: 08 Aug 2007 Posts: 2 Location: Kolkata
|
|
|
|
Hi,
I have a file which has records with different record types i.e for a single account number we can have record type 1,3,5,7,12. For example :
Account Number Rec-Type
001 01
001 03
001 12
002 01
002 07
007 01
008 01
008 05
Now for any account number, a record with record-type 1 is mandatory.Other record-type may or maynot be present. All record-type
have different layout and have only account number and rec-type as the common fields.
My requirement is that I need to check the account number for record-type 1 is satisfying some condition or not.If is is then I need to get the other record-type records for that particular account.
For ex. Lets say we have a field in Record-type 1 layout called "Minimum".
Say I check whether for account number 001 the Minimum > 10 or not.
If the Minimum for account number 001 > 10 then I need the record-type 3 and record-type 12 for the account.
Is there any way we can use SORT to get such records ? |
|
| Back to top |
|
 |
References
|
|
 |
Vasukip Currently Banned New User
Joined: 17 Jun 2008 Posts: 48 Location: Chennai
|
|
|
|
Hi,
Can you provide some sample Input Output for this ? |
|
| Back to top |
|
 |
Skolusu
DFSORT Developer
Joined: 07 Dec 2007 Posts: 357 Location: San Jose
|
|
|
|
Pratikshya,
The following DFSORT/ICETOOL JCL will give you the desired results. I assumed that the input file FB recfm and 80 bytes in lrecl and record type starts in pos 5 and is byte in length and the MINIMUM field starts in pos 15 and also 2 bytes
| Code: |
//STEP0100 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD *
001 01 20
001 03
001 12
002 01 05
002 07
007 01 15
008 01 50
008 03
008 12
//OUT DD SYSOUT=*
//TOOLIN DD *
SPLICE FROM(IN) TO(OUT) ON(81,8,CH) KEEPNODUPS WITHALL -
WITH(1,80) KEEPBASE USING(CTL1)
//CTL1CNTL DD *
INREC IFTHEN=(WHEN=INIT,OVERLAY=(81:SEQNUM,8,ZD)),
IFTHEN=(WHEN=(5,2,CH,EQ,C'01'),OVERLAY=(81:SEQNUM,8,ZD,5,2,15,2)),
IFTHEN=(WHEN=NONE,OVERLAY=(89:SEQNUM,8,ZD,
81:81,8,ZD,SUB,89,8,ZD,M11,LENGTH=8))
SORT FIELDS=COPY
OUTFIL FNAMES=OUT,BUILD=(1,80),
INCLUDE=(91,2,ZD,GT,10,AND,5,2,SS,EQ,C'03,12')
/*
|
The output from this job is
| Code: |
001 03
001 12
008 03
008 12
|
Hope this helps...
Cheers |
|
| Back to top |
|
 |
Pratikshya
New User
Joined: 08 Aug 2007 Posts: 2 Location: Kolkata
|
|
|
|
| Thanks a lot |
|
| Back to top |
|
 |
Frank Yaeger
DFSORT Moderator
Joined: 15 Feb 2005 Posts: 4613 Location: San Jose, CA
|
|
|
|
You can do this kind of thing more easily with the new WHEN=GROUP function of DFSORT available with z/OS DFSORT V1R5 PTF UK90013 (July, 2008) like this:
| Code: |
//S1 EXEC PGM=ICEMAN
//SYSOUT DD SYSOUT=*
//SORTIN DD *
001 01 20
001 03
001 12
002 01 05
002 07
007 01 15
008 01 50
008 03
008 12
/*
//SORTOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
INREC IFTHEN=(WHEN=GROUP,BEGIN=(5,2,CH,EQ,C'01'),
PUSH=(81:15,2))
OUTFIL INCLUDE=(81,2,ZD,GT,10,AND,5,2,SS,EQ,C'03,12'),
BUILD=(1,80)
/*
|
For complete details on the WHEN=GROUP function and the other new functions available with PTF UK90013, see:
www.ibm.com/systems/support/storage/software/sort/mvs/ugpf/ |
|
| Back to top |
|
 |
|
|
|