View previous topic :: View next topic
Author
Message
Karthikeyan Subbarayan New User Joined: 24 Feb 2008Posts: 62 Location: Boston
Hi,
I have a requirement to sort like below.
the First character will be either "B" or "D". I need to do sort based on the "FUND" but the FUND will be available only in "B" record.
The link between "B" and "D" is Account number.
Input Record will be like below:
Code:
BACCOUNT1FUND1
BACCOUNT2FUND2
BACCOUNT3FUND1
DACCOUNT3DATE01
DACCOUNT3DATE02
BACCOUNT4FUND1
BACCOUNT5FUND2
DACCOUNT5DATE01
BACCOUNT6FUND1
Output record should be like below:
Code:
BACCOUNT1FUND1
BACCOUNT3FUND1
DACCOUNT3DATE01
DACCOUNT3DATE02
BACCOUNT4FUND1
BACCOUNT6FUND1
BACCOUNT2FUND2
BACCOUNT5FUND2
DACCOUNT5DATE01
Back to top
mistah kurtz Active User Joined: 28 Jan 2012Posts: 316 Location: Room: TREE(3). Hilbert's Hotel
Will your 'D' record corresponding to the 'B' record always come immediately after? I mean your data will always be the way you have shown or it could be jumbled up like this:
Code:
BACCOUNT1FUND1
BACCOUNT2FUND2
BACCOUNT3FUND1
DACCOUNT5DATE01
BACCOUNT4FUND1
BACCOUNT5FUND2
DACCOUNT3DATE01
BACCOUNT6FUND1
DACCOUNT3DATE02
Back to top
Pandora-Box Global Moderator Joined: 07 Sep 2006Posts: 1592 Location: Andromeda Galaxy
Hi
Try this
Code:
//SYSIN DD *
OPTION EQUALS
INREC IFTHEN=(WHEN=GROUP,BEGIN=(2,7,CH,EQ,C'ACCOUNT',AND,
10,4,CH,EQ,C'FUND'),
PUSH=(20:2,15))
SORT FIELDS=(28,5,CH,A,20,8,CH,A)
OUTREC FIELDS=(1:1,19,61X)
Back to top
mistah kurtz Active User Joined: 28 Jan 2012Posts: 316 Location: Room: TREE(3). Hilbert's Hotel
Assuming that your data could be in any order and LRECL=20 and RECFM=20, you can try this SORT card:
Code:
//SYSIN DD *
SORT FIELDS=(2,8,CH,A,1,1,CH,A)
OUTREC IFTHEN=(WHEN=GROUP,BEGIN=(1,1,CH,EQ,C'B'),PUSH=(21:10,5))
SORT FIELDS=(21,5,CH,A)
OUTFIL BUILD=(1,20)
/*
Back to top
Karthikeyan Subbarayan New User Joined: 24 Feb 2008Posts: 62 Location: Boston
hi,
Thanks for the reply !!
The Detail record will always come after balance record,
I got the answer with the below code
Code:
//SYSIN DD *
INREC IFTHEN=(WHEN=GROUP,BEGIN=(1,1,CH,EQ,C'B'),
PUSH=(21:10,5))
SORT FIELDS=(21,5,CH,A)
OUTREC BUILD=(1,20)
/*
I never knew in push we can use on the field values, so for i have used unique id only with this comment. thanks for the support
Back to top
Pandora-Box Global Moderator Joined: 07 Sep 2006Posts: 1592 Location: Andromeda Galaxy
Hi Just modified the code slightly to get your expected output
Code:
OPTION EQUALS
INREC IFTHEN=(WHEN=GROUP,BEGIN=(1,1,CH,EQ,C'B'),
PUSH=(21:10,5))
SORT FIELDS=(21,5,CH,A,2,8,CH,A)
OUTREC BUILD=(1,20)
Back to top
Please enable JavaScript!