Return to Mainframe Utilities Page
Module
ISREDIT MACRO (CL1,CL2,CL3,CL4,CL5,CL6,CL7,CL8,CL9,CL10,CL11,CL12)
ISPEXEC CONTROL ERRORS RETURN
/**** SET MESSAGE DISPLAY ON/OFF BASED ON THE DEBUG SWITCH ***/
ISPEXEC VGET (DBGSWTCH) PROFILE
IF &DBGSWTCH = &STR(ON) THEN CONTROL MSG LIST CONLIST SYMLIST NOFLUSH
ELSE CONTROL NOMSG NOLIST NOFLUSH NOPROMPT
/**********************************************************************/
/* UTILITY NAME : DELDUPS */
/* DATE WRITTEN : 3-13-90 */
/* AUTHOR : DAVE LEIGH */
/* DESCRIPTION : DELETE DUPLICATE RECORDS IN A FILE. */
/*========================== MODIFICATIONS ===========================*/
/* WHO ¦WHEN ¦WHY */
/* --- ¦---- ¦--- */
/* ¦ ¦ */
/**********************************************************************/
IF &NRSTR(&CL1) = &NRSTR(HELP) THEN GOTO HELPSEC
IF &NRSTR(&CL1) = THEN +
DO
ISREDIT (LRECL) = LRECL
SET CL1 = 1
SET CL2 = &LRECL
END
IF (&NRSTR(&CL1) > AND &NRSTR(&CL2) = ) OR +
(&NRSTR(&CL3) > AND &NRSTR(&CL4) = ) OR +
(&NRSTR(&CL5) > AND &NRSTR(&CL6) = ) OR +
(&NRSTR(&CL7) > AND &NRSTR(&CL8) = ) OR +
(&NRSTR(&CL9) > AND &NRSTR(&CL10) = ) OR +
(&NRSTR(&CL11) > AND &NRSTR(&CL12) = ) THEN +
DO
SET ZEDLMSG = &NRSTR(COLUMNS MUST BE SPECIFIED IN PAIRS, +
EVEN IF THE SAME COLUMN)
ISPEXEC SETMSG MSG(UTLZ001)
EXIT
END
IF (&DATATYPE(&NRSTR(&CL1)) ¬= NUM AND &NRSTR(&CL1) > ) OR +
(&DATATYPE(&NRSTR(&CL2)) ¬= NUM AND &NRSTR(&CL2) > ) OR +
(&DATATYPE(&NRSTR(&CL3)) ¬= NUM AND &NRSTR(&CL3) > ) OR +
(&DATATYPE(&NRSTR(&CL4)) ¬= NUM AND &NRSTR(&CL4) > ) OR +
(&DATATYPE(&NRSTR(&CL5)) ¬= NUM AND &NRSTR(&CL5) > ) OR +
(&DATATYPE(&NRSTR(&CL6)) ¬= NUM AND &NRSTR(&CL6) > ) OR +
(&DATATYPE(&NRSTR(&CL7)) ¬= NUM AND &NRSTR(&CL7) > ) OR +
(&DATATYPE(&NRSTR(&CL8)) ¬= NUM AND &NRSTR(&CL8) > ) OR +
(&DATATYPE(&NRSTR(&CL9)) ¬= NUM AND &NRSTR(&CL9) > ) OR +
(&DATATYPE(&NRSTR(&CL10)) ¬= NUM AND &NRSTR(&CL10) > ) OR +
(&DATATYPE(&NRSTR(&CL11)) ¬= NUM AND &NRSTR(&CL11) > ) OR +
(&DATATYPE(&NRSTR(&CL12)) ¬= NUM AND &NRSTR(&CL12) > ) THEN +
DO
SET ZEDLMSG = &NRSTR("DELDUPS" ARGUMENTS MUST BE NUMERIC)
ISPEXEC SETMSG MSG(UTLZ001)
EXIT
END
IF &NRSTR(&CL1) = 0 OR +
&NRSTR(&CL2) = 0 OR +
&NRSTR(&CL3) = 0 OR +
&NRSTR(&CL4) = 0 OR +
&NRSTR(&CL5) = 0 OR +
&NRSTR(&CL6) = 0 OR +
&NRSTR(&CL7) = 0 OR +
&NRSTR(&CL8) = 0 OR +
&NRSTR(&CL9) = 0 OR +
&NRSTR(&CL10) = 0 OR +
&NRSTR(&CL11) = 0 OR +
&NRSTR(&CL12) = 0 THEN +
DO
SET ZEDLMSG = &NRSTR(ZERO IS NOT A VALID COLUMN)
ISPEXEC SETMSG MSG(UTLZ001)
EXIT
END
IF &CL1 > &CL2 OR +
&CL3 > &CL4 OR +
&CL5 > &CL6 OR +
&CL7 > &CL8 OR +
&CL9 > &CL10 OR +
&CL11 > &CL12 THEN +
DO
SET ZEDLMSG = &NRSTR(2ND COLUMN IN A PAIR MUST BE > OR = +
TO THE 1ST COLUMN IN A PAIR)
ISPEXEC SETMSG MSG(UTLZ001)
EXIT
END
ISREDIT SORT +
&CL1 &CL2 &CL3 &CL4 &CL5 &CL6 &CL7 &CL8 &CL9 &CL10 &CL11 &C12
IF &LASTCC > 4 THEN +
DO
SET ZEDLMSG = &NRSTR(PROBLEM WITH THE "DELDUPS" SORT STEP)
ISPEXEC SETMSG MSG(UTLZ001)
EXIT
END
ISREDIT FIND FIRST P'=' 1
ISREDIT LINE_BEFORE .ZCSR = ' '
ISREDIT FIND FIRST P'=' 1
ISREDIT CHANGE P'=' X'FF' ALL .ZCSR .ZCSR
ISREDIT (FFFFLINE) = LINE .ZCSR
ISREDIT FIND FIRST P'=' 1
IF &LASTCC = 0 THEN +
DO
ISREDIT (DLINE) = LINE .ZCSR
IF &CL2 > THEN SET SAVE1 = &SUBSTR(&CL1:&CL2,&NRSTR(&DLINE))
IF &CL4 > THEN SET SAVE2 = &SUBSTR(&CL1:&CL2,&NRSTR(&DLINE))
IF &CL6 > THEN SET SAVE3 = &SUBSTR(&CL1:&CL2,&NRSTR(&DLINE))
IF &CL8 > THEN SET SAVE4 = &SUBSTR(&CL1:&CL2,&NRSTR(&DLINE))
IF &CL10 > THEN SET SAVE5 = &SUBSTR(&CL1:&CL2,&NRSTR(&DLINE))
IF &CL12 > THEN SET SAVE6 = &SUBSTR(&CL1:&CL2,&NRSTR(&DLINE))
END
ISREDIT FIND NEXT P'=' 1
SET SAVECC = &LASTCC
DO WHILE &SAVECC = 0
ISREDIT (DLINE) = LINE .ZCSR
SET PART1 =
SET PART2 =
SET PART3 =
SET PART4 =
SET PART5 =
SET PART6 =
IF &CL2 > THEN SET PART1 = &SUBSTR(&CL1:&CL2,&NRSTR(&DLINE))
IF &CL4 > THEN SET PART2 = &SUBSTR(&CL1:&CL2,&NRSTR(&DLINE))
IF &CL6 > THEN SET PART3 = &SUBSTR(&CL1:&CL2,&NRSTR(&DLINE))
IF &CL8 > THEN SET PART4 = &SUBSTR(&CL1:&CL2,&NRSTR(&DLINE))
IF &CL10 > THEN SET PART5 = &SUBSTR(&CL1:&CL2,&NRSTR(&DLINE))
IF &CL12 > THEN SET PART6 = &SUBSTR(&CL1:&CL2,&NRSTR(&DLINE))
IF &NRSTR(&PART1) = &NRSTR(&SAVE1) AND +
&NRSTR(&PART2) = &NRSTR(&SAVE2) AND +
&NRSTR(&PART3) = &NRSTR(&SAVE3) AND +
&NRSTR(&PART4) = &NRSTR(&SAVE4) AND +
&NRSTR(&PART5) = &NRSTR(&SAVE5) AND +
&NRSTR(&PART6) = &NRSTR(&SAVE6) THEN +
ISREDIT LINE .ZCSR = '&FFFFLINE'
SET SAVE1 = &NRSTR(&PART1)
SET SAVE2 = &NRSTR(&PART2)
SET SAVE3 = &NRSTR(&PART3)
SET SAVE4 = &NRSTR(&PART4)
SET SAVE5 = &NRSTR(&PART5)
SET SAVE6 = &NRSTR(&PART6)
ISREDIT FIND NEXT P'=' 1
SET SAVECC = &LASTCC
END
ISREDIT RESET ALL
ISREDIT EXCLUDE ALL
ISREDIT FIND ALL '&FFFFLINE'
ISREDIT DELETE ALL NX
ISREDIT RESET
EXIT
HELPSEC: + 02480000
ISPEXEC SELECT PGM(ISPTUTOR) PARM(HELPSHEL) 02490000
SET ZEDLMSG = &STR(*** HELP DISPLAYED FOR DELDUPS UTILITY + 02490000
*** NO PROCESSING PERFORMED ***) 02490000
ISPEXEC SETMSG MSG(UTLZ000) 02490000
EXIT
Documentation
This utility will delete records in a file that are duplicates with respect to up to six different columns (a column may be one physical "card column" or) the entire lrecl or anywhere in between. For instance, you could specify "deldups 1 80" for an 80 byte file, and the entire file would be sorted on columns 1 through 80 and duplicate records would be deleted. You could also specify that records that are duplicate for colums 1-8 be deleted (i.e. the) file is sorted on colums 1 through 8, and only these colums are compared to see if the record is a duplicate of the previous one. You may specify up to six pairs of columns. The second column in the pair must be >= the first.

0 Comments