2010-08-11 7 views
0

Прежде всего, я использую этот сайт в качестве ссылки во всем процессе создания скриптов, и это было замечательно. Я ценю, насколько полезны и осведомлены все здесь. Имея это в виду, у меня есть вопрос относительно соответствия (сопоставления с образцом) в Lua. Я пишу сценарий, который по сути принимает входные данные из файла и импортирует его в таблицу. Я проверяю определенные MAC-адреса в файле как хост, который я запрашиваю.Проблема соответствия шаблону Lua Script

if macFile then 
    local file = io.open(macFile) 

    if file then 
    for line in file:lines() do 
     local f = line 
     i, j = string.find (f, "%x+") 
     m = string.sub(f, i, j) 
     table.insert(macTable, m) 
    end 
    file:close() 
    end 

Это анализирует файл в формате, который я буду использовать для запроса позже. После того как таблица будет построен, я бегу шаблон согласования последовательности, чтобы попытаться соответствовать MAC из таблицы итерируя таблицы и соответствие шаблону против текущей итерации:

local output = {} 
t = "00:00:00:00:00:00" 
s = string.gsub(t, ":", "") 
for key,value in next,macTable,nil do 
     a, p = string.find (s, value) 
     matchFound = string.sub(s, a, p) 
     table.insert(output, matchFound) 
end 

Это не возвращает никаких выходных данных хотя, когда Я ввожу его по строкам в приглашении Lua, похоже, работает. Я верю, что переменные передаются правильно. Какие-либо предложения?

+0

Что содержимое 'macFile'? – gwell

ответ

2

Если macFile использует структуру, как это:


008967452301 
000000000000 
ffffffffffff 

Следующий скрипт должен работать:

macFile = "./macFile.txt" 
macTable = {} 

if macFile then 
    local hFile = io.open(macFile, "r") 
    if hFile then 
     for line in hFile:lines() do 
      local _,_, sMac = line:find("^(%x+)") 
      if sMac then 
       print("Mac address matched: "..sMac) 
       table.insert(macTable, sMac) 
      end 
     end 
     hFile:close() 
    end 
end 

local output = {} 
t = "00:00:00:00:00:00" 
s = string.gsub(t, ":", "") 

for k,v in ipairs(macTable) do 
    if s == v then 
     print("Matched macTable address: "..v) 
     table.insert(output, v) 
    end 
end 
+0

Спасибо вам обоим. Адам, это именно то, что я искал. Это было не так просто, как простое условие равенства. Я ценю ваше время. – Timothy

0

Я просто ухожу с работы и не могу глубже рассмотреть вашу проблему прямо сейчас, но следующие две строки кажутся довольно странными.

t = "00:00:00:00:00:00" 
s = string.gsub(t, ":", "") 

В основном вы удаляете все ':' символы в строке t. Впоследствии вы получаете s, являющийся "000000000000". Это, вероятно, не то, что вы хотите?

+0

Ну, по сути, файл MAC, который я импортирую, - это mac, строка за строкой, без «:». Таким образом, моя таблица заполнена множеством разных записей, отформатированных без «:». Итак, чтобы соответствовать форматированию таблицы, мне нужно отформатировать t. Однако в сценарии переменная t будет автоматически заполнена. Но спасибо за письмо! – Timothy

+0

Вы подтвердили, что можете правильно проанализировать файл? Вы можете проверить его, выполнив 'для k, v в парах (macTable) сделать print (k, v) end'. Не могли бы вы разместить часть файла, который вы пытаетесь проанализировать? – ponzao

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