Get last part and rest of string: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
Line 9: Line 9:
== Usage ==
== Usage ==
<highlight-nsis>
<highlight-nsis>
Push " " ; divider char
Push "o " ; divider str
Push "hello my" ; input string
Push "hello my" ; input string
  Call GetLastPart
  Call GetLastPart
Pop $R1 ; last part "my"
Pop $R1 ; last part "my"
Pop $R0 ; first part "hello"
Pop $R0 ; first part "hell"
</highlight-nsis>
</highlight-nsis>



Revision as of 12:40, 14 July 2007

This function has a bug, if it is fed an empty input string it goes into an infinite loop.


Author: Afrow UK (talk, contrib)


Description

This function returns the last part of a string after a certain character and the rest of the string before that character. If the character is not found within the string, then the function returns two empty strings.

Usage

Push "o " ; divider str
Push "hello my" ; input string
 Call GetLastPart
Pop $R1 ; last part "my"
Pop $R0 ; first part "hell"

The Function

Function GetLastPart
Exch $R0 ; input
Exch
Exch $R1 ; divider str
Push $R2
Push $R3
Push $R4
Push $R5
 
 StrCpy $R2 -1
 StrLen $R4 $R0
 StrLen $R5 $R1
 Loop:
  IntOp $R2 $R2 + 1
  StrCpy $R3 $R0 $R5 $R2
  StrCmp $R3 $R1 Chop
  StrCmp $R2 $R4 0 Loop
   StrCpy $R0 ""
   StrCpy $R1 ""
   Goto Done
 Chop:
  StrCpy $R1 $R0 $R2
  IntOp $R2 $R2 + $R5
  StrCpy $R0 $R0 "" $R2
 Done:
 
Pop $R5
Pop $R4
Pop $R3
Pop $R2
Exch $R1 ; before
Exch
Exch $R0 ; after
FunctionEnd