Library Common String Functions
This is a list of useful functions for string manipulation. Most of these are lsl versions of the built-in VB string functions with some enhancements. Enjoy.
See comments before each function for usage!
////////////////////////////////////////////////////////////////////////////
// GarrMe Dagger's Common String Functions v.10.13.07 //
// Copyright (c) 2007 Mark Timlin //
////////////////////////////////////////////////////////////////////////////
// //
// This program is free software: you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation version 3 of the License. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
// General Public License for more details - http://www.gnu.org/licenses //
// //
////////////////////////////////////////////////////////////////////////////
// Returns a new string containing the leftmost length characters of source.
string StringLeft(string source, integer length)
{
return llGetSubString(source, 0, length - 1);
}
// Returns a new string containing the rightmost length characters of source.
string StringRight(string source, integer length)
{
return llGetSubString(source, llStringLength(source) - length, -1);
}
// Returns a new string containing the reverse of source.
string StringReverse(string source)
{
string str;
integer x;
integer len = llStringLength(source);
for (x = 1; x <= len; x++)
str += llGetSubString(source, len - x, len - x);
return str;
}
// Returns the index in source where pattern first appears beginning from the end of source.
// Returns -1 if no match is found.
integer SubStringIndexReverse(string source, string pattern)
{
string str = source;
integer len = llStringLength(pattern);
integer rval = llSubStringIndex(source, pattern);
integer last = rval;
while (rval > -1)
{
str = llGetSubString(str, rval + len, -1);
rval = llSubStringIndex(str, pattern);
if (rval > -1)
last = last + len + rval;
}
rval = last;
return rval;
}
// Returns a new string with spaces removed from the beginning of source
string StringLeftTrim(string source)
{
integer x = 0;
string str = llGetSubString(source, 0, 0);
while (str == " ")
{
str = llGetSubString(source, x, x);
++x;
}
return llGetSubString(source, x - 1, -1);
}
// Returns a new string with spaces removed from the end of source
string StringRightTrim(string source)
{
integer x = -1;
string str = llGetSubString(source, -1, -1);
while (str == " ")
{
--x;
str = llGetSubString(source, x, x);
}
return llGetSubString(source, 0, llStringLength(source) + x);
}
// Returns a new string with number spaces added to beginning of source.
string StringSpace(string source, integer number)
{
string str = "";
integer x;
for (x = 0; x < number; x++)
{
str += " ";
}
return str + source;
}
// Returns 1 (TRUE) if source is a number, otherwise returns 0 (FALSE).
integer StringIsNumeric(string source)
{
integer rval = 0;
if ((float)source >= 1.175494351E-38)
rval = 1;
return rval;
}
// Returns a new string replacing all instances of old with new starting at pos in source.
// A pos of 0 would begin replacing old with new at the beginning of source.
// A pos of 10 would begin replacing old with new at the 10th character of source.
string StringReplace(integer pos, string source, string old, string new)
{
string str = source;
string pre = "";
if (pos > 0)
{
pre = llGetSubString(source, 0, pos - 1);
str = llGetSubString(source, pos, -1);
}
integer len = llStringLength(old);
integer index = llSubStringIndex(str, old);
while (index > -1)
{
str = llInsertString(llDeleteSubString(str, index, index + len - 1), index, new);
index = llSubStringIndex(str, old);
}
return pre + str;
}
// Returns a new string containing the characters between start and end starting at pos in source.
// A pos of 0 would begin looking for start at the beginning of source.
// A pos of 10 would begin looking for start at the 10th character of source.
// Returns "" on error.
string StringBetween(integer pos, string source, string start, string end)
{
if (pos > 0)
source = llGetSubString(source, pos, -1);
integer sindex = llSubStringIndex(source, start);
integer eindex = llSubStringIndex(source, end);
if (sindex == -1 || eindex == -1)
return "";
else return llGetSubString(source, sindex + llStringLength(start), eindex -1);
}