Globally replace text in several files: Difference between revisions

→‎version 1: used a pointer for changestr.rex -- ~~~~
m (→‎version 1: added a comment in the section header about filename specification. -- ~~~~)
(→‎version 1: used a pointer for changestr.rex -- ~~~~)
Line 680:
end /*f*/
/*stick a fork in it, we're done.*/</lang>
Some older REXXes don't have a '''changestr''' bif, so one is included here ──► [[CHANGESTR.REX]].
<br><br>
<lang rexx>/*╔══════════════════════════════╗ CHANGESTR ╔═════════════════════════╗
╔═╩══════════════════════════════╝ function ╚═════════════════════════╩═╗
║ new string to be used──────────┐ ┌─────limit of # changes (times)║
║ original string (haystack)────────┐ │ │ [default: ≈ one billian]║
║ old string to be changed───┐ │ │ │ ┌───begin at this occurance #.║
║ {O, H, and N can be null.} │ │ │ │ │ [default: 1st occurrance]║
╚═╦════════════════════════════╗ │ │ │ │ │ ╔═══════════════════════╦═╝
╚════════════════════════════╝ ↓ ↓ ↓ ↓ ↓ ╚═══════════════════════╝*/
changestr: procedure; parse arg o,h,n,t,b /* T and B are optional.*/
$='' /*$: the returned string.*/
t=word(t 999999999 , 1) /*maybe use the default? */
b=word(b 1 , 1) /* " " " " */
w=length(o) /*length of OLD string.*/
if w==0 & t\=0 then return n || h /*changing a null char ? */
#=0 /*# of changed occurances*/
do j=1 until # >= t /*keep changing, T times.*/
parse var h y (o) _ +(w) h /*parse the string ... */
if _=='' then return $ || y /*no more left, return. */
if j<b then $=$ || y || o /*didn't meet begin at ? */
else do
$=$ || y || n /*build new STR from S. */
#=#+1 /*bump occurance number. */
end
end /*j*/
/*Most REXX BIFs only ···*/
return $ || h /* support three options.*/</lang>
'''output''' when using the input of: <tt> one.txt two.txt </tt>
<pre style="overflow:scroll">