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