StrRep: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
Idangozlan (talk | contribs) m (changed push calls to add support for usage with " sign) |
|||
(One intermediate revision by one other user not shown) | |||
Line 40: | Line 40: | ||
!define StrRep "!insertmacro StrRep" | !define StrRep "!insertmacro StrRep" | ||
!macro StrRep output string old new | !macro StrRep output string old new | ||
Push | Push `${string}` | ||
Push | Push `${old}` | ||
Push | Push `${new}` | ||
!ifdef __UNINSTALL__ | !ifdef __UNINSTALL__ | ||
Call un.StrRep | Call un.StrRep | ||
Line 52: | Line 52: | ||
!macro Func_StrRep un | !macro Func_StrRep un | ||
Function StrRep | Function ${un}StrRep | ||
Exch $R2 ;new | Exch $R2 ;new | ||
Exch 1 | Exch 1 |
Latest revision as of 17:26, 29 August 2013
Author: dandaman32 (talk, contrib) |
Description
This function searches and replaces all occurrences of a substring in a string.
How To Use
Usage / Syntax
${StrRep} '$0' 'C:\Documents and Settings\Dan\Desktop\PSCP Frontend.exe' '\' '\\' MessageBox MB_OK $0 ; will be C:\\Documents and Settings\\Dan\\Desktop\\PSCP Frontend.exe
Parameters
${StrRep} "$result_var" "String" "SubString" "RepString"
- $result_var
- Variable where resulting operation of the replacement is returned. If SubString is not found, the value is the same as String.
- String
- String where to search for SubString.
- SubString
- String to search in String and to be replaced by RepString.
- RepString
- String to replace all occurrences of SubString inside String.
Example
${StrRep} $0 "This is just an example" "just " "" ;$0 = "This is an example"
Function Code
!define StrRep "!insertmacro StrRep" !macro StrRep output string old new Push `${string}` Push `${old}` Push `${new}` !ifdef __UNINSTALL__ Call un.StrRep !else Call StrRep !endif Pop ${output} !macroend !macro Func_StrRep un Function ${un}StrRep Exch $R2 ;new Exch 1 Exch $R1 ;old Exch 2 Exch $R0 ;string Push $R3 Push $R4 Push $R5 Push $R6 Push $R7 Push $R8 Push $R9 StrCpy $R3 0 StrLen $R4 $R1 StrLen $R6 $R0 StrLen $R9 $R2 loop: StrCpy $R5 $R0 $R4 $R3 StrCmp $R5 $R1 found StrCmp $R3 $R6 done IntOp $R3 $R3 + 1 ;move offset by 1 to check the next character Goto loop found: StrCpy $R5 $R0 $R3 IntOp $R8 $R3 + $R4 StrCpy $R7 $R0 "" $R8 StrCpy $R0 $R5$R2$R7 StrLen $R6 $R0 IntOp $R3 $R3 + $R9 ;move offset by length of the replacement string Goto loop done: Pop $R9 Pop $R8 Pop $R7 Pop $R6 Pop $R5 Pop $R4 Pop $R3 Push $R0 Push $R1 Pop $R0 Pop $R1 Pop $R0 Pop $R2 Exch $R1 FunctionEnd !macroend !insertmacro Func_StrRep "" !insertmacro Func_StrRep "un."
Versions History
- 4.0 - updated by Marshall
- Replaced superfluos extra variables with standard registers
- Fixed infinite loop bug where replacement string contained the string-to-replace
- Structured for installer/uninstaller versions
- Changed macro parameter order to be more intuitive
- 3.0.1 - updated by Dan Fuhry
- Fixed bug where macro pushed strings in the wrong order
- 3.0 - updated by Dan Fuhry
- Uses less code and doesn't depend on LogicLib
- Changed macro syntax to work like the PHP eqivalent
- 2.0.1 - updated by Diego Pedroso
- Fixed stack problems
Credits
Version 4.0 - Marshall (Marshall).
Version 3.x - Dan Fuhry (dandaman32).
Version 2.x - Diego Pedroso (deguix).
Version 1.x - Afrow UK / Diego Pedroso (deguix).
Version 1.0 - Hendri Adriaens (Smile2Me)