循环直到找到表中的匹配

时间:2015-01-04 05:22:19

标签: for-loop lua lua-table

我有表格,如果循环没有找到表格中的匹配键,它每次都会更新。

for d in io.popen("ls -a /mnt/mediashare/net"):lines() do
    OnlineCheck[#OnlineCheck+1] = d
end

首先我将值添加到表中然后我运行另一个循环以找到匹配表单如果它找到匹配循环中断但如果没有那么它应该重新加载具有新值的表并再次开始匹配。我无法弄清楚如何在单循环中完成所有操作。

for d1,d2 in pairs(OnlineCheck) do

    if d2==NASFolder then
        print("NAS Connected")

        break
    else
        print("NAS is Offline")

    end 
end 

2 个答案:

答案 0 :(得分:0)

在Lua 5.2中你应该能够做到:

local connected = os.execute(('[ -d /mnt/mediashare/net/%q ]'):format(NASFolder))

(对于Lua 5.1,将os.execute()的结果与0进行比较。)

答案 1 :(得分:0)

您无需在表格中收集行,即时执行匹配:

function findUntilMatch(NASFolder)
  for line in io.popen("ls -a /mnt/mediashare/net"):lines() do
    if line == NASFolder then
        print("NAS Connected")
        return
    end
    print("NAS is Offline")
    return findUntilMatch(NASFolder) -- tail call recursion
end

请记住 - 它可能永远存在......

更新:我已经重读了这个问题,现在我不确定启动器的主题是什么:

  

我无法弄清楚如何在单循环中完成所有操作。

我原来的答案是尝试编写包含来自设备的重读信息的全包单循环。

也可以通过shell执行搜索(灵感来自另一个答案):

local connected = io.popen("ls -a /mnt/mediashare/net | grep '^" .. NASFolder .. "$'"):read()

此示例中错过了设备重读逻辑。