Difference between revisions of "SplitLine"

From Second Life Wiki
Jump to navigation Jump to search
(Brush up)
m
Line 1: Line 1:
{{LSL Header}} __NOTOC__
{{LSL Header}} __NOTOC__
<div id="box">
<div id="box">{{#if:
{{#vardefine:p_source_desc|source string}}
{{#vardefine:p_source_desc|source string}}
{{#vardefine:p_separator_desc|split separator string}}
{{#vardefine:p_separator_desc|split separator string}}
{{#vardefine:p_stride_desc|split stride}}
{{#vardefine:p_stride_desc|split stride}}
}}
== Function: [[string]] SplitLine([[string]] {{LSL Param|source}},[[string]] {{LSL Param|separator}},[[integer]] {{LSL Param|stride}}); ==
== Function: [[string]] SplitLine([[string]] {{LSL Param|source}},[[string]] {{LSL Param|separator}},[[integer]] {{LSL Param|stride}}); ==
<div style="padding: 0.5em;">
<div style="padding: 0.5em;">

Revision as of 08:50, 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>