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

루아 5.2에서 당신이 할 수있을 것입니다 :

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

가 (0과 루아 5.1 (os.execute 비교)의 결과)

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() 

장치 재판 독 로직은이 예에서 누락되어

는 (다른 답변 영감) 쉘에 의해 검색을 수행하는 것도 가능하다.