Pregunta

En primer lugar, he estado utilizando este sitio como una referencia a través de todo el proceso de secuencias de comandos y ha sido maravilloso. Aprecio lo útil y todo el mundo profesional está aquí. Con esto en mente, tengo una pregunta sobre la coincidencia (coincidencia de patrones) en Lua. Estoy escribiendo un guión que básicamente toma la entrada de un archivo y lo importa en una tabla. Estoy comprobando para las direcciones MAC específica en el archivo como el anfitrión que estoy consultando.

  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

Esto analiza el archivo en un formato voy a utilizar para consultar más adelante. Una vez que la mesa está construida, corro una secuencia de coincidencia de patrones para tratar de coincidir con el MAC de la mesa mediante la iteración de la mesa y que cumpla el patrón en contra de la iteración actual:

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

Esto no devuelve ninguna salida, aunque cuando entro en línea por línea en un intérprete de Lua, parece que funciona. Las variables se pasan correctamente creo. ¿Alguna sugerencia?

¿Fue útil?

Solución

Si su MACFILE utiliza una estructura como esta:

012345678900
008967452301
000000000000
ffffffffffff

La siguiente secuencia de comandos debería 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

Otros consejos

Estoy a punto de salir del trabajo y no puedo tener una mirada más profunda a su problema en este momento, pero los siguientes dos líneas parecen bastante extraño.

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

Básicamente va a eliminar todos los caracteres en la ':' t cadena. Posteriormente se termina con ser s "000000000000". Esto probablemente no es lo que quiere?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top