StrStr: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
(Version: 2.0.)
(Redirects to StrStr.)
Line 1: Line 1:
{{PageAuthor|deguix}}
#REDIRECT [[StrStr]]
 
== Description ==
 
'''Requires:''' [[LogicLib]].
 
'''Version:''' 2.0.
 
This function searches for a substring on a string, and returns itself plus the remaining part of the string on the right of the substring.
 
== How To Use ==
 
=== Syntax ===
 
<highlight-nsis>
${StrLoc} "ResultVar" "String" "SubString"
</highlight-nsis>
or
<highlight-nsis>
Push "SubString"
Push "String"
Call StrLoc
Pop "ResultVar"
</highlight-nsis>
 
=== Parameters ===
 
; ResultVar
: Variable where the part on the right and including the ''SubString'' found on ''String'' is returned. If ''SubString'' is not found, an empty value is returned.
 
; String
: String where to search for ''SubString''.
 
; SubString
: String to search in ''String''.
 
=== Example ===
 
<highlight-nsis>
${StrStr} $0 "This is just an example" "just"
;$0 = "just an example"
</highlight-nsis>
 
== Function Code ==
 
<highlight-nsis>
!define StrStr "!insertmacro StrStr"
 
!macro StrStr ResultVar String SubString
  Push "${SubString}"
  Push "${String}"
  Call StrStr
  Pop "${ResultVar}"
!macroend
 
Function StrStr
/*After this point:
  ------------------------------------------
  $R0 = SubString (input)
  $R1 = String (input)
  $R2 = SubStringLen (temp)
  $R3 = StrLen (temp)
  $R4 = StartCharPos (temp)
  $R5 = TempStr (temp)*/
 
  ;Get input from user
  Exch $R0
  Exch
  Exch $R1
  Push $R2
  Push $R3
  Push $R4
  Push $R5
 
  ;Get "String" and "SubString" length
  StrLen $R2 $R0
  StrLen $R3 $R1
  ;Start "StartCharPos" counter
  StrCpy $R4 0
 
  ;Loop until "SubString" is found or "String" reaches its end
  ${Do}
    ;Remove everything before and after the searched part ("TempStr")
    StrCpy $R5 $R1 $R2 $R4
 
    ;Compare "TempStr" with "SubString"
    ${IfThen} $R5 == $R0 ${|} ${ExitDo} ${|}
    ;If not "SubString", this could be "String"'s end
    ${IfThen} $R4 >= $R3 ${|} ${ExitDo} ${|}
    ;If not, continue the loop
    IntOp $R4 $R4 + 1
  ${Loop}
 
/*After this point:
  ------------------------------------------
  $R0 = OutVar (output)*/
 
  ;Remove part before "SubString" on "String" (if there has one)
  StrCpy $R0 $R1 `` $R4
 
  ;Return output to user
  Pop $R5
  Pop $R4
  Pop $R3
  Pop $R2
  Pop $R1
  Exch $R0
FunctionEnd
</highlight-nsis>
 
== Credits ==
Version 2.0 - Diego Pedroso ([[User:deguix|deguix]]).
Version 1.0 - Ximon Eighteen ([[User:sunjammer|sunjammer]]).
 
[[Category:String Functions]]

Revision as of 21:18, 2 July 2005

Redirect to: