Separate Words
Revision as of 07:51, 12 September 2007 by Huney Jewell (talk | contribs) (Added result of example to illustrate function)
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Function: list SeparateWords(string src,string separators,string spacers);
Returns a list that is src broken into a list, discarding separators, keeping spacers, discards any null values generated. Same as LSL funtion llParseString2List, but not limited to 8 spacers or separators.
Thus substitute a call to the llParseString2List function by a call to SeparateWords whenever you have more than 8 separators or more than 8 spacers.
• string | src | – | source string | |
• list | separators | – | separators to be discarded | |
• list | spacers | – | spacers to be kept |
Specification
list applyLlParseString2List(list sources, list separators, list spacers) { list words = []; integer lenSources = llGetListLength(sources); integer i = 0; for (; i < lenSources; ++i) { string source = llList2String(sources, i); words += llParseString2List(source, separators, spacers); } return words; } // Divide a source string into words // See the chars between separators or spacers, and each spacer, as a word // Never see the empty string as a word list SeparateWords(string src, list separators, list spacers) { // Begin with all chars in one word list words = [src]; // List the chars between spacers, and each spacer, as a word integer lenSpacers = llGetListLength(spacers); integer i = 0; for (; i < lenSpacers; i += 8) { list some = llList2List(spacers, i, i + 8 - 1); words = applyLlParseString2List(words, [], some); } // Discard the separators after letting the separators separate words integer lenSeparators = llGetListLength(separators); for (i = 0; i < lenSeparators; i += 8) { list some = llList2List(separators, i, i + 8 - 1); words = applyLlParseString2List(words, some, []); } // Succeed return words; }
Example
Example to separate this src:
42 0.99 \"00000000-0000-0000-0000-000000000000\" [abc, def] \"xyz\\\\\"zyx\" <0, 1, 2, 3> // source literals
Says:
0: 42
1: 0.99
2: 00000000
3: 0000
4: 0000
5: 0000
6: 000000000000
7: abc
8: def
9: xyz
10: zyx
11: 0
12: 1
13: 2
14: 3
15: source
16: literals
OK
string lf = "\n"; string quote = "\""; string escape = "\\"; list spacers = [quote, "(", ")", "<", ">", "[", "]", "/", "+", "-", "*", "%", escape]; list separators() { string tab = llUnescapeURL("%09"); // != "\t" string cr = llUnescapeURL("%0D"); // != "\r" return [tab, lf, cr, " ", ",", ";"]; } default { state_entry() { string chars = "42 0.99 \"00000000-0000-0000-0000-000000000000\" [abc, def] \"xyz\\\\\"zyx\" <0, 1, 2, 3> // source literals"; list words = SeparateWords(chars, separators(), spacers); integer lenWords = llGetListLength(words); integer i = 0; for (; i < lenWords; ++i) { llOwnerSay((string) i + ": " + llList2String(words, i)); } llOwnerSay("OK"); } }
See Also
Functions