WoW:USERAPI CountChars: Difference between revisions

From AddOn Studio
Jump to navigation Jump to search
m (New page: {{userfunc}} <!-- Leave this line in! --> <center>'''CountChars''' ''- by egingell -''</center> Return how many times ''needle'' is contained in ''haystack''. number = ...)
 
m (Move page script moved page USERAPI CountChars to USERAPI CountChars without leaving a redirect)
 
(3 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{userfunc}} <!-- Leave this line in! -->
{{userfunc}} <!-- Leave this line in! -->
<center>'''CountChars''' ''- by [[user:egingell|egingell]] -''</center>


Return how many times ''needle'' is contained in ''haystack''.
Return how many times ''needle'' is contained in ''haystack''.
Line 9: Line 8:


:;haystack: String - The search subject.
:;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'')
:;needle: The string to look for. ''needle'' can be a regular expression ('[a-z%s%d]' will count all alphanumeric characters and white spaces)
 
;Notes
: Arguments are cast into strings before any processing is done.
: The search is not case-sensitive.


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


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


==Code==
==Code==
Line 38: Line 39:
         local s, e = strfind(haystack, needle, pos)
         local s, e = strfind(haystack, needle, pos)
         if e then
         if e then
             pos = e + 1
             pos = e
            if s == e then
                pos = pos + 1
            end
         end
         end
         if s and e then
         if s and e then
Line 50: Line 54:


__NOTOC__
__NOTOC__
[[Category:User Defined Functions]]
[[Category:User defined functions]]

Latest revision as of 04:49, 15 August 2023

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 count all alphanumeric characters and white spaces)
Notes
Arguments are cast into strings before any processing is done.
The search is not case-sensitive.

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 = 3

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
            if s == e then
                pos = pos + 1
            end
        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