/* REXX */ /* */ /* AUTHOR: Mark Zelden */ /* Last Updated 01/08/2003 */ /* */ /*********************************************************************/ /* */ /* SCAN INPUT FILE FOR PARM STRING(S) */ /* */ /* EXEC ARGS: */ /* SEARCH1 = FIRST SCAN ARG */ /* SEARCH2 = SECOND SCAN ARG (OPTIONAL) */ /* TYPE = "AND" OR "OR" (OPTIONAL) */ /* */ /* IF A SECOND SCAN ARG IS USED THEN "TYPE" IS USED TO */ /* DETERMINE IF "BOTH" ARGS MUST BE FOUND OR "EITHER" ARG */ /* MUST BE FOUND. ** THE DEFAULT IS "OR" ** */ /* */ /* INPUT DDNAME - SCANIN */ /* OUTPUT DDNAME - SCANOUT */ /* */ /*********************************************************************/ /* Sample batch execution JCL: */ /* */ /* //MYJOB JOB (ACCT),CLASS=A,MSGCLASS=H */ /* //SCAN EXEC PGM=IRXJCL,PARM='REXXSCAN IOS000I' */ /* //*SCAN EXEC PGM=IRXJCL,PARM='REXXSCAN IOS000I 560 AND' */*/ /* //SYSTSIN DD DUMMY */ /* //SYSTSPRT DD SYSOUT=* */ /* //SYSEXEC DD DSN=your.rexxscan.sysexec.lib,DISP=SHR */ /* //SCANOUT DD SYSOUT=* */ /* //SCANIN DD DISP=SHR,DSN=dataset.to.scan */ /* */ /*********************************************************************/ parse arg search1 search2 type /* do not translate to upper case */ if search1 = '' then do say ' ' say ' ******************************' say ' * NO SCAN PARM(S) SUPPLIED *' say ' ******************************' say ' ' exit 12 end if type <> '' then do upper type if type <> 'AND' & type <> 'OR' then do say ' ' say ' ******************************' say ' * COMPARE TYPE MUST BE *' say ' * "AND" OR "OR" *' say ' ******************************' say ' ' exit 12 end end found = 0 totrecs = 0 do forever "EXECIO 10000 DISKR SCANIN (STEM INREC." if RC > 2 | inrec.0 == 0 then leave /* rc = 2 for partial read */ do I = 1 to inrec.0 if search2 = '' then do if pos(search1,inrec.i) <> 0 then do queue inrec.i end end else do if type = 'AND' then do if pos(search1,inrec.i) <> 0 &, pos(search2,inrec.i) <> 0 then do queue inrec.i end end else do if pos(search1,inrec.i) <> 0 |, pos(search2,inrec.i) <> 0 then do queue inrec.i end end /* else do */ end /* else do */ end /* do I = 1 to inrec.0 */ new = queued() /* how many new records found */ "EXECIO" new "DISKW SCANOUT" found = found + new totrecs = totrecs + inrec.0 end /* do forever */ /* */ /* close files, write totals and exit */ /* */ "EXECIO 0 DISKR SCANIN (FINIS" "EXECIO 0 DISKW SCANOUT (FINIS" /* */ totrecs = Right(totrecs,7,'0') found = Right(found,7,'0') say totrecs' RECORDS WERE READ FROM THE INPUT FILE.' if search2 = '' then say found' RECORDS WERE FOUND WITH "'||search1||'".' else if type <> 'AND' then say found' RECORDS WERE FOUND WITH "'||search1||'" OR', '"'||search2||'".' else say found' RECORDS WERE FOUND WITH "'||search1||'" AND', '"'||search2||'".' if found = 0 then exit 4 else exit 0