Splice: Cut string @ index from array type string
From NSIS Wiki
Jump to navigationJump to search
Author: Afrow UK (talk, contrib) |
Description
This function works a little like Perl's Splice() function in that it cuts a string at a selected index from an array type string. However, unlike Perl's Splice() function, this returns the string that has been Spliced (or Sliced rather).
Usage
Push $ArrayString ; Array string Push "12" ; Index number (just like e.g. $ArrayString[12] : Zero-based) Push "|" ; Array string seperator Call Splice Pop $ArrayString ; New array with $ArrayString[12] cut away Pop $R0 ; Value of $ArrayString[12]
Example
; $ArrayString == "string1|string2|string3|string4" Push $ArrayString Push "2" Push "|" Call Splice Pop $ArrayString ; Now "string1|string2|string4" Pop $R0 ; Returns "string3"
The Function
Function Splice Exch $R0 ; seperator character Exch Exch $R1 ; chunk to slice Exch Exch 2 Exch $R2 ; string Push $R3 Push $R4 Push $R5 Push $R6 Push $R7 Push $R8 StrCpy $R3 0 StrCpy $R5 -1 StrCpy $R2 "$R0$R2$R0" Loop1: IntOp $R3 $R3 + 1 StrCpy $R4 $R2 1 $R3 StrCmp $R4 "" +5 StrCmp $R4 $R0 0 Loop1 StrCpy $R8 $R3 IntOp $R5 $R5 + 1 StrCmp $R5 $R1 0 Loop1 StrLen $R4 $R2 IntOp $R8 $R4 - $R8 StrCpy $R6 $R2 "" -$R8 ; right side StrCpy $R7 $R2 -$R8 ; left side + slice StrCpy $R3 0 Loop2: IntOp $R3 $R3 - 1 StrCpy $R4 $R7 1 $R3 StrCmp $R4 $R0 0 Loop2 StrCpy $R0 $R7 $R3 ; left side IntOp $R3 $R3 + 1 StrCpy $R1 $R7 "" $R3 ; slice StrCpy $R0 "$R0$R6" StrCpy $R0 $R0 -1 StrLen $R2 $R0 IntOp $R2 $R2 - 1 StrCpy $R0 $R0 "" -$R2 Pop $R8 Pop $R7 Pop $R6 Pop $R5 Pop $R4 Pop $R3 Pop $R2 Exch $R1 ; slice Exch Exch $R0 ; new string FunctionEnd
-Stu