如何从ipairs中提取值?

当我输入命令时,结果如下所示。

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 = assertio.popen"这是我的命令"))

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。 如何解决这个问题?

点赞
用户2858170
用户2858170

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

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

i 是一个数字,一个单一数字的最大值是多少?所以这一行是无意义的。

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

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

            sig = v
            print(sig)
    end

print(n)

end

f:close()

字符串模式 '[%d]' 没有太多意义。[] 创建一个字符类。而 %d 表示任何数字。把它放入一个类中单独使用与仅使用 %d 没有区别。

你的代码表明你缺乏 Lua 的非常基本的知识。请在尝试解析文件之前完成一些初学者教程。

你的代码结构表明你没有真正考虑操作顺序。拿起笔和纸,在开始编程之前思考。

2017-12-07 20:51:37