BUG of LUA or Muchclient?

Posted by Paragate on Mon 07 Mar 2011 11:31 PM — 4 posts, 19,610 views.

#0
If one has a string like this:
s={"a","b","c","d-e"}

Then string.find(s,"d-e") will return nil.

The pattern I want to find is saved in a variable and it keeps changing, we don't know if the pattern to find has "-"
or not, so to add "%" is not a good option for me.

Anyway to solve this? thanks
Amended on Tue 08 Mar 2011 07:16 PM by Paragate
USA #1
Paragate said:

If one has a string like this:
s={"a","b","c","d-e"}

This isn't a string, it's an array of strings. If you want to find a specific string within an array, you do:

local find_this = "d-e"

local idx = nil
for i,str in ipairs(s) do
  if str == find_this then
    idx = i
    break
  end
end

if idx then
  -- it was found
end


You can even wrap this up as a generic function:
table.find = function(t, match)
  for k, v in pairs(t) do
    if v == match then
      return k
    end
  end
  return nil
end


-- Usage:
local t = {"foo", "bar", "baz"}
local i = table.find(t, "bar")
Note(i) -- should be 2
Australia Forum Administrator #2
Paragate said:

If one has a string like this:
s={"a","b","c","d-e"}

Then string.find(s,"d-e") will return nil.


No, it doesn't. Test case:


s={"a","b","c","d-e"}

a = string.find(s,"d-e")


Results:

Run-time error
World: Smaug
Immediate execution
[string "Immediate"]:3: bad argument #1 to 'find' (string expected, got table)
stack traceback:
        [C]: in function 'find'
        [string "Immediate"]:3: in main chunk


You can't pass a table to string.find. So, it's not a bug.
#3
Thank you very much for the reply.
The generic function solved my problem

I used:
local str=table.concat(s,",") first before I use
string.find(str,pat)

Thanks for the replay again.


Nick Gammon said:

Paragate said:

If one has a string like this:
s={"a","b","c","d-e"}

Then string.find(s,"d-e") will return nil.


No, it doesn't. Test case:


s={"a","b","c","d-e"}

a = string.find(s,"d-e")


Results:

Run-time error
World: Smaug
Immediate execution
[string "Immediate"]:3: bad argument #1 to 'find' (string expected, got table)
stack traceback:
        [C]: in function 'find'
        [string "Immediate"]:3: in main chunk


You can't pass a table to string.find. So, it's not a bug.