Lua Script Motif Matching Problème
Question
Tout d'abord, j'ai utilisé ce site comme référence à travers l'ensemble du processus de script et il a été merveilleux. Je vous remercie de l'utilité et tout le monde est bien informé ici. Dans cet esprit, j'ai une question concernant l'appariement (pattern matching) dans Lua. Je suis en train d'écrire un script qui prend essentiellement la contribution d'un fichier et l'importe dans une table. Je vérifie les adresses MAC de spécifique dans le fichier en tant qu'hôte j'Interrogation.
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
Cette analyse le fichier dans un format que je vais utiliser pour interroger plus tard. Une fois que le tableau est construit, je lance une séquence de mise en correspondance de motif pour essayer de correspondre à la MAC de la table en itérant la table et correspondant au motif contre l'itération courante:
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
Cela ne retourne pas de sortie bien quand je rentre ligne par ligne dans une invite Lua, il semble fonctionner. Les variables sont transmises correctement je crois. Toutes les suggestions?
La solution
Si votre MacFile utilise une structure comme ceci:
012345678900
008967452301
000000000000
ffffffffffff
Le script devrait fonctionner:
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
Autres conseils
Je suis en train de quitter le travail et ne peut pas avoir un regard plus profond à votre problème en ce moment, mais les deux lignes suivantes semblent tout à fait bizarre.
t = "00:00:00:00:00:00"
s = string.gsub( t, ":", "")
En gros vous supprimant tous les caractères ':'
dans la chaîne t
. Ensuite vous vous retrouvez avec s
être "000000000000"
. Ceci est probablement pas ce que vous voulez?