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