Lua 控制语句具有奇怪的行为。
2014-1-15 1:1:14
收藏:0
阅读:101
评论:2
我从基本的控制语句操作中得到一个非常意外的结果。我有以下内容,正在读取此类数据的文件:
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 部分的。我检查了,没有导致前/后空格或类似的东西。有任何想法吗?
点赞
用户869951
也许是文件开头的 utf-8 编码字节?尝试在“if”检测之前打印 lineData[1] 看看它是什么,然后使用 print(#lineData[1]) 查看它有多少个字符。很可能有多个字符,因此它会在第三个分支(else)中出现:
lineData = utils.split(line, ",")
print(#lineData[1]) -- 对于除了第一行之外的所有行,可能都打印 1
if lineData[1] == "0" then
要找到额外的字节,请尝试 print(string.byte(lineData[1], 1, #lineData[1]))。
2014-01-15 03:26:08
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
嗯,看起来你的utils.split函数存在一些问题。我使用了来自http://lua-users.org/wiki/SplitJoin的函数,并且它与您的代码配合得相当好:
utils = { split = function(str, pat) local t = {} -- 注意:在Lua-5.0中使用{n = 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!