从CSV文件读取的字符串不能索引Lua中的表

时间:2016-02-12 09:18:17

标签: lua lua-table

我在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    

1 个答案:

答案 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 ;"作为分隔符,使用"%。"。