View previous topic :: View next topic
Author
Message
rz061m New User Joined: 03 Mar 2006Posts: 48 Location: Chennai
Hi,
I have a report file as given below.
CUSTOMER CLIENT GROUP GRP EFF GRP TERM
------------------------------------------------------------------------------------
0000000000 CDHP0000000000 TST6PVM001 20080101 99991231
--->PENDING CODES: 033 032
0000000000 CDHP0000000000 TST6PVM002 20080101 99991231
--->PENDING CODES: 033 032
0000000000 CDHP0000000000 TST6PVM003 20080101 99991231
--->PENDING CODES: 033 032
03012007 CDHPGAWGAHRA TESG90M001 20070301 99991231
--->PENDING CODES: 033 032
ABC CDHPXYZ GRP11 20070101 20070301
--->PENDING CODES: 033 032
ABCD CDHPPQRS DMDL002 20070101 99991231
--->PENDING CODES: 033 032
CA CDHPGROUPHIA 170041M012 20070701 99991231
--->PENDING CODES: 060
CA CDHPGROUPHIA 170041M013 20070701 99991231
--->PENDING CODES: 060
CA CDHPGROUPHIA 170041M014 20070701 99991231
--->PENDING CODES: 060
When i give the value 'TST6PVM001' in the include condition; my output file should contain the record with this Group and the next record with pending codes. So for the above example the output should look like
0000000000 CDHP0000000000 TST6PVM001 20080101 99991231
--->PENDING CODES: 033 032
All the starting positions are standard and will remain same for all. Here the group field begins only at 31st position.
Please provide me with the sort/icetool to solve this. Any other alternatives are also appreciated.
Thanks,
Karthik. P
Back to top
karthikr44 Active User Joined: 25 Aug 2007Posts: 235 Location: Chennai
HI,
The following sort card wil give u solution. I assumed the grp field at 31, and lrecl as 133.
Code:
//STEP0100 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD DSN=DEV2.RK.TEST(@@CASE),DISP=SHR
//OUT DD DSN=DEV2.RK.TEST(@@CASE1),DISP=SHR
//TOOLIN DD *
SELECT FROM(IN) TO(OUT) ON(134,8,CH) ALLDUPS USING(CTL1)
//CTL1CNTL DD *
INREC IFTHEN=(WHEN=INIT,
OVERLAY=(134:SEQNUM,8,ZD)),
IFTHEN=(WHEN=(31,10,CH,EQ,C'TST6PVM001'),
OVERLAY=(134:+1,ADD,134,8,ZD,M11,LENGTH=8))
OUTFIL FNAMES=OUT,BUILD=(01,133)
/*
INPUT:
Code:
0000000000 CDHP0000000000 TST6PVM001 20080101 99991231
--->PENDING CODES: 033 032
0000000000 CDHP0000000000 TST6PVM002 20080101 99991231
--->PENDING CODES: 033 032
0000000000 CDHP0000000000 TST6PVM003 20080101 99991231
--->PENDING CODES: 033 032
03012007 CDHPGAWGAHRA TESG90M001 20070301 99991231
--->PENDING CODES: 033 032
Output:
Code:
0000000000 CDHP0000000000 TST6PVM001 20080101 99991231
--->PENDING CODES: 033 032
Regards
R KARTHIK
Back to top
rz061m New User Joined: 03 Mar 2006Posts: 48 Location: Chennai
Thanks Karthik.
I have one more query; is it possible to have mulitple check in the when condition using OR operator or SS option.
IFTHEN=(WHEN=(31,10,CH,EQ,C'TST6PVM001') --> what if i need one more group to check.
Thanks,
Karthik. P
Back to top
krisprems Active Member Joined: 27 Nov 2006Posts: 649 Location: India
rz061m wrote:
Thanks Karthik.
I have one more query; is it possible to have mulitple check in the when condition using OR operator or SS option.
IFTHEN=(WHEN=(31,10,CH,EQ,C'TST6PVM001') --> what if i need one more group to check.
Thanks,
Karthik. P
Did you try using OR operator or SS option? Did you face any problems?
Back to top
karthikr44 Active User Joined: 25 Aug 2007Posts: 235 Location: Chennai
Hi,
U can use the substring option for multiple conditions like below.
Code:
//CTL1CNTL DD *
INREC IFTHEN=(WHEN=INIT,
OVERLAY=(134:SEQNUM,8,ZD)),
IFTHEN=(WHEN=(31,10,SS,EQ,C'TST6PVM001,TST6PVM002'),
OVERLAY=(134:+1,ADD,134,8,ZD,M11,LENGTH=8))
OUTFIL FNAMES=OUT,BUILD=(01,133)
/*
Regards
R KARTHIK
Back to top
Frank Yaeger DFSORT Developer Joined: 15 Feb 2005Posts: 7129 Location: San Jose, CA
You can now do this more easily and efficiently with the new WHEN=GROUP function available with z/OS DFSORT V1R5 PTF UK90013 (July, 2008) as follows:
Code:
//S1 EXEC PGM=ICEMAN
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=... input file (FB/133)
//SORTOUT DD DSN=... output file (FB/133)
//SYSIN DD *
OPTION COPY
INREC IFTHEN=(WHEN=GROUP,
BEGIN=(31,10,SS,EQ,C'TST6PVM001,TST6PVM002'),
RECORDS=2,
PUSH=(134:ID=1))
OUTFIL INCLUDE=(134,1,CH,NE,C' '),BUILD=(1,133)
/*
For complete details on the new WHEN=GROUP function and the other new functions available with PTF UK90013, see:
Use [URL] BBCode for External Links
Back to top
Please enable JavaScript!