كيفية تحميل ملف نصي إلى نوع من المتغير مثل الجدول في LUA؟

StackOverflow https://stackoverflow.com/questions/1891473

  •  19-09-2019
  •  | 
  •  

سؤال

أحتاج إلى تحميل ملف لمتغيرات LUA.

دعنا نقول حصلت

name address email

هناك مساحة بين كل منها. أحتاج إلى الملف النصي الذي يحتوي على X - العديد من هذه الخطوط الموجودة فيها إلى نوع من الكائنات - أو لا يقطع سطر واحد على الأقل إلى مجموعة من السلاسل مقسوما على مسافات.

هل هذا النوع من المهمة الممكنة في لوا وكيف يجب أن أفعل هذا؟ أنا جديد جدا في لوا لكنني لم أتمكن من العثور على أي شيء مناسب على الإنترنت.

هل كانت مفيدة؟

المحلول

للتوسع في إجابة أوركس:

local file = io.open("filename.txt")
if file then
    for line in file:lines() do
        local name, address, email = unpack(line:split(" ")) --unpack turns a table like the one given (if you use the recommended version) into a bunch of separate variables
        --do something with that data
    end
else
end
--you'll need a split method, i recommend the python-like version at http://lua-users.org/wiki/SplitJoin
--not providing here because of possible license issues

ومع ذلك، فإن هذا لن يغطي القضية التي تحتوي عليها أسماءك مسافات فيها.

نصائح أخرى

تريد أن تقرأ عنه لوا أنماط, ، والتي هي جزء من مكتبة السلسلة. وبعد فيما يلي وظيفة مثال (غير اختبار):

function read_addresses(filename)
  local database = { }
  for l in io.lines(filename) do
    local n, a, e = l:match '(%S+)%s+(%S+)%s+(%S+)'
    table.insert(database, { name = n, address = a, email = e })
  end
  return database
end

هذه الوظيفة مجرد الاستيلاء على ثلاثة أسماثية تتكون من nonspace (%S) الشخصيات. وظيفة حقيقية لديها بعض التحقق من الأخطاء للتأكد من تطابق النمط في الواقع.

إذا كان لديك التحكم في تنسيق ملف الإدخال، فستكون أفضل حالا لتخزين البيانات بتنسيق LUA كما هو موضح هنا.

إذا لم يكن كذلك، استخدم IO Library. لفتح الملف ثم استخدم مكتبة السلسلة مثل:

local f = io.open("foo.txt")
while 1 do
    local l = f:read()
    if not l then break end
    print(l) -- use the string library to split the string
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top