StrRep: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
(Version: 2.0.1.) |
(Corrected function parameters order.) |
||
Line 18: | Line 18: | ||
or | or | ||
<highlight-nsis> | <highlight-nsis> | ||
Push "String" | |||
Push "SubString" | |||
Push "RepString" | Push "RepString" | ||
Call StrRep | Call StrRep | ||
Pop "ResultVar" | Pop "ResultVar" | ||
Line 52: | Line 52: | ||
!macro StrRep ResultVar String SubString RepString | !macro StrRep ResultVar String SubString RepString | ||
Push "${String}" | |||
Push "${SubString}" | |||
Push "${RepString}" | Push "${RepString}" | ||
Call StrRep | Call StrRep | ||
Pop "${ResultVar}" | Pop "${ResultVar}" |
Revision as of 11:40, 10 July 2005
Author: deguix (talk, contrib) |
Description
Requires: LogicLib.
Version: 2.0.1.
This function searches and replaces all occurances of a substring in a string.
How To Use
Syntax
${StrRep} "ResultVar" "String" "SubString" "RepString"
or
Push "String" Push "SubString" Push "RepString" Call StrRep Pop "ResultVar"
Parameters
- ResultVar
- 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 occurances 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 ResultVar String SubString RepString Push "${String}" Push "${SubString}" Push "${RepString}" Call StrRep Pop "${ResultVar}" !macroend Function StrRep /*After this point: ------------------------------------------ $R0 = RepString (input) $R1 = SubString (input) $R2 = String (input) $R3 = RepStrLen (temp) $R4 = SubStrLen (temp) $R5 = StrLen (temp) $R6 = StartCharPos (temp) $R7 = TempStrL (temp) $R8 = TempStrR (temp)*/ ;Get input from user Exch $R0 Exch Exch $R1 Exch Exch 2 Exch $R2 Push $R3 Push $R4 Push $R5 Push $R6 Push $R7 Push $R8 ;Return "String" if "SubString" is "" ${IfThen} $R1 == "" ${|} Goto Done ${|} ;Get "RepString", "String" and "SubString" length StrLen $R3 $R0 StrLen $R4 $R1 StrLen $R5 $R2 ;Start "StartCharPos" counter StrCpy $R6 0 ;Loop until "SubString" is found or "String" reaches its end ${Do} ;Remove everything before and after the searched part ("TempStrL") StrCpy $R7 $R2 $R4 $R6 ;Compare "TempStrL" with "SubString" ${If} $R7 == $R1 ;Split "String" to replace the string wanted StrCpy $R7 $R2 $R6 ;TempStrL ;Calc: "StartCharPos" + "SubStrLen" = EndCharPos IntOp $R8 $R6 + $R4 StrCpy $R8 $R2 "" $R8 ;TempStrR ;Insert the new string between the two separated parts of "String" StrCpy $R2 $R7$R0$R8 ;Now calculate the new "StrLen" and "StartCharPos" StrLen $R5 $R2 IntOp $R6 $R6 + $R3 ${Continue} ${EndIf} ;If not "SubString", this could be "String" end ${IfThen} $R6 >= $R5 ${|} ${ExitDo} ${|} ;If not, continue the loop IntOp $R6 $R6 + 1 ${Loop} Done: ;Return output to user StrCpy $R0 $R2 /*After this point: ------------------------------------------ $R0 = ResultVar (output)*/ Pop $R8 Pop $R7 Pop $R6 Pop $R5 Pop $R4 Pop $R3 Pop $R2 Pop $R1 Exch $R0 FunctionEnd
Versions History
- 2.0.1
- Fixed stack problems.
Credits
Version 2.x - Diego Pedroso (deguix).
Version 1.x - Hendri Adriaens (Smile2Me) / Afrow UK / Diego Pedroso (deguix).