Lua Script Pattern Matching Problema
Domanda
Prima di tutto, ho usato questo sito come un punto di riferimento attraverso l'intero processo di script ed è stato meraviglioso. Apprezzo quanto sia utile e tutti competente è qui. Con questo in mente, ho una domanda per quanto riguarda corrispondenza (pattern matching) in Lua. Sto scrivendo uno script che prende essenzialmente input da un file e li importa in una tabella. Sto controllando per gli indirizzi MAC specifica nel file come host sto eseguendo la query.
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
Questa analizza il file in un formato userò per interrogare più tardi. Una volta che la tabella è costruito, corro una sequenza pattern matching per cercare di abbinare il MAC dalla tabella iterando il tavolo e che corrisponde al modello contro l'iterazione corrente:
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
Questa non restituisce alcun output anche quando entro in riga per riga in un prompt Lua, sembra funzionare. Le variabili sono passati correttamente credo. Qualche suggerimento?
Soluzione
Se il Macfile utilizza una struttura come questa:
012345678900
008967452301
000000000000
ffffffffffff
Lo script seguente dovrebbe funzionare:
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
Altri suggerimenti
Sono solo andando via dal lavoro e non posso avere uno sguardo più approfondito il problema in questo momento, ma le prossime due linee sembrano piuttosto strano.
t = "00:00:00:00:00:00"
s = string.gsub( t, ":", "")
In sostanza si sta rimuovendo tutti i personaggi ':'
nel t
stringa. In seguito si finisce con l'essere s
"000000000000"
. Questo probabilmente non è ciò che si vuole?