【问题标题】:generating list/array from a text file in LUA从 LUA 中的文本文件生成列表/数组
【发布时间】:2021-02-21 17:17:27
【问题描述】:

我正在尝试将包含数字列表(从 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 中正确的可用列表,但不知道如何?有人有想法吗?

【问题讨论】:

  • 如果您更改 python 输出以创建有效的 lua 文件,您可以在该文件上调用 require,或使用 loadfile 加载它

标签: arrays string list lua


【解决方案1】:

感谢 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 开始计数)

【讨论】:

    【解决方案2】:

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

    1. 使用printtype 来查看你有什么值以及它的类型。

    2. for k,v in pairs(tbl) do print(k,v) end检查你的表,看看它是否真的有那个键。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-27
      • 2018-08-19
      • 2010-10-20
      • 2015-06-26
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多