00roshni1020080910
01RECORD MAX 10203040506300MAX
01RECORD MAX 20304050607100MAX
01RECORD MAX 40506070809200MAX
01RECORD MAX 20304050607300MAX
01RECORD MAX 30405060708300MAX
01RECORD MAX 40506070809300MAX
01RECORD MAX 30405060708200MAX
0200000003
My file is 91 bytes long and the output file should have the field from 27th position till length 3 to be sorted in the order 300, 100 and then 200.
And my output should look like this
Code:
00HEADER
01RECORD MAX 10203040506300MAX
01RECORD MAX 20304050607300MAX
01RECORD MAX 30405060708300MAX
01RECORD MAX 40506070809300MAX
01RECORD MAX 20304050607100MAX
01RECORD MAX 40506070809200MAX
01RECORD MAX 30405060708200MAX
02TRAILER
I am trying to split the file into the three types and then merging again. but I want to know if there is any simpler method.
I want to know if there is any simpler way of doing it using only one sort card?
Yes ther is...
Code:
//SORTIN DD *
00ROSHNI1020080910
01RECORD MAX 10203040506300MAX
01RECORD MAX 20304050607100MAX
01RECORD MAX 40506070809200MAX
01RECORD MAX 20304050607300MAX
01RECORD MAX 30405060708300MAX
01RECORD MAX 40506070809300MAX
01RECORD MAX 30405060708200MAX
02TRAILER
/*
//SORTOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=(34,2,CH,A)
INREC IFTHEN=(WHEN=(1,2,CH,EQ,C'00'),
OVERLAY=(33:C'00')),
IFTHEN=(WHEN=(1,2,CH,EQ,C'02'),
OVERLAY=(33:C'04')),
IFTHEN=(WHEN=(27,3,CH,EQ,C'300'),
OVERLAY=(33:C'01')),
IFTHEN=(WHEN=(27,3,CH,EQ,C'100'),
OVERLAY=(33:C'02')),
IFTHEN=(WHEN=(27,3,CH,EQ,C'200'),
OVERLAY=(33:C'03'))
OUTREC FIELDS=(1,32)
/*
Output is:
Code:
00ROSHNI1020080910
01RECORD MAX 10203040506300MAX
01RECORD MAX 20304050607300MAX
01RECORD MAX 30405060708300MAX
01RECORD MAX 40506070809300MAX
01RECORD MAX 20304050607100MAX
01RECORD MAX 40506070809200MAX
01RECORD MAX 30405060708200MAX
02TRAILER
But I have a problem. I want to retain records only with the (27:3) with 300, 100 and 200. And I dont want any other records to be in the output. All my previous requirements remain the same and in addition I dont want any record with 27:3 anything other than 100, 300 and 200.
Now say my input layout is this
Code:
00roshni1020080910
01RECORD MAX 10203040506300MAX
01RECORD MAX 20304050607100MAX
01RECORD MAX 40506070809200MAX
01RECORD MAX 20304050607300MAX
01RECORD MAX 30405060708300MAX
01RECORD MAX 40506070809300MAX
01RECORD MAX 30405060708200MAX
01RECORD MAX 30405060708150MAX
01RECORD MAX 40506070809700MAX
01RECORD MAX 30405060708800MAX
0200000003
and my output should look like this
Code:
00roshni1020080910
01RECORD MAX 10203040506300MAX
01RECORD MAX 20304050607300MAX
01RECORD MAX 30405060708300MAX
01RECORD MAX 40506070809300MAX
01RECORD MAX 20304050607100MAX
01RECORD MAX 40506070809200MAX
01RECORD MAX 30405060708200MAX
0200000003
My output should neglect the last three records whic have 150, 700 and 800 in the position 27:3.