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?

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top