Lua Script Pattern Matching Problem
Frage
Zunächst einmal habe ich die Nutzung dieser Website als Referenz durch den gesamten Scripting Prozess, und es ist wunderbar. Ich schätze, wie nützlich und kenntnisreich ist jeder hier. Vor diesem Hintergrund habe ich eine Frage bezüglich Matching (Mustervergleich) in Lua. Ich bin ein Skript zu schreiben, die Eingabe erfolgt im Wesentlichen aus einer Datei und importiert sie in einer Tabelle. Ich bin für bestimmte MAC-Adressen in der Datei als Host-Überprüfung mir Abfrage bin.
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
Diese analysiert die Datei in ein Format, werde ich später Abfrage verwenden. Sobald die Tabelle erstellt wird, laufe ich durch Iterieren den Tisch und passende das Muster gegen den aktuellen Iteration ein Pattern-Matching-Sequenz, um zu versuchen und die MAC aus der Tabelle übereinstimmen:
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
Diese Rückkehr keine Ausgabe obwohl, wenn ich es für Zeile in einer Lua Eingabeaufforderung eingeben, es scheint zu funktionieren. Die Variablen werden übergeben richtig glaube ich. Irgendwelche Vorschläge?
Lösung
Wenn Ihr MacFile verwendet eine Struktur wie folgt aus:
012345678900
008967452301
000000000000
ffffffffffff
Das folgende Skript sollte funktionieren:
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
Andere Tipps
Ich bin gerade von der Arbeit zu verlassen und kann nicht einen tieferen Blick auf Ihr Problem jetzt haben, aber die nächsten beiden Zeilen scheinen ziemlich seltsam.
t = "00:00:00:00:00:00"
s = string.gsub( t, ":", "")
Grundsätzlich Sie entfernen alle ':'
Zeichen in der Zeichenfolge t
. Anschließend beenden Sie mit s
Wesen "000000000000"
auf. Dies ist wahrscheinlich nicht das, was Sie wollen?