我在Lua的桌子如下:
IP_ADAPTER_ADDRESSES
我正在尝试使用字符串对其进行索引,我已从CSV文件中读取该字符串。以下按预期工作:
tab = { y = 1, n = 2}
print(tab)
{
y : 1
n : 2
}
但是,这不能按预期工作:
print(tab['y'])
1
我尝试将col [2]强制转换为字符串,但仍然不按预期索引我的表。
很抱歉这个混乱,我写了一个string.split函数但忽略了将它包含在代码示例中。
我现在已经解决了这个错误。早些时候,我使用Matlab编写了CSV文件,并且单元格被错误地格式化为“数字”。将格式更改为“文本”后,代码将按预期工作。在我看来,这是一个非常奇怪的错误,导致了这种情况:
local file = io.open(label_file, "r")
for line in file:lines() do
local col = string.split(line, ",")
print(type(col[2])) -> string
print(col[2]) -> y
print( tab[ (col[2]) ]) -> nil
end
答案 0 :(得分:2)
如果要分割字符串,则必须使用string.gmatch:
local function split(str,delimiter) -- not sure if spelled right
local result = {}
for part in str:gmatch("[^"..delimiter.."]+") do
result[#result+1] = part
end
return result
end
for line in file:lines() do
local col = split(line,",")
print(col[2]) --> should print "y" in your example
-- well, "y" if your string is "something,y,maybemorestuff,idk"
print(tab[col[2]]) -- if it's indeed "y", it should print 1
end
请注意,拆分使用一种简单的模式,我懒得自动逃脱。在你的情况下这没有问题,但你可以使用"%w",任何字符使用"。",...分开任何字符...如果你想使用&#34 ;"作为分隔符,使用"%。"。