質問
まず第一に、私はこのサイトをスクリプトプロセス全体を通じて参照として使用してきましたが、それは素晴らしいことです。誰もがここにいることがどれほど有用で知識が豊富であるかに感謝します。それを念頭に置いて、LUAのマッチング(パターンマッチング)に関する質問があります。ファイルから本質的に入力を取得し、テーブルにインポートするスクリプトを作成しています。ファイル内の特定のMacアドレスをホストとしてチェックしています。
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
これにより、ファイルは後でクエリするために使用する形式に解析します。テーブルが構築されたら、テーブルを反復し、パターンを現在の反復と一致させることにより、テーブルからMacを一致させるためにパターンマッチングシーケンスを実行します。
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
これは出力を返しませんが、LUAプロンプトにラインごとに入力すると、機能しているようです。変数は正しく渡されています。助言がありますか?
解決
MacFileが次のような構造を使用している場合:
012345678900
008967452301
000000000000
ffffffffffff
次のスクリプトが機能するはずです。
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
他のヒント
私はただ仕事から去っていますが、今あなたの問題をより深く見ることができませんが、次の2つの行は非常に奇妙に見えます。
t = "00:00:00:00:00:00"
s = string.gsub( t, ":", "")
基本的にあなたはすべてを削除しています ':'
文字列の文字 t
. 。その後、あなたは終わります s
であること "000000000000"
. 。これはおそらくあなたが望むものではありませんか?
所属していません StackOverflow