Проблема сопоставления скрипта lua
Вопрос
Прежде всего, я использовал этот сайт в качестве ссылки через весь процесс сценариев, и это было замечательно. Я ценю, насколько полезны и знающие все здесь. С учетом этого у меня есть вопрос относительно сопоставления (сопоставление шаблонов) в Луа. Я пишу скрипт, который по существу принимает вход из файла и импортирует его в таблицу. Я проверяю на определенные MAC-адреса в файле как хост, который я запрошаю.
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, кажется, работает. Переменные проходят правильно, я верю. Какие-либо предложения?
Решение
Если ваш MACFile использует структуру, как это:
012345678900
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
Другие советы
Я просто уезжаю с работы и не могу иметь более глубокий взгляд на вашу проблему прямо сейчас, но следующие две линии кажутся совершенно странными.
t = "00:00:00:00:00:00"
s = string.gsub( t, ":", "")
В основном вы удаляете все ':'
символы в строке t
. Отказ После этого вы в конечном итоге s
существование "000000000000"
. Отказ Это, вероятно, не то, что вы хотите?