stristr
Revision as of 17:21, 30 May 2010 by Ugleh Ulrik (talk | contribs) (Created page with '{{LSL_Function |func=Stristr |mode=user |p1_type=string|p1_name=haystack|p1_desc=The input string |p2_type=string|p2_name=needle|p2_desc=the search within |p3_type=integer|p3_nam...')
| LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: string Stristr( string haystack, string needle, integer before_needle );
Returns part of haystack string from the first occurrence of needle to the end of haystack.
Returns a string from the first occurrence of needle to the end of haystack.
| • string | haystack | – | The input string | |
| • string | needle | – | the search within | |
| • integer | before_needle | – | If TRUE, Stristr returns the part of the haystack before the first occurrence of the needle, else after first occurrence. |
This function can also be used to determine if a line is in a string, If needle is not found it will return with a null string for if else statements.
Specification
<lsl> //Function created by Ugleh Ulrik string stristr(string haystack, string needle, integer before_needle){
integer msl = llStringLength(haystack);
integer mi;
list mlist;
do//we make a list out of the message to use ListFindList
mlist += [llGetSubString(haystack, mi, mi)];
while(msl>++mi);
integer ssl = llStringLength(needle);
integer si;
list slist;
do//we make a list out of the search to use ListFindList
slist += [llGetSubString(needle, si, si)];
while(ssl>++si);
if (llListFindList(mlist,slist) == -1)//-1 means not found, so we return it as null
return "";
if(before_needle)
return llGetSubString(haystack, msl, ((integer)llListFindList(mlist,slist) - 1));
return llGetSubString(haystack, ((integer)llListFindList(mlist,slist) + ssl), msl);
} </lsl>
Examples
This example uses its basic feature, to provide the content left, or right of the searched string. <lsl> default {
touch_start(integer total_number)
{
string source = "Hello there, Ugleh is my name!";
string mess = stristr(source,"Ugleh",FALSE); //False means after Needle
llOwnerSay(mess);//outputs " is my name!"
mess = stristr(source,"Ugleh",TRUE); //True means before Needle.
llOwnerSay(mess);//outputs "Hello there, "
}
}
</lsl>
This uses the function to provide an if else statement <lsl> default {
touch_start(integer total_number)
{
string source = "Ugleh was here";//change to "Strife was here" to get a different result
string mess = stristr(source,"Ugleh",FALSE);
llOwnerSay(mess);//outputs " is my name!"
mess = stristr(source,"Strife",TRUE);
if(mess)
llSay(0, "Looks like Strife was here");
else
llSay(0, "Looks like Ugleh was here");
}
}
</lsl>