StrReplace v4: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
No edit summary |
No edit summary |
||
Line 22: | Line 22: | ||
<highlight-nsis> | <highlight-nsis> | ||
!macro StrReplaceV4 Var Replace With In | !macro StrReplaceV4 Var Replace With In | ||
Push $R1 | |||
Push $R2 | |||
Push `${Replace}` | Push `${Replace}` | ||
Push `${With}` | Push `${With}` | ||
Line 27: | Line 29: | ||
Call StrReplaceV4 | Call StrReplaceV4 | ||
Pop `${Var}` | Pop `${Var}` | ||
Pop $R2 | |||
Pop $R1 | |||
!macroend | !macroend | ||
!define StrReplaceV4 `!insertmacro StrReplaceV4` | !define StrReplaceV4 `!insertmacro StrReplaceV4` |
Revision as of 13:52, 11 April 2006
Author: Afrow UK (talk, contrib) |
Description
This is my own version of the StrReplace function, which replaces a string with another string within a string.
I was not happy using the last version by dandaman32 as it declares 9 new variables when it could use 9 predefined NSIS variables ($R0-$R9 or $0-$9). Most would not be worried about this, but my project already had many new variables defined and I wanted to cut down on as much memory use as possible.
Usage
${StrReplaceV4} $Var "replace" "with" "in string" # $Var contains the new string.
Example
${StrReplaceV4} $R0 "like" "don't like" "I like cheese a lot!" # $R0 == I don't like cheese a lot! ${StrReplaceV4} $R0 "a lot!" "very much..." "$R0" # $R0 == I don't like cheese very much...
The Function
!macro StrReplaceV4 Var Replace With In Push $R1 Push $R2 Push `${Replace}` Push `${With}` Push `${In}` Call StrReplaceV4 Pop `${Var}` Pop $R2 Pop $R1 !macroend !define StrReplaceV4 `!insertmacro StrReplaceV4` Function StrReplaceV4 Exch $R0 #in Exch 1 Exch $R1 #with Exch 2 Exch $R2 #replace Push $R3 Push $R4 Push $R5 Push $R6 Push $R7 Push $R8 StrCpy $R3 -1 StrLen $R5 $R0 StrLen $R6 $R1 StrLen $R7 $R2 Loop: IntOp $R3 $R3 + 1 StrCpy $R4 $R0 $R7 $R3 StrCmp $R3 $R5 End StrCmp $R4 $R2 0 Loop StrCpy $R4 $R0 $R3 IntOp $R8 $R3 + $R7 StrCpy $R8 $R0 "" $R8 StrCpy $R0 $R4$R1$R8 IntOp $R3 $R3 + $R6 IntOp $R3 $R3 - 1 IntOp $R5 $R5 - $R7 IntOp $R5 $R5 + $R6 Goto Loop End: Pop $R8 Pop $R7 Pop $R6 Pop $R5 Pop $R4 Pop $R3 Pop $R2 Pop $R1 Exch $R0 #out FunctionEnd
-Stu