Skip to content

Instantly share code, notes, and snippets.

@AfterLemon
Last active October 4, 2017 11:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save AfterLemon/6782474 to your computer and use it in GitHub Desktop.
Save AfterLemon/6782474 to your computer and use it in GitHub Desktop.
Custom Sub String Match checks left-to-right Supports {L}eft,{R}ight,{B}etween
; EXAMPLES
string := "111|222|333.444|555|444.777|888|999"
MsgBox, % AL_SubStr(string, "|","L",5) " _ " AL_SubStr(string, "|","R",5)
MsgBox, % AL_SubStr(string, ".","L",1) " _ " AL_SubStr(string, ".","R",1)
MsgBox, % AL_SubStr(string, ".","L",2) " _ " AL_SubStr(string, ".","R",2)
MsgBox, % AL_SubStr(string, ".","L",4) " _ " AL_SubStr(string, ".","R",4)
MsgBox, % AL_SubStr(string, "444","L",2) " _ " AL_SubStr(string, "444","R",2)
MsgBox, % AL_SubStr(string, "88","L", 2) " _ " AL_SubStr(string, "88","R")
MsgBox, % "_ " AL_SubStr(string, "|","B",1,".") " _"
; CODE
AL_substr(string,search1,direction:="R",match:=1,search2:="",CaseSensitive:="")
{
s:=string,A=search1,d=direction,m=match,B=Search2,V=CaseSensitive,c=InStr(s,A,V),(d="B"&&B=""?B:=A:"")
StringCaseSense,% (V?"On":"Off")
StringReplace,s,s,%A%,%A%,UseErrorLevel
E:=(ErrorLevel<m?1:0)
If !E{
While(--m?c:=InStr(s,A,V,c+1):""){
}R:=SubStr(s,1,--c),(d="R"?R:=SubStr(s,StrLen(R)+StrLen(A)+1):(d="B"?(InStr(s,B,V,c+1)>0?R:=SubStr(s,c+StrLen(A)+1,InStr(s,B,V,c+StrLen(A)+1)-c-StrLen(A)-StrLen(B)):R:=SubStr(s,StrLen(R)+StrLen(A)+1)):R))
}return (E?"":R)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment