WoW:USERAPI CountChars: Difference between revisions

From AddOn Studio
Jump to navigation Jump to search
mNo edit summary
m (Move page script moved page USERAPI CountChars to USERAPI CountChars without leaving a redirect)
 
(2 intermediate revisions by 2 users not shown)
Line 8: 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 27: 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 37: 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 49: 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[edit]

Arguments[edit]

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[edit]

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


Example[edit]

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[edit]

number1 = 2
number2 = 2
number3 = 3
number4 = 3

Code[edit]

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