WoW:USERAPI CountChars

From AddOn Studio
Revision as of 16:37, 4 December 2007 by WoWWiki>Pcj
Jump to navigation Jump to search
This page documents a <i>user-defined function</i> that you can copy and paste into your addon. Replace PREFIX with your addon or lib prefix to avoid conflicts between different versions of these functions.

User defined functions

Return how many times needle is contained in haystack.

number = <PREFIX>_CountChars(haystack, needle)

Function Parameters

Arguments

haystack
String - The search subject.
needle
The string to look for. needle can be a regular expression ('[a-z%s%d]' will return the length of haystack)

Note: Arguments are cast into strings before any processing is done.
Known Issue(1): Regular expressions sometimes won't find all instances of needle in haystack.

Returns

number
Number of times needle is contained in haystack. If needle is not found, returns 0.


Example

number1 = <PREFIX>_CountChars("World of Warcraft", 'o')
number2 = <PREFIX>_CountChars("World of Warcraft", 'w[a-z]')
number3 = <PREFIX>_CountChars("World of Warcraft", 'r[a-z]')
number4 = <PREFIX>_CountChars("World of Warcraft", 'r[a-z][a-z]')

Result

number1 = 2
number2 = 2
number3 = 3
number4 = 2 -- even though there's actually 3 ("rld", "rcr", and "raf"). Known Issue(1)

Code

function <PREFIX>_CountChars (haystack, needle)
    haystack = strlower(tostring(haystack));
    needle = strlower(tostring(needle));
    local ret, pos = 0, 0
    for i = 1, strlen(haystack) do
        local s, e = strfind(haystack, needle, pos)
        if e then
            pos = e + 1
        end
        if s and e then
            ret = ret + 1;
        else
            break -- If it hasn't found any more, there's no reason to continue
        end
    end
    return ret
end