Difference between revisions of "SplitLine"

From Second Life Wiki
Jump to navigation Jump to search
m (Clarify a bit)
(Brush up)
Line 17: Line 17:
== Specification ==
== Specification ==
<div style="padding: 0.5em;">
<div style="padding: 0.5em;">
<pre>
<lsl>
string SplitLine(string _source, string _separator, integer _stride)
string SplitLine(string _source, string _separator, integer _stride)
{
{
Line 37: Line 37:
     return _source;
     return _source;
}
}
</pre>
</lsl>
</div></div>
</div></div>


Line 44: Line 44:
<div style="padding: 0.5em;">
<div style="padding: 0.5em;">
Trivial example to listen to any chat from the object owner for '''{{LSL Param|source}}''' values and respond lines split at space (" ") positions using 10 characters stride value.
Trivial example to listen to any chat from the object owner for '''{{LSL Param|source}}''' values and respond lines split at space (" ") positions using 10 characters stride value.
<pre>
<lsl>
// Insert code of SplitLine user function here
 
default
default
{
{
Line 58: Line 60:
     }
     }
}
}
</pre>
</lsl>
</div></div>
</div></div>


{{LSLC|Examples|SplitLine}}
{{LSLC|Examples|SplitLine}}

Revision as of 03:09, 12 December 2007


Function: string SplitLine(string source,string separator,integer stride);

Returns a string split by inserted 'new line' escape code at separator positions to portions of at least stride length.
In other words, a line can be split up to several lines at positions where separator string is found, each line with a length of at least stride characters.

• string source source string
• string separator split separator string
• integer stride split stride

Specification

<lsl> string SplitLine(string _source, string _separator, integer _stride) {

   integer offset= _stride;
   integer sourceLen = llStringLength(_source);
   integer separatorLen = llStringLength(_separator);
   while (sourceLen > _stride)
   {

integer split = llSubStringIndex(llGetSubString(_source, offset, -1), _separator); if (split != -1)

       {

_source = llInsertString(_source, offset + split + separatorLen, "\n"); sourceLen = llStringLength(_source) - offset; offset += split + _stride + 2; }

       else sourceLen = -1;
   }
   return _source;	

} </lsl>

Example

Trivial example to listen to any chat from the object owner for source values and respond lines split at space (" ") positions using 10 characters stride value. <lsl> // Insert code of SplitLine user function here

default {

   state_entry()
   {
       llOwnerSay("Enter text");

llListen(0, "", llGetOwner(), "");

   }
   listen(integer _chan, string _str, key _id, string _msg)
   {
       llOwnerSay(_msg + "\nsplit to:\n" + SplitLine(_msg, " ", 10));
   }

} </lsl>