2015-01-04 72 views
1
中找到匹配

我有表,每次更新時都會更新,如果循環未找到表中的匹配項。循環直到在表

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 
+0

你的代碼會產生一個問題:我們需要顯式地關閉()一個管道,還是讀取所有的數據就足夠了? –

回答

0

在Lua的5.2,你應該能夠做到:

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

(爲lua 5.1,比較os.execute()的結果爲0)

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 

請記住 - 它可能永遠運行下去......

更新:我重讀這個問題,現在我不知道首發意味着什麼題目爲:

我無法理解了它是如何做到這一切的單迴路。

我最初的答案是嘗試編寫包含從設備重讀信息的全單循環。

另外,也可以執行由殼搜索(由另一個答案啓發):

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

設備重讀邏輯被錯過了在這個例子。