Lua:
การทำงานกับ CSV

วิธีการ:

ใน Lua, การทำงานกับไฟล์ CSV สามารถทำได้โดยใช้การดำเนินการ IO ของไฟล์พื้นฐานที่ภาษานี้ให้มา ไม่ต้องการไลบรารีภายนอกสำหรับงานเรียบง่าย สำหรับการดำเนินการที่ซับซ้อนกว่า เช่น การจัดการกรณีพิเศษ (เช่น จุลภาคภายในค่า) อาจเป็นประโยชน์ที่จะใช้ไลบรารีของบุคคลที่สาม เช่น lua-csv

การอ่านไฟล์ CSV

นี่คือตัวอย่างง่าย ๆ ในการอ่านไฟล์ CSV ทีละบรรทัด โดยแบ่งแต่ละบรรทัดออกเป็นค่าตามตัวคั่นจุลภาค

function parseCSVLine(line)
    local result = {}
    local from = 1
    local sep = ","
    local field
    while true do
        local start, finish = string.find(line, sep, from)
        if not start then
            table.insert(result, string.sub(line, from))
            break
        end
        field = string.sub(line, from, start - 1)
        table.insert(result, field)
        from = finish + 1
    end
    return result
end

local file = io.open("example.csv", "r")
for line in file:lines() do
    local values = parseCSVLine(line)
    for i, v in ipairs(values) do
        print(i, v)
    end
end
file:close()

ตัวอย่างผลลัพธ์ (สำหรับ example.csv ที่มีเนื้อหา “name,age\newlineJohn Doe,30\newlineJane Doe,32”):

1	name
2	age
1	John Doe
2	30
1	Jane Doe
2	32

การเขียนไฟล์ CSV

เพื่อสร้างไฟล์ CSV คุณเพียงแต่สร้างสตริงที่มีค่าแยกด้วยจุลภาคและเขียนลงในไฟล์ทีละบรรทัด

local data = {
    {"name", "age"},
    {"John Doe", "30"},
    {"Jane Doe", "32"}
}

local file = io.open("output.csv", "w")
for _, v in ipairs(data) do
    file:write(table.concat(v, ","), "\n")
end
file:close()

สิ่งนี้จะสร้าง (หรือเขียนทับ) ไฟล์ output.csv ด้วยข้อมูลที่ระบุ

การใช้ lua-csv

สำหรับการจัดการ CSV ที่ซับซ้อนกว่า ซึ่งรวมถึงการสนับสนุนคำพูดและตัวละเว้น ไลบรารี lua-csv เป็นทางเลือกที่มีความเข้มแข็ง

ก่อนอื่น ติดตั้งโดยใช้ LuaRocks:

luarocks install lua-csv

จากนั้น การอ่านไฟล์ CSV กลายเป็นเรื่องง่าย:

local csv = require("csv")

-- การอ่านจากไฟล์
for fields in csv.open("example.csv") do
    for i, v in ipairs(fields) do
        print(i, v)
    end
end

และการเขียนไปยัง CSV ด้วยการอ้างถึงและหลีกเลี่ยงอย่างถูกต้อง:

local file = csv.open("output.csv", {write=true})

local data = {
    {"name", "profession", "location"},
    {"John Doe", "Software Engineer", "New York, NY"},
    {"Jane Doe", "Data Scientist", "\"San Francisco, CA\""}
}

for _, v in ipairs(data) do
    file:write(v)
end

วิธีนี้จัดการโดยอัตโนมัติกับความซับซ้อน เช่น จุลภาคและคำพูดภายในค่า