如何从ipairs中提取值?

时间:2017-12-07 03:18:23

标签: parsing lua command

当我写命令时,结果低于一。

No   ID         Sub-Id             Sig    Mode
22   DarrenIm   00:00:00:1a:00     60     13n/d
32   DarrenYou  00:00:00:1b:01     80     13n/d

我想提取Sig值(并且从比较sig值,我想获得最高Sig值并希望在同一列中获得ID)。我试了但是我有问题。 这是我的代码。

f = assert(io.popen("Here is my command"))

local val = {}

for line in f:lines() do
    print(line)
    for v in line:gmatch'[%d]%d' do
            table.insert(val, v)
    end

    for i, v in ipairs(val) do
            m = math.max(i)
            n = m-1
            sig = v
            print(sig)
    end

print(n)

end

f:close()

然而,当我使用sig [n]时出现错误,所以我无法提取值。 通过比较这些值,我想得到最高的信号,并在同一列中获得Id。 如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

让我们来看看你的代码。首先你得到一个文件句柄

f = assert(io.popen("Here is my command"))

然后你创建一个表

local val = {}

您逐行阅读文件,打印

for line in f:lines() do
    print(line)

您将每行'[%d]%d'的每个匹配项都插入到表val

    for v in line:gmatch'[%d]%d' do
            table.insert(val, v)
    end

现在你做了一些只有在将你的文件的所有行解析成val之后才有意义的事情。但是,这仍然是针对每一行完成的,因为您仍然在行循环中。

    for i, v in ipairs(val) do

我是一个数字,单个数字的最大值是多少?所以这一行是无稽之谈。

            m = math.max(i)
            n = m-1

sig是一个全局变量。在你的情况下,它是一个字符串。所以sig [n]当然会给你一个错误,因为你只能索引表值。

            sig = v
            print(sig)
    end

print(n)

end

f:close()

字符串模式' [%d]'并没有多大意义。 []创建一类字符。 %d代表任何数字。仅仅将它放入一个类中对于使用%d没有任何区别。

您的代码显示您在Lua中缺乏非常基本的知识。请尝试解析文件,做一些初学者教程。

您的代码结构表明您并未真正考虑操作顺序。得到笔和纸,并考虑你开始编程。