Newb 5 Posted January 13, 2011 (edited) I wrote this, much effort, then i discovered later that there someone already wrote _StringBetween, and killed the first 5 people that passed in front of me, while in prey of rage. At least it was a good exercise. Enjoy. EDIT: It came up that i needed this function because _StringBetween didn't worked in my script. WIN! PS: This function has more arguments than _StringBetween, you can set also all the arguments of the StringInStr function. HA! I did better FU original Stringbetween writer (Just kiddin)) With the main function with carriages so it's more readable: Func StringFetch($c_String,$c_StringSearchA,$c_StringSearchB,$i_InstrCaseSense=0,$i_InstrOccurrence=1,$i_InstrStart=1,$i_InstrCount=50000) Local $c_StringASize=StringLen($c_StringSearchA) If $i_InstrStart=False Then $c_StringASize=1 Local $c_Fetched=StringMid($c_String,StringInStr($c_String,$c_StringSearchA,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount) _ +$c_StringASize,StringInStr($c_String,$c_StringSearchB,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount) _ -(StringInStr($c_String,$c_StringSearchA,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount)+$c_StringASize)) Return $c_Fetched EndFunc With the main function in One line (Exactly the same as above, just the main function was very long, and here it's all in one line): Func StringFetch($c_String,$c_StringSearchA,$c_StringSearchB,$i_InstrCaseSense=0,$i_InstrOccurrence=1,$i_InstrStart=1,$i_InstrCount=50000) Local $c_StringASize=StringLen($c_StringSearchA) If $i_InstrStart=False Then $c_StringASize=1 Local $c_Fetched=StringMid($c_String,StringInStr($c_String,$c_StringSearchA,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount)+$c_StringASize,StringInStr($c_String,$c_StringSearchB,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount)-(StringInStr($c_String,$c_StringSearchA,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount)+$c_StringASize)) Return $c_Fetched EndFunc Example of use: Global $String="Samuel Taylor Coleridge was a british writer who wrote The Rime of The Ancient Mariner Poetry" Global $x=StringFetch($String,"ish "," who"); I want to extract the word "writer" in thi example MsgBox(0,"PO",$x) Func StringFetch($c_String,$c_StringSearchA,$c_StringSearchB,$i_InstrCaseSense=0,$i_InstrOccurrence=1,$i_InstrStart=1,$i_InstrCount=50000) Local $c_StringASize=StringLen($c_StringSearchA) If $i_InstrStart=False Then $c_StringASize=1 Local $c_Fetched=StringMid($c_String,StringInStr($c_String,$c_StringSearchA,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount) _ +$c_StringASize,StringInStr($c_String,$c_StringSearchB,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount) _ -(StringInStr($c_String,$c_StringSearchA,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount)+$c_StringASize)) Return $c_Fetched EndFunc All the arguments with $C_Instr prefix are the StringInStr arguments, check helpfile for info. EDIT: I Implemented in my script _StringBetween with the RIGHT syntax, and it doesn't work, so it turned out that my funcion works and _StringBetween doesnt (In my script) GUICtrlSetData($NameLabel,_StringBetween($TextToCheck,'Name:','[')) This function doesn't retrevie the text which is in middle at all while mine does. YAY! I didn't wrote it for nothing Edited January 14, 2011 by Newb I'm a compulsive poster. When I post something, come to read it at least 5 minutes later after the posting, because I will edit it. I edited even this signature a few minutes later after I wrote it. Share this post Link to post Share on other sites
netegg 0 Posted February 9, 2011 I wrote this, much effort, then i discovered later that there someone already wrote _StringBetween, and killed the first 5 people that passed in front of me, while in prey of rage. At least it was a good exercise. Enjoy. EDIT: It came up that i needed this function because _StringBetween didn't worked in my script. WIN! PS: This function has more arguments than _StringBetween, you can set also all the arguments of the StringInStr function. HA! I did better FU original Stringbetween writer (Just kiddin)) With the main function with carriages so it's more readable: Func StringFetch($c_String,$c_StringSearchA,$c_StringSearchB,$i_InstrCaseSense=0,$i_InstrOccurrence=1,$i_InstrStart=1,$i_InstrCount=50000) Local $c_StringASize=StringLen($c_StringSearchA) If $i_InstrStart=False Then $c_StringASize=1 Local $c_Fetched=StringMid($c_String,StringInStr($c_String,$c_StringSearchA,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount) _ +$c_StringASize,StringInStr($c_String,$c_StringSearchB,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount) _ -(StringInStr($c_String,$c_StringSearchA,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount)+$c_StringASize)) Return $c_Fetched EndFunc With the main function in One line (Exactly the same as above, just the main function was very long, and here it's all in one line): Func StringFetch($c_String,$c_StringSearchA,$c_StringSearchB,$i_InstrCaseSense=0,$i_InstrOccurrence=1,$i_InstrStart=1,$i_InstrCount=50000) Local $c_StringASize=StringLen($c_StringSearchA) If $i_InstrStart=False Then $c_StringASize=1 Local $c_Fetched=StringMid($c_String,StringInStr($c_String,$c_StringSearchA,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount)+$c_StringASize,StringInStr($c_String,$c_StringSearchB,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount)-(StringInStr($c_String,$c_StringSearchA,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount)+$c_StringASize)) Return $c_Fetched EndFunc Example of use: Global $String="Samuel Taylor Coleridge was a british writer who wrote The Rime of The Ancient Mariner Poetry" Global $x=StringFetch($String,"ish "," who"); I want to extract the word "writer" in thi example MsgBox(0,"PO",$x) Func StringFetch($c_String,$c_StringSearchA,$c_StringSearchB,$i_InstrCaseSense=0,$i_InstrOccurrence=1,$i_InstrStart=1,$i_InstrCount=50000) Local $c_StringASize=StringLen($c_StringSearchA) If $i_InstrStart=False Then $c_StringASize=1 Local $c_Fetched=StringMid($c_String,StringInStr($c_String,$c_StringSearchA,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount) _ +$c_StringASize,StringInStr($c_String,$c_StringSearchB,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount) _ -(StringInStr($c_String,$c_StringSearchA,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount)+$c_StringASize)) Return $c_Fetched EndFunc All the arguments with $C_Instr prefix are the StringInStr arguments, check helpfile for info. EDIT: I Implemented in my script _StringBetween with the RIGHT syntax, and it doesn't work, so it turned out that my funcion works and _StringBetween doesnt (In my script) GUICtrlSetData($NameLabel,_StringBetween($TextToCheck,'Name:','[')) This function doesn't retrevie the text which is in middle at all while mine does. YAY! I didn't wrote it for nothing hi,does you use the array? Share this post Link to post Share on other sites
Newb 5 Posted March 6, 2011 hi,does you use the array? What do you mean with do you use the array? Anyway, Improved version of the script: Func StringFetch($c_String,$c_StringSearchA,$c_StringSearchB,$i_InstrCaseSense=0,$i_InstrOccurrence=1,$i_InstrStart=1,$i_InstrCount=50000) Local $c_StringASize=StringLen($c_StringSearchA) If $i_InstrStart=False Then $c_StringASize=1 Return StringMid($c_String,StringInStr($c_String,$c_StringSearchA,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount) _ +$c_StringASize,StringInStr($c_String,$c_StringSearchB,$i_InstrCaseSense,$i_InstrOccurrence,StringInStr($c_String,$c_StringSearchA),$i_InstrCount) _ -(StringInStr($c_String,$c_StringSearchA,$i_InstrCaseSense,$i_InstrOccurrence,$i_InstrStart,$i_InstrCount)+$c_StringASize)) EndFunc I'm a compulsive poster. When I post something, come to read it at least 5 minutes later after the posting, because I will edit it. I edited even this signature a few minutes later after I wrote it. Share this post Link to post Share on other sites