WoW:USERAPI CountChars

From AddOn Studio
Revision as of 21:18, 9 November 2007 by WoWWiki>Egingell (New page: {{userfunc}} <!-- Leave this line in! --> <center>'''CountChars''' ''- by egingell -''</center> Return how many times ''needle'' is contained in ''haystack''. number = ...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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

CountChars - by egingell -

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