-->

具有奇数行为的Lua控制Statments(Lua Control Statments having

2019-10-19 05:03发布

我碰到什么应该是基本的控制语句操作非常意外的结果。 我有以下的,被读取这类数据的文件:

1, 51, one , ab
1, 74, two , ab
0, 74, tree , ab
0, 74, for , ab
0, 74, five , ab

我的Lua代码剪断用于处理它:

if file then
for line in file:lines() do
LineArray = line
CanClaimInfo[LineArray] = {}
lineData = utils.split(line,",")
    if lineData[1] == "0"  then
        lineData[1] = "CAN A"
    elseif lineData[1] == "1" then
        lineData[1] = "CAN B"
    else
        lineData[1] = lineData[1]
    end
CanClaimInfo[LineArray]["CANBus"] = lineData[1]
CanClaimInfo[LineArray]["Address"] = lineData[2]
CanClaimInfo[LineArray]["Name"] = lineData[3]
end

我得到这个作为输出:

CAN A   74  for
CAN A   74  tree
CAN A   74  five
CAN B   74  two
1       51  one

我不明白它是如何滑过elseif lineData[1] == "1" then位。 我查了一下,有没有铅/尾随空格或类似的东西。 有任何想法吗?

Answer 1:

也许UTF-8编码的字节在文件的开头? 尝试打印lineData [1]之前的“如果”测试,看看它是什么,并print(#lineData[1])看看它有多少个字符了。 有可能超过1个字符,因此在第三分支(否则)结束:

lineData = utils.split(line,",")
print(#lineData[1]) -- likely prints 1 for all but first line
if lineData[1] == "0"  then

为了找到额外的字节,尝试print(string.byte(lineData[1], 1, #lineData[1]))



Answer 2:

嗯,好像你utils.split功能存在一些问题。 我用从一个函数http://lua-users.org/wiki/SplitJoin ,它工作得很好与您的代码:

utils = {
    split = function(str, pat)
       local t = {}  -- NOTE: use {n = 0} in Lua-5.0
       local fpat = "(.-)" .. pat
       local last_end = 1
       local s, e, cap = str:find(fpat, 1)
       while s do
          if s ~= 1 or cap ~= "" then
         table.insert(t,cap)
          end
          last_end = e+1
          s, e, cap = str:find(fpat, last_end)
       end
       if last_end <= #str then
          cap = str:sub(last_end)
          table.insert(t, cap)
       end
       return t
    end
}

也许你的功能1转换成数(无论何种原因)。 在Lua中, "1" ~= 1



文章来源: Lua Control Statments having odd behavior