我能将一个存储在表中的值作为另一个表中的键使用吗?
2020-8-11 13:16:35
收藏:0
阅读:142
评论:1
我对LUA还是比较陌生,还没掌握LUA中的类是如何工作的,所以我的问题可能有一个非常简单的答案。我正在尝试创建一个函数,将CSV文件转换成LUA表格。
输入文件可能是这样的
PropertyKey1,Propertykey2,Propertykey3
object1property1,object1property2,object1property3
object2property1,object2property2,object2property3
object3property1,object3property2,object3property3
我希望生成的LUA表格看起来像这样
objects = {
{
PropertyKey1 = object1property1
PropertyKey2 = object1property2
PropertyKey3 = object1property3
}
{
PropertyKey1 = object2property1
PropertyKey2 = object2property2
PropertyKey3 = object2property3
}
{
PropertyKey1 = object3property1
PropertyKey2 = object3property2
PropertyKey3 = object3property3
}
}
目前我的代码如下
function loadcsv(path)
local OutTable = {}
local file = io.open(path, "r")
local linecount = 0
for line in file:lines() do
local data = {}
local headers = {}
local headerkey = 1
if linecount < 1 then
for val in line:gmatch("([^,]+),?") do
table.insert(headers, val)
end
else
for word in line:gmatch("([^,]+),?") do
key = headers[headerkey]
data[headerkey] = word
headerkey = headerkey + 1
table.insert(OutTable, data)
end
end
linecount = linecount + 1
end
file:close()
return OutTable
end
以上代码无法运行。当我尝试输出任何一个值时,它们都是nil。 问题在于这段代码
key = headers[headerkey]
data[headerkey] = word
我想在第二个表中使用存储在一个表中的值作为键,但是看起来LUA只传递引用,所以这不起作用。
我进行了快速实验,首先设置了2个表格。
test = {}
test2 = {}
test[1]={"index"}
key = test[1]
key2 = "index"
首先我尝试直接从表格中分配值
test2[test[1]] = "text"
print(test2.index) --这没有工作
然后我尝试通过另外一个变量来进行
test2[key] = "texto"
print(test2.index) --这没有工作
我甚至尝试使用tostring()
key = tostring(test[1])
test2[key] = "texto"
print(test2.index) --这没有工作
我直接将字符串写在“key2”变量中,以确认我使用了正确的符号。
test2[key2] = "text"
print(test2.index) --这可以工作
我看了一些关于元表的资料,但我还不是完全清楚元表的用法。这是我尝试做的最简单的方法,还是我的方法有缺陷?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的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 代码?

key = headers[headerkey]key变量没有被使用,为什么需要给它赋值?headerkey是一个数字键。你从每行的1开始,每个单词加1。所以你得到的结果是:data = { [1] = "object1property1", [2] = "object1property2", [3] = "object1property3" }而不是预想中的
data = { PropertyKey1 = "object1property1", PropertyKey2 = "object1property2", PropertyKey3 = "object1property3" }所以你可能想要写成
local key = headers[headerkey] data[key] = word但你必须把
headers移出循环。否则你会在第一行得到一个空的表,导致key变成nil,这可能会导致使用nil进行索引的 Lua 错误。以下行是为每个单词调用的:
table.insert(OutTable, data)你需要对每行进行这个操作!
你的代码基本上产生了这个输出:
local tableA = {"object1property1", "object1property2", "object1property3"} local tableB = {"object2property1", "object2property2", "object2property3"} local tableC = {"object3property1", "object3property2", "object3property3"} OutTable = { tableA, tableA, tableA, tableB, tableB, tableB, tableC, tableC, tableC }建议你用你的母语编写程序,然后将其翻译成Lua。这有助于避免这样的错误。
你的问题与元表、类或其他提到的任何内容无关。你只是使用了错误的变量并弄乱了内部循环。