/* REPLACE(0.0) Replace Char String SubStrings 06.04.89+02.06.95 ------------------------------------------------------------------ 0Type ------------------------------------------------------------- 0 Function 0Declaration ------------------------------------------------------ 0 DCL REPLACE ENTRY(CHAR(*) VAR, CHAR(*) VAR, CHAR(*) VAR) RETURNS(CHAR(1000) VAR); 0Reference -------------------------------------------------------- 0 REPLACE(,,) 0Parameters ------------------------------------------------------- 0 String - Character string Source - Source substring to be replaced (all entries) Target - Target string to replace every entry of source one 0Value ------------------------------------------------------------ 0 - If specified string is empty, then empty string is returned to the point of invocation. - If specified string is not empty and source substring is either empty or not found within specified string, then original string is returned to the point of invocation. - If specified string is not empty and source substring is found within specified string, then result of replacement of EVERY entry of source substring by target is returned to the point of invocation. 0Note ------------------------------------------------------------- 0 Empty target string enables to perform extraction of all source substring entries from specified string 0Examples --------------------------------------------------------- 0 REPLACE('','XYZ','*')='' REPLACE('ABCDEF','','*')='ABCDEF' REPLACE('ABCDEF','XYZ','*')='ABCDEF' REPLACE('XYZABCDEF','XYZ','*')='*ABCDEF' REPLACE('ABCXYZDEF','XYZ','*')='ABC*DEF' REPLACE('ABCDEFXYZ','XYZ','*')='ABCDEF*' REPLACE('XYZABCXYZDEFXYZ','XYZ','*')='*ABC*DEF*' REPLACE('XYZABCXYZDEFXYZ','XYZ','')='ABCDEF' 0Start Function --------------------------------------------------- *//* 0 DEBUG: PROC OPTIONS(MAIN); */ 0 REPLACE: PROC(String,Source,Target) RETURNS(CHAR(1000) VAR) REORDER; /* 0Parameters ------------------------------------------------------- */ 0 DCL (String, Source, Target) CHAR(*) VAR; /* 0Variables -------------------------------------------------------- */ 0 DCL (Input_String, Output_String INIT('')) CHAR(1000) VAR, Input_Lngth BIN FIXED BASED(ADDR(Input_String)); /* 0Internal Functions ----------------------------------------------- */ 0 DCL (HEADSTR, TAILSTR) ENTRY(CHAR(*) VAR, CHAR(*) VAR) RETURNS(CHAR(1000) VAR); /* 0Check Special Cases ---------------------------------------------- */ 0 IF ((LENGTH(String)=0)||||] (LENGTH(Source)=0)) THEN RETURN(String); /* 0Form Output String ----------------------------------------------- */ 0 Input_String=String||Source; DO WHILE(Input_Lngth>0); Output_String=Output_String|| HEADSTR(Input_String,Source)||Target; Input_String=TAILSTR(Input_String,Source); END; /* 0Return Function Value to the Point of Invocation ----------------- */ 0 RETURN(SUBSTR(Output_String,1,LENGTH(Output_String)- LENGTH(Target))); /* 0Finish Function -------------------------------------------------- */ 0 END REPLACE; /* 0Debug Function --------------------------------------------------- *//* 0 DCL Data(8,3) CHAR(15) VAR INIT('', 'XYZ','*', 'ABCDEF', '', '*', 'ABCDEF', 'XYZ','*', 'XYZABCDEF', 'XYZ','*', 'ABCXYZDEF', 'XYZ','*', 'ABCDEFXYZ', 'XYZ','*', 'XYZABCXYZDEFXYZ','XYZ','*', 'XYZABCXYZDEFXYZ','XYZ',''); 0 DCL PRNTTTL ENTRY(CHAR(*) VAR, CHAR(1) VAR, FILE, BIN FIXED, BIN FIXED); 0 CALL PRNTTTL('REPLACE(0.0) Replace Character String Substrings', '',SYSPRINT,1,0); 0 PUT SKIP EDIT(('REPLACE(''',Data(J,1),''',''',Data(J,2), ''',''',Data(J,3),''')=''', REPLACE(Data(J,1),Data(J,2),Data(J,3)),'''' DO J=1 TO 8)) (SKIP,(9)A); 0 END DEBUG; */