Another String Replace (and Slash/BackSlash Converter): Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
m (Added category links.) |
m (Added category links.) |
||
Line 95: | Line 95: | ||
FunctionEnd | FunctionEnd | ||
</highlight-nsis> | </highlight-nsis> | ||
[[{{ns:14}}:String Functions]] | |||
[[{{ns:14}}:String Functions]] | [[{{ns:14}}:String Functions]] |
Revision as of 05:16, 1 May 2005
Author: dirtydingus (talk, contrib) |
Description
I also wrote a string replace function - this one can be optimized considerably if you know what you are replacing as I originally wrote it to replace /s with \s and vice versa - that version is at the end
Usage
Syntax is the same as the other replace function:
Push "String to do replacement in (haystack)" Push "String to replace (needle)" Push "Replacement" Call StrRep Pop "$R0" ;result
The Functions
StrRep
Function StrRep Exch $R4 ; $R4 = Replacement String Exch Exch $R3 ; $R3 = String to replace (needle) Exch 2 Exch $R1 ; $R1 = String to do replacement in (haystack) Push $R2 ; Replaced haystack Push $R5 ; Len (needle) Push $R6 ; len (haystack) Push $R7 ; Scratch reg StrCpy $R2 "" StrLen $R5 $R3 StrLen $R6 $R1 loop: StrCpy $R7 $R1 $R5 StrCmp $R7 $R3 found StrCpy $R7 $R1 1 ; - optimization can be removed if U know len needle=1 StrCpy $R2 "$R2$R7" StrCpy $R1 $R1 $R6 1 StrCmp $R1 "" done loop found: StrCpy $R2 "$R2$R4" StrCpy $R1 $R1 $R6 $R5 StrCmp $R1 "" done loop done: StrCpy $R3 $R2 Pop $R7 Pop $R6 Pop $R5 Pop $R2 Pop $R1 Pop $R4 Exch $R3 FunctionEnd
StrSlash
Here is my Slash to Backslash converter. The version shown uses similar registers to the StrRep function above, which is why it they are not contiguous or in a particularly logical order. Call it with the haystack and the direction on the stack as shown in the comment above it
; Push $filenamestring (e.g. 'c:\this\and\that\filename.htm') ; Push "\" ; Call StrSlash ; Pop $R0 ; ;Now $R0 contains 'c:/this/and/that/filename.htm' Function StrSlash Exch $R3 ; $R3 = needle ("\" or "/") Exch Exch $R1 ; $R1 = String to replacement in (haystack) Push $R2 ; Replaced haystack Push $R4 ; $R4 = not $R3 ("/" or "\") Push $R6 Push $R7 ; Scratch reg StrCpy $R2 "" StrLen $R6 $R1 StrCpy $R4 "\" StrCmp $R3 "/" loop StrCpy $R4 "/" loop: StrCpy $R7 $R1 1 StrCpy $R1 $R1 $R6 1 StrCmp $R7 $R3 found StrCpy $R2 "$R2$R7" StrCmp $R1 "" done loop found: StrCpy $R2 "$R2$R4" StrCmp $R1 "" done loop done: StrCpy $R3 $R2 Pop $R7 Pop $R6 Pop $R4 Pop $R2 Pop $R1 Exch $R3 FunctionEnd