Skip to content
lsl.devlsl.devLSL Dev

llParseString2List

function
Function syntax
list llParseString2List(
  1. string src,// Source string to parse.
  2. list separators,// A list of up to 8 strings representing separators to be discarded.
  3. list spacers// A list of up to 8 strings representing spacers to be preserved in the list.
);
Returns
list
Energy
10

In most situations llParseStringKeepNulls should be used instead. Discarding null values is rarely desired.

When dealing with vector and rotation data, consider using llCSV2List instead, since it can correctly parse them.

Returns a list that is src broken into a list of strings, discarding separators, keeping spacers, discards any null (empty string) values generated.

How to use
list result = llParseString2List("", [], []);
  • All empty strings (that would arise from a spacer or separator being adjacent to each other or the ends) are removed;
  • If you want them (to keep the order of a list, for example) use llParseStringKeepNulls instead;
  • Only the first 8 separators and first 8 spacers supplied will be used. Any beyond that will be ignored. To work around this see useful snippets section below. The only limit on the number of items in the output is available script memory.
  • All separators and spacers must be strings. All other types will be ignored;
  • Separators take precedent over spacers. The string is parsed from start to finish. Each position is compared against the separators then spacers before moving onto the next position;
  • Duplicate separators and spacers have no ill effects;
  • All elements in the list returned by llParseString2List are strings, and must be explicitly typecast if they are to be used as other types. Do not rely upon the implicit typecasting of the other llList2* functions (as they typically return a default value);
  • Remember to capture the result of the operation with a variable, unless you are planning to act directly on the results.
Example 1
5 collapsed lines
default
{
state_entry()
{
// This will say:
// <A><crazy><fox><.><Saw><the><moon><.><.>
string my_string = "A crazy fox. Saw the moon..";
list my_list = llParseString2List(my_string,[" "],["."]);
llOwnerSay("<" + llDumpList2String(my_list,"><") + ">");
6 collapsed lines
// This will say:
// <A><crazy><fox><.><><><Saw><the><moon><.><><.><>
my_list = llParseStringKeepNulls(my_string,[" "],["."]);
llOwnerSay("<" + llDumpList2String(my_list,"><") + ">");
}
}
While LSL does not support lists-in-lists, you can emulate lists-in-lists by making successive calls or you could use JSON.

In this example some items have additional information supplied.

5 collapsed lines
string shoppinglist = "macaroni::pepperoni::bread#wheat::sausage#italian::coffee::syrup::apple::ice cream#strawberry#chocolate#vanilla";
default
{
state_entry()
{
list items = llParseString2List(shoppinglist, ["::"], []);
integer i = 0;
integer j = llGetListLength(items);
for(;i < j; ++i)
{
list desc = llParseString2List(llList2String(items, i), ["#"], []);
if(llGetListLength(desc) > 1)
{
list types = llDeleteSubList(desc,0,0);
7 collapsed lines
llOwnerSay("Item: "+ llList2String(desc, 0) + " Type: " + llList2CSV(llDeleteSubList(types,-2,-1) + llDumpList2String(llList2List(types,-2,-1), " & ")));
} else {
llOwnerSay("Item: "+ (string)desc);
}
}
}
}

Examples of processing more than 8 spacers or separators:

Whenever you need to process the resulting list entries further (eg. typecasting), remember to llStringTrim any whitespace characters from the string. This can prevent issues such as unexpected values for vectors and rotations.


If you indicate some items as separators, it will split the string where it finds the indicated separators, and strip out the separators.

If instead you indicate some items as spacers, it will split the string where it finds the spacers, but leave the spacers there, including them as separate entries in the result list.

string myString = "What Are You Looking At?";
llSay(0, llList2CSV( llParseString2List(myString, ["W", "A", "Y", "L"], [] ) ) );
//returns: hat , re , ou , ooking , t?
llSay(0, llList2CSV( llParseString2List(myString, [], ["W", "A", "Y", "L"] ) ) );
//returns: W, hat , A, re , Y, ou , L, ooking , A, t?

Using ” ” as a separator will parse a sentence into words.

If there is no spacer you care about, just use [] as the spacer.

If an empty string is used as a separator or a spacer, it will have no effect.

Added in SL 0.6.0

Original wiki source

Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.

From the Second Life Wiki

Community documentation adapted from LlParseString2List, by Linden Research, Inc. and contributing residents.View contributors and history.

Imported wiki revision:

Licensed under CC BY-SA 3.0. Last wiki edit: .Formatting and links have been adapted for this site; API metadata follows the LSL definitions.