$ IF P1.NES."HELP" THEN GOTO SKIP_HELP $ $!------------------------------------------------------------------------------ $! $! © Yezerski Roper Ltd. 1997 $! http://www.yrl.co.uk/ $! $! Please note: You are free to distribute this file provided you don't pretend $! it's yours, and give Yezerski Roper the credit they deserve :) $! $! Yezerski Roper will not accept any responsibility for any $! problems arising from the use of these commands. However, we $! welcome any suggestions and feedback you may have. $!------------------------------------------------------------------------------ $ $ Set VER ! only if P1 = "HELP" $ $!------------------------------------------------------------------------------ $! $!DOC Command file name : MASS_REPLACE.COM $! $!DOC Author(s) : John A Fotheringham $!DOC $!DES Command file description $!DES ------------------------ $!DES preforms bulk find and replace operations on sets of files. Does this $!DES by using SEARCH to locate the files, generating an edit command file $!DES and then invoking EDT to do the edits. $!DES $!DES Creates temporary command files:- $!DES $!DES SYS$LOGIN:MASSREPL.FIL $!DES SYS$LOGIN:MASSREPL.TMP $!DES $!DES Notes: $!DES $!DES - you can debug to a certain extent by setting the global $!DES symbol JDBG == "Y" $!DES $!DES Parameters $!DES ---------- $!DES P1 - filespec of files to be edited $!DES p2 - string to locate $!DES P3 - string to replace it by $!DES P4 - Enter files to omit from the substitution (automatically $!DES excludes .OLBs, .EXEs etc. $!DES P5 - delimiter to use in the SUBS command. Musn't be part of the $!DES search and replace strings, i.e. if your strings contain "/" $!DES you must use a different EDT delimiter such as "?" $!DES $!DES Missing parameters will be prompted for $!DES $!DOC HISTORY $!DOC ------- $!DOC $!DOC Version Name/description Date $!DOC ------- ---------------- ---- $!DOC V01-001 John A Fotheringham 24-Nov-1997 $! $!------------------------------------------------------------------------------ $ $ SET NOVER $ EXIT $ $ SKIP_HELP: $ $ ON ERROR THEN GOTO ABSEND $ ON CONTROL_Y THEN GOTO ABSEND $ $ IF P1 .EQS. "" THEN INQUIRE/NOPUNC P1 "Enter files to have replacements > " $ IF P4 .EQS. "" THEN INQUIRE/NOPUNC P4 "Enter files to omit > " $ IF P5 .EQS. "" THEN INQUIRE/NOPUNC P5 "Enter delimiter to use [/] > " $ $ IF P2 .EQS. "" THEN - READ SYS$COMMAND/PROMPT="Enter target string > " p2 $ $ Search_string = """" $ CONV_P2 = P2 $ $ conv_p2_loop_1: $ $ pos = F$locate ("""",conv_p2) $ IF pos.ne.f$len(conv_p2) $ THEN $ search_string = search_string + f$ext(0,pos,conv_p2) + """""" $ conv_p2 = f$ext (pos+1,f$len(conv_p2),conv_p2) $ goto conv_p2_loop_1 $ ENDIF $ search_string = search_string + conv_p2 + """" $ $ IF P3 .EQS. "" THEN - READ SYS$COMMAND/PROMPT="Enter replacement (in correct case) > " p3 $ $ delimiter = P5 $ IF P5 .EQS. "" THEN delimiter = "/" $ $ open/write editfile SYS$LOGIN:MASSREPL.TMP $ write editfile "SUBS ''delimiter'",P2,"''delimiter'",P3,"''delimiter' WH" $ $ REPLACE_LOOP: $ $ P2 = "" $ IF P2 .EQS. "" THEN - READ SYS$COMMAND/PROMPT="Enter target string (CR to exit) > " p2 $ $ IF P2 .NES. "" $ THEN $ $ search_string = search_string + ",""" $ conv_p2 = p2 $ $ conv_p2_loop_2: $ $ pos = F$locate ("""",conv_p2) $ IF pos.ne.f$len(conv_p2) $ THEN $ search_string = search_string + f$ext(0,pos,conv_p2) + """""" $ conv_p2 = f$ext (pos+1,f$len(conv_p2),conv_p2) $ goto conv_p2_loop_2 $ ENDIF $ search_string = search_string + conv_p2 + """" $ $ READ SYS$COMMAND/PROMPT="Enter replacement (in correct case) > " p3 $ write editfile "SUBS ''delimiter'",P2,"''delimiter'",P3,"''delimiter' WH" $ GOTO REPLACE_LOOP $ $ ENDIF $ $ write editfile "EX" $ close editfile $ $ WRITE SYS$OUTPUT "Search_string = !",search_string,"!" $ IF P4 .EQS. "" $ THEN $ SEARCH 'P1'/EXCL=(*.OBJ*,*.EXE*,*.LIS,*.DIR,*.OLB*,MASSREPL.*,*.ZIP)- /WIND=0/OUT=SYS$LOGIN:MASSREPL.FIL 'search_string' $ ELSE $ SEARCH 'P1'- /EXCL=(*.OBJ*,*.EXE*,*.LIS,*.DIR,*.OLB*,MASSREPL.*,*.ZIP,'p4')- /WIND=0/OUT=SYS$LOGIN:MASSREPL.FIL 'search_string' $ ENDIF $ $ CALL MASS_EDIT @SYS$LOGIN:MASSREPL.FIL SYS$LOGIN:MASSREPL.TMP - PROMPT $ $ ABSEND: $ $ DELETE/NOLOG SYS$LOGIN:MASSREPL.TMP.* $ DELETE/NOLOG SYS$LOGIN:MASSREPL.FIL.* $ $ EXIT ! End of MASS_REPLACE $ $! $ MASS_EDIT: $ SUBROUTINE ! MASS_ED : Mass editor $ $ IF p1.eqs. "HELP" THEN SET VER $ $!------------------------------------------------------------------------------ $! $!DOC Command file name : MASS_ED.COM $! $!DOC Author(s) : Dr John A Fotheringham $!DOC $!DES Command file description $!DES ------------------------ $!DES MASS_ED allows bulk editing of VMS files $!DES $!DES Parameters $!DES ---------- $!DES p1 - Filespec or filelist to be editied (must be present before P2) $!DES p2 - (optional) Command file to used $!DES p3 - RECOVER (optional) - do edit as a RECOVERY EDIT $!DES p5 - PROMPT (optinal) - will prompt between each edit $! $!DOC AMENDMENT HISTORY $!DOC ----------------- $!DOC $!DOC Version Date/initials Description $!DOC ------- ------------- ----------- $!DOC 1.00 24-JUN-91/ JAF Initial version. $! $!------------------------------------------------------------------------------ $ $ IF p1.eqs. "HELP" $ THEN $ SET NOVER $ EXIT $ ENDIF $ $ PARAMS = "$''p1'!$''P2'!$''P3'!$''P4!$''P5'!$" $ $ recover = "F" $ default_edit = "edit/edt" $ ask = "N" $ $ IF F$loc ("$RECOVER!",PARAMS).ne.f$len(PARAMS) $ THEN $ PARAMS = PARAMS - "$RECOVER!" $ recover = "T" $ ENDIF $ $ IF F$loc ("$PROMPT!",PARAMS).ne.f$len(PARAMS) $ THEN $ PARAMS = PARAMS - "$PROMPT!" $ ask = "Y" $ ENDIF $ $ P1 = F$ext (1, f$loc ("!", PARAMS)-1, PARAMS) $ PARAMS = PARAMS - "''p1'" - "$" - "!" $ $ P2 = F$ext (1, f$loc ("!", PARAMS)-1, PARAMS) $ $ ON ERROR THEN GOTO ABSEND $ ON CONTROL_Y THEN GOTO ABSEND $ $ input_file = "F" $ IF P1 .EQS. "" THEN INQUIRE/NOPUNC P1 "Which files are to be edited ? " $ $ if f$locate ("@",p1) .ne. f$length (p1) $ THEN $ $ input_file = "T" $ p1 = F$extract (1, f$length(p1), p1) $ $ ENDIF $ $!! IF P2 .EQS. "" THEN INQUIRE/NOPUNC P2 "Using which command file ? " $ $ IF input_file $ THEN $ open/read listfile 'p1' $ read/end=absend listfile file $ file = f$element(0,";",file) $ ELSE $ FILE = F$SEARCH ("''p1'",1) $ IF FILE.EQS."" THEN GOTO ABSEND $ ENDIF $ $ LOOP: $ $ IF JDBG THEN WRITE SYS$OUTPUT "MASS_ED: FILE = """, FILE,"""" $ IF F$LOCATE ("""",FILE).EQ.F$LENGTH(FILE) $ THEN $ if f$search("''file'",2).nes."" $ THEN $ $ IF ask $ THEN $ INQUIRE/NOPUNC GO_ON "Edit ''File' (Y/N/Q/A) [Y] > " $ IF go_on.eqs."Q" THEN GOTO ABSEND $ IF go_on.eqs."N" THEN GOTO get_next_file $ IF go_on.eqs."A" THEN ask = "N" $ ELSE $ if f$locate (".DIR;",file) .nes. f$len(file) .OR. - f$locate (".EXE;",file) .nes. f$len(file) $ THEN $ $ WRITE SYS$OUTPUT "Not allowed to edit ",file $ GOTO get_next_file $ ENDIF $ $ WRITE SYS$OUTPUT "Editing file ", FILE $ ENDIF $ $ if p2.nes. "" $ THEN $ IF recover $ THEN $ semi_col = F$loc (";",file) $ dot_col = semi_col - 1 $ REC_LOOP: $ IF (f$ext (dot_col,1,file).nes.".") $ THEN $ dot_col = dot_col -1 $ goto rec_loop $ ENDIF $ $ recfile = f$ext (0, dot_col, file) + ".JOU" $ $ copy 'p2' 'recfile' $ DEF/NOLOG/USER SYS$INPUT TT: $ DEF/NOLOG/USER SYS$OUTPUT TT: $ 'default_edit'/recover 'file' $ ELSE $ DEF/NOLOG/USER SYS$INPUT TT: $ DEF/NOLOG/USER SYS$OUTPUT TT: $ edit/edt/command='p2' 'file' $ ENDIF $ $ ELSE $ DEF/NOLOG/USER SYS$INPUT TT: $ DEF/NOLOG/USER SYS$OUTPUT TT: $ 'default_edit' 'file' $ ENDIF $ $ ENDIF $ ENDIF $ $ get_next_file: $ $ last_file = f$element(0,";",file) $ $ IF input_file $ THEN $ read/end=absend listfile file $ ELSE $ FILE = F$SEARCH ("''p1'",1) $ IF FILE.EQS."" THEN GOTO ABSEND $ ENDIF $ $ IF JDBG THEN WRITE SYS$OUTPUT "MASS_ED: LAST_FILE = """, LAST_FILE,"""" $ IF f$element(0,";",file).nes.last_file THEN GOTO LOOP $ $ ABSEND: $ IF input_file THEN close listfile $ EXIT ! End of MASS_ED $ ENDSUBROUTINE $