Is there a faster way to do this?
Code:
<MvFUNCTION NAME="Replace" PARAMETERS="string var, search, replace, start var" STANDARDOUTPUTLEVEL="">
<MvCOMMENT>
Replaces a single case sensitive occurrence of a sub-string within a string.
Accepts a starting search position (usually 1). Start is changed to the first char position AFTER the replaced string.
<MvASSIGN NAME="g.string" VALUE="{ 'Now is the time for all good men to come to the aid of their nation.' }">
<MvEVAL EXPR="{ Replace(g.string, 'nation', 'country', g.start) }"><br>
<MvEVAL EXPR="{ g.start }">
</MvCOMMENT>
<MvASSIGN NAME="l.savestring" VALUE="{ l.string }">
<MvIF EXPR="{ l.start LT 1 }">
<MvASSIGN NAME="l.start" VALUE="{ 1 }">
</MvIF>
<MvIF EXPR="{ l.start GT 1 }">
<MvASSIGN NAME="l.left" VALUE="{ substring(l.string,1,l.start -1) }">
</MvIF>
<MvASSIGN NAME="l.string" VALUE="{ substring(l.string,l.start,len(l.string)) }">
<MvASSIGN NAME="l.posn" VALUE="{ l.search IN l.string }">
<MvIF EXPR="{ l.posn GT 1 }">
<MvASSIGN NAME="l.left" VALUE="{ l.left $ substring(l.string,1,(l.posn -1)) }">
<MvASSIGN NAME="l.string" VALUE="{ substring(l.string,l.posn,len(l.string)) }">
</MvIF>
<MvIF EXPR="{ (l.search IN l.string ) EQ 1 }">
<MvASSIGN NAME="l.right" VALUE="{ substring(l.string,len(l.search)+1,len(l.string)) }">
<MvASSIGN NAME="l.start" VALUE="{ len(l.left $ l.replace) + 1 }">
<MvASSIGN NAME="l.return" VALUE="{ l.left $ l.replace $ l.right }">
<MvIF EXPR="{ l.start GT len(l.return) }">
<MvASSIGN NAME="l.start" VALUE="{ 0 }">
</MvIF>
<MvELSE>
<MvASSIGN NAME="l.return" VALUE="{ l.savestring }">
<MvASSIGN NAME="l.start" VALUE="{ 0 }">
</MvIF>
<MvFUNCRETURN VALUE="{ l.return }">
</MvFUNCTION>
Comment