Pergunta

Primeiro de tudo, eu tenho vindo a utilizar este site como uma referência através de todo o processo de criação de scripts e tem sido maravilhoso.Eu aprecio como útil e experiente de todo mundo está aqui.Com isso em mente, eu tenho uma pergunta a respeito de correspondência (correspondência de padrões) na Lua.Eu estou escrevendo um script que essencialmente tem a entrada de um arquivo e importações-lo em uma tabela.Eu sou a verificação de específicos de endereços MAC do arquivo como o host estou a consultar.

  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

Este analisa o arquivo em um formato que irá utilizar para consulta posterior.Uma vez que a tabela é construída, uma correspondência de padrão de seqüência para tentar igualar o MAC da tabela por iteração a tabela de correspondência e o padrão contra a iteração atual:

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

Isso não retornará nenhuma saída, apesar de que quando eu entrar-lo linha por linha em uma Lua de comandos, parece funcionar.As variáveis estão sendo passados corretamente, eu acredito.Alguma sugestão?

Foi útil?

Solução

Se o seu macFile usa uma estrutura como esta:

012345678900
008967452301
000000000000
ffffffffffff

O seguinte script deve funcionar:

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

Outras dicas

Eu estou saindo do trabalho e não pode ter um olhar mais profundo no seu problema agora, mas as duas linhas de parecer bastante estranho.

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

Basicamente, você está removendo todas as ':' caracteres na seqüência de caracteres t.Depois que você acabar com s sendo "000000000000".Provavelmente não é isso que você quer?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top