从LUA中的文本文件生成列表/数组

时间:2020-11-09 18:46:00

标签: arrays string list lua

我正在尝试将包含由Python脚本生成的数字列表的文本文件处理为LUA脚本。

文本文件包含此文件(我在python脚本中对其进行了格式化以匹配LUA的列表语法):

{"0.0", "0.1", "0.2", "0.3", "0.4", "0.5", "0.6", "0.7", "0.8", "0.9", "1.0", "834.3", "1667.6", "2500.9", "3334.2", "4167.5", "5000.8", "5834.1", "6667.4", "7500.7", "8334.0", "9167.3", "10000.6", "10833.9", "11667.2", "12500.5", "13333.8", "14167.1", "15000.4", "15833.7", "16667.0", "17500.3", "18333.6", "19166.9", "20000.2", "20833.5", "21666.8", "22500.1", "23333.4", "24166.7", "25000.0", "22244444.44", "44463888.89", "66683333.33", "88902777.78", "111122222.22", "133341666.67", "155561111.11", "177780555.56", "200000000.0", }

但是,当我尝试在LUA中读取它时,我首先使用此命令(其中“ params.style_weight_list”是指向先前生成的文本文件的链接):

print("SW LIST = ",params.style_weight_list)

这给了我这个结果:

SW LIST =   {"0.0", "0.1", "0.2", "0.3", "0.4", "0.5", "0.6", "0.7", "0.8", "0.9", "1.0", "834.3", "1667.6", "2500.9", "3334.2", "4167.5", "5000.8", "5834.1", "6667.4", "7500.7", "8334.0", "9167.3", "10000.6", "10833.9", "11667.2", "12500.5", "13333.8", "14167.1", "15000.4", "15833.7", "16667.0", "17500.3", "18333.6", "19166.9", "20000.2", "20833.5", "21666.8", "22500.1", "23333.4", "24166.7", "25000.0", "22244444.44", "44463888.89", "66683333.33", "88902777.78", "111122222.22", "133341666.67", "155561111.11", "177780555.56", "200000000.0", }    

但是一切似乎都很好(第一个括号之前有几个空格,尽管不知道为什么)

但是当我尝试以此方式从列表中访问特定项目时(frameIdx是一个int):

local neu_sw = params.style_weight_list[frameIdx]

它返回一个nil值,所以我想我必须将导入的列表从字符串转换为LUA中适当的可用列表,但不知道如何?有人有主意吗?

2 个答案:

答案 0 :(得分:0)

如果不确定脚本中发生了什么,可以随时调试代码。

  1. 使用printtype查看您拥有的值及其类型。

  2. for k,v in pairs(tbl) do print(k,v) end检查表,看看它是否确实具有该键。

如我所见,params.style_weight_list不是表,而是字符串。您可以使用load将字符串转换为带有Lua表的脚本,loadfile可以直接从文件中读取它(或使用require,这需要在return 前面加上文件的开头),或制作一个读取值的解析器(更合适的方法,但对于初学者来说很复杂)

答案 1 :(得分:0)

感谢您对Nifim和Spar的帮助!

由于您的见解,我成功了。如果可以的话,请按以下步骤操作:

  • 将我的python数组导出到一个txt文件(带有lua扩展名,可能没用,但帮助我将其保留在文件夹中),并逐行取一个值,没有其他格式元素。 “ a”是我在python中的数组。

    LUA_in = n *'{} \ n'
    LUA_format = LUA_in.format(* a)
    LUA_file = open(“ sw.lua”,“ w”)
    LUA_file.write(LUA_format)

  • ,然后在lua中读取它,创建一个空表,每表行添加一个值/行,并读取我需要的特定行。

    sw_array = {}
    用于io.lines(“ sw.lua”)中的行
    table.insert(sw_array,line)
    结束

    本地cur_sw = sw_array [frameIdx + 1]

其中frameIdx是我要读取的特定值索引(和“ +1”,因为lua表从1开始计数,而python从0开始计数)