User talk:ANSI Soderstrom/Misc useful functions: Difference between revisions
Jump to navigation
Jump to search
m →printf |
m →printf: bad habbit |
||
| Line 9: | Line 9: | ||
// returns a string with all replacements for "modifier".... based on the equivalent positions in the list-content | // returns a string with all replacements for "modifier".... based on the equivalent positions in the list-content | ||
string printf(string sentence, list insertation) { | string printf(string sentence, list insertation) { | ||
integer | integer count = llGetListLength(insertation); | ||
if( | if(count) { | ||
list modifiers = ["%s"]; | list modifiers = ["%s"]; | ||
list split = llParseString2List(sentence, [], modifiers); | list split = llParseString2List(sentence, [], modifiers); | ||
| Line 25: | Line 25: | ||
//if (splitter == "%s") | //if (splitter == "%s") | ||
split = llListReplaceList(split, llList2List(split, i, i), k, k); | split = llListReplaceList(split, llList2List(split, i, i), k, k); | ||
} while( | } while(count > ++i); | ||
return (string)split; | return (string)split; | ||
} | } | ||
Revision as of 21:46, 14 May 2013
printf
Your printf will have a problem if the text being inserted contains "%s". I'd recommend either splitting the input string into a list or copying the output into a new string so that it doesn't get the opportunity to chew on it's own tail. -- Strife (talk|contribs) 12:10, 14 May 2013 (PDT)
<lsl> // modify a string in ANSI-C style // returns a string with all replacements for "modifier".... based on the equivalent positions in the list-content string printf(string sentence, list insertation) {
integer count = llGetListLength(insertation);
if(count) {
list modifiers = ["%s"];
list split = llParseString2List(sentence, [], modifiers);
integer last = llGetListLength(split) - 1;
integer i = 0;
integer k = -1;
do {
while(!~llListFindList(modifiers, llList2List(split, ++k, k))) {
if(k == last) {//this is an error!
return (string)split;
}
}
//string splitter = llList2String(split, k);
//if (splitter == "%s")
split = llListReplaceList(split, llList2List(split, i, i), k, k);
} while(count > ++i);
return (string)split;
}
return "Error, the insertation list is empty!\n(sentence: " + sentence + ")";
} </lsl>