Difference between revisions of "Category:LSL String"
Line 148: | Line 148: | ||
'''llMessageLinked:''' It appears that the length of the string element being passed in a link message is not affected by either of the above two limitations, and that it is indeed limited only to script memory. | '''llMessageLinked:''' It appears that the length of the string element being passed in a link message is not affected by either of the above two limitations, and that it is indeed limited only to script memory. | ||
</div></div> | |||
<div id="box"> | |||
==Trimming a String== | |||
<div style="padding: 0.5em;"> | |||
Trimming a string used to require user-created functions, such as those created for the purpose in Strife Onizuka's library. | |||
Now, however, there is a native LSL function, [[llStringTrim]], which can be used to remove leading and/or trailing spaces. Note though that it does not remove excess spaces that a user may have entered in the middle of a sentence or string, nor is there any other native LSL function which does. | |||
When accepting user text input from chat, a notecard, or a prim name or description, or any other "free-wheeling" source, it's a good idea to always [[llStringTrim]] first before beginning to work with it. | |||
</div></div> | </div></div> | ||
Line 185: | Line 192: | ||
== Useful Functions == | == Useful Functions == | ||
<div style="padding: 0.5em;"> | <div style="padding: 0.5em;"> | ||
=== User-created utility functions === | === User-created utility functions === | ||
{| | {| | ||
{{LSL DefineRow||[[Float2String]]|Allows string output of a float in a tidy text format, with optional rounding.}} | {{LSL DefineRow||[[Float2String]]|Allows string output of a float in a tidy text format, with optional rounding.}} | ||
{{LSL DefineRow||[[Left]]|Returns text left of a specified separator}} | {{LSL DefineRow||[[Left]]|Returns text left of a specified separator}} | ||
{{LSL DefineRow||[[Like]]|See if one word matches part of another}} | |||
{{LSL DefineRow||[[Right]]|Returns text right of a specified separator}} | {{LSL DefineRow||[[Right]]|Returns text right of a specified separator}} | ||
{{LSL DefineRow||[[ | {{LSL DefineRow||[[Library_Combined_Library#str_replace|str_replace]]|replace all instances of a string with another string in a target string.}} | ||
{{LSL DefineRow||[[SplitLine]]|Insert 'new line' escape codes at certain positions of a string}} | |||
{{LSL DefineRow||[[WrapText]]|Break text into line lengths of your specification.}} | |||
|} | |} | ||
</div> | </div> |
Revision as of 09:15, 13 July 2008
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
See also Text.
A string is text data.
String values are enclosed in double quotes when defined in LSL text.
Any character may be used in a string though some will need to be escaped (see the Escape Codes section on this page for more info.)
The length of a string is only limited by available script memory. (see the String Length Restraints section on this page for some operational restraints.)
Strings can be concatenated (joined together) using the + operator.
Some string operations can be done via built-in functions, such as those that can make text all upper and lower case. Other operations, such as replace, left, right, wrap, etc, must be done via functions invented by other LSL users (examples of which are at the bottom of this page.)
You have no control over the font face, size, weight or colour that string output is displayed in on user screens or on menus. The look of text that displays on screens, such as chat from a text, is controlled by users (though not many change the defaults.) You can only control whether the text is lower or upper case.
(The only time you have control over the colour of displayed text is when it is Floating Text.)
String examples: <lsl>"Hello Avatar!" "Yes" "No" "It's 10 o'clock." "I am 21 years old!" "Help " + "me" EOF //The following two strings have the same value (i.e. they will both produce text with line breaks in it.) "I scream,\nyou scream,\nwe all scream,\nfor ice-cream!" "I scream, you scream, we all scream, for ice-cream!" </lsl> |
Variable: string name;
<lsl>string name;</lsl> Declares a variable of type string named name, with the value ""
• variable | name | – | variable name |
Variable: string name = value;
<lsl>string name = value;</lsl> Declares a variable of type string named name, with the value value.
• variable | name | – | variable name | |
• expression | value | – | string expression or constant |
Typecast: (string)value
<lsl>(string)value</lsl> Converts value to a value of type string.
• expression | value | – | expression or constant |
Operators
See Operators for more information.
Combine: value1 + value2
<lsl>(value1 + value2)</lsl> Combines two strings into a single string without modifying the inputs. Appends value2 to value1 and returns the resulting string.
• expression | value1 | – | string expression or constant | |
• expression | value2 | – | string expression or constant |
Comparison: value1 == value2
<lsl>(value1 == value2)</lsl>
Compares two strings, returns one if same length and same characters, else returns zero.
This operator works exactly like !strcmp(value1, value2)
in C, thus technically differs from the counterintuitive behavior of the == operator in C and in Java.
• expression | value1 | – | string expression or constant | |
• expression | value2 | – | string expression or constant |
Comparison: value1 != value2
<lsl>(value1 != value2)</lsl>
Compares two strings, returns zero if same length and same characters, otherwise non-zero.
This operator works exactly like strcmp(value1, value2)
in C, thus technically differs from the counterintuitive behavior of the != operator in C and in Java.
• expression | value1 | – | string expression or constant | |
• expression | value2 | – | string expression or constant |
Escape Codes
Substring | Replaced with |
---|---|
\t | four spaces |
\n | new line |
\" | double quote |
\\ | backslash |
Escape codes are translated when the script is compiled; not while it's running. The result is that only strings that are inside your script when it is compiled will get, say, \n turned into a "new line" character. Text you read in from a notecard, chat, http, etc, will not be checked for escape codes -- that same \n typed in a notecard doesn't automatically turn into a "new line" character. You'll have to do that yourself, if you really really need it for some reason.
Those who are coming LSL from such languages as C and Java may find these LSL string escape rules confusing at first. In LSL, "\n" means llUnescapeURL("%0A"), as it does in C and Java, but "\t" means llUnescapeURL("%20%20%20%20") rather than llUnescapeURL("%09"), and "\r" means "r" rather than llUnescapeURL("%0D"), etc.
String Length Restraints
As noted at the start of this page, the length of a single string is only limited by available script memory. However, there are some operational limitations.
llSay: When using llSay, any text string being said will be truncated to 1023 bytes if it is greater than that. This happens "silently." (i.e. you get no error notice, nor any indication that it has been done.)
Notecard lines: When reading in lines from notecards, lines longer than 255 characters will be truncated silently as well.
llMessageLinked: It appears that the length of the string element being passed in a link message is not affected by either of the above two limitations, and that it is indeed limited only to script memory.
Trimming a String
Trimming a string used to require user-created functions, such as those created for the purpose in Strife Onizuka's library.
Now, however, there is a native LSL function, llStringTrim, which can be used to remove leading and/or trailing spaces. Note though that it does not remove excess spaces that a user may have entered in the middle of a sentence or string, nor is there any other native LSL function which does.
When accepting user text input from chat, a notecard, or a prim name or description, or any other "free-wheeling" source, it's a good idea to always llStringTrim first before beginning to work with it.
Characters with Accents
It used to be that your script would not compile if you included in it a string containing a character with an accent, such as "écoutez", or punctuation not used in English, such as "¿Entiende?".
Sometime in late spring / early summer 2008, scripts began compiling with accents in text strings.
That is to say:
string hello = "Avatar écoutez";
now works (noticed as of July 2008 by the present writer.)
Special Punctuation
tab \t
newline \n
Examples
<lsl>integer int = 48934; string str = (string)int; string str_2; str_2 = str;</lsl>
Useful Functions
User-created utility functions
• | Float2String | – | Allows string output of a float in a tidy text format, with optional rounding. | |
• | Left | – | Returns text left of a specified separator | |
• | Like | – | See if one word matches part of another | |
• | Right | – | Returns text right of a specified separator | |
• | str_replace | – | replace all instances of a string with another string in a target string. | |
• | SplitLine | – | Insert 'new line' escape codes at certain positions of a string | |
• | WrapText | – | Break text into line lengths of your specification. |
Text-Related Items from the Script Library
Name | Creator | Description |
ParseString2List | Strife Onizuka | Same as llParseString2List and llParseStringKeepNulls, but not limited to 8 spacers or separators. Thus substitute a call to the llParseString2List and llParseStringKeepNulls functions by a call to ParseString2List whenever you have more than 8 separators or more than 8 spacers. |
String Compare | Xaviar Czervik | Compares two strings and reliably returns either 1, -1, or 0 if they are the same. |
XyText | Xylor Baysklef | Display text (up to 10 characters) on a prim. Use as many prims as desired. |
XyyyyzText | Criz Collins | Display text (up to 10 characters) on a prim. Displays different text for each line instead of one single text, that will be broken into the next lines. Watch here for what that means: http://screencast.com/t/1wMLujLcEO |
XyzzyText | Thraxis Epsilon and Gigs Taggart | Display text (up to 10 characters) on a prim. Way more efficient than XyText. |
Subcategories
This category has the following 2 subcategories, out of 2 total.
Pages in category "LSL String"
The following 46 pages are in this category, out of 46 total.