Вопрос

Прежде всего, я использовал этот сайт в качестве ссылки через весь процесс сценариев, и это было замечательно. Я ценю, насколько полезны и знающие все здесь. С учетом этого у меня есть вопрос относительно сопоставления (сопоставление шаблонов) в Луа. Я пишу скрипт, который по существу принимает вход из файла и импортирует его в таблицу. Я проверяю на определенные 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". Отказ Это, вероятно, не то, что вы хотите?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top