Lua script Problema de coincidencia de patrones
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?
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?