我从基本的控制语句操作中获得了非常意外的结果。我有以下内容,正在使用此类数据读取文件:
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
位的。我查了一下,没有铅/尾随空格或类似的东西。有什么想法吗?
答案 0 :(得分: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
!
答案 1 :(得分:2)
在文件开头可能是utf-8编码字节?尝试在“if”测试之前打印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]))
。