0

まず第一に、私はこのサイトをスクリプト作成プロセス全体を通してリファレンスとして使用してきましたが、これは素晴らしいものでした。ここにいる皆さんがどれほど有用で知識が豊富であるかに感謝します。そこで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 プロンプトで 1 行ずつ入力するとうまくいくようです。変数は正しく渡されていると思います。助言がありますか?

4

2 に答える 2

2

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
于 2010-08-12T19:05:24.220 に答える
0

私は仕事を辞めたばかりで、今はあなたの問題を詳しく調べることはできませんが、次の 2 行はかなり奇妙に思えます。

t = "00:00:00:00:00:00"
s = string.gsub( t, ":", "")

基本的に、 string 内のすべての':'文字を削除していますt。その後、あなたは にsなり"000000000000"ます。これはおそらくあなたが望むものではありませんか?

于 2010-08-11T15:27:21.547 に答える