سؤال

بادئ ذي بدء ، كنت أستخدم هذا الموقع كمرجع من خلال عملية البرمجة النصية بأكملها وكانت رائعة. أنا أقدر مدى فائدة الجميع هنا. مع وضع ذلك في الاعتبار ، لدي سؤال بخصوص مطابقة (مطابقة الأنماط) في لوا. أنا أكتب نصًا يأخذ مدخلات من ملف بشكل أساسي ويستورده إلى جدول. أنا أتحقق من عناوين 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

نصائح أخرى

أنا فقط أغادر من العمل ولا يمكنني إلقاء نظرة أعمق على مشكلتك في الوقت الحالي ، لكن الخطين التاليين يبدوان غريبين للغاية.

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

في الأساس تقوم بإزالة كل ':' الأحرف في السلسلة t. بعد ذلك ينتهي بك المطاف مع s كون "000000000000". هذا هو على الارجح ليس ما تريد؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top