2015-01-04 3 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 

Имейте в виду - это может работать вечно ...

Update: Я перечитал вопрос и теперь я не уверен, что тема стартера означает как:

Я не могу догадался, как сделать все это в одном цикле.

Мой первоначальный ответ заключался в попытке написать «все в одном», включая информацию о перечитании с устройства.

Также можно выполнить поиск по скорлупе (вдохновленный другой ответ): логика перечитала

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

Устройство пропущена в этом примере.

Смежные вопросы