Lua中从CSV文件读取的字符串无法索引我的表

我在Lua中有一个如下的表:

tab = { y = 1, n = 2}

print(tab)
{
  y : 1
  n : 2
}

我正在尝试使用从CSV文件中读取的字符串对其进行索引。下面的代码按预期工作:

print(tab['y'])
1

但是,以下代码不按预期工作:

local file = io.open(label_file,“r”)

for line in file:lines()do
    local col = string.split(line,”,”)
    printtype(col [2])) -〉string
    print(col [2])-〉y
    print(tab [(col [2])])-〉nil
end

我已经尝试将col \ [2 ]强制转换为字符串,但仍无法按预期索引我的表。


抱歉造成混淆,我编写了一个string.split函数,但在上面的代码示例中忘记了包含它。

我现在已经解决了这个错误。早些时候,我使用Matlab编写了CSV文件,单元格的格式不正确,被格式化为“数字”。将格式更改为“文本”后,代码正常工作。在我看来,这是一个非常奇怪的错误,会导致这种情况发生:

    printtype(col [2])) -〉string
    print(col [2])-〉y
    print(col [2] == 'y'))→false
点赞
用户5352026
用户5352026

如果你想要分割一个字符串,你就需要使用 string.gmatch:

local function split(str,delimiter) -- 不确定拼写是否正确
    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]) --> 应该在你的例子中打印 "y"
    -- 好吧,如果你的字符串是 "something,y,maybemorestuff,idk",那么它就是 "y"
    print(tab[col[2]]) -- 如果确实是 "y",则应该打印 1
end

请注意,split 使用一个简单的模式,我懒得自动转义。在你的情况下,这不是问题,但你可以使用 "%w" 分割任何字符,使用 "." 分割任何字符,...如果你想使用 "." 作为分隔符,请使用 "%."。

2016-02-12 10:36:44