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?

Était-ce utile?

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?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top