Lua:
Arbeta med CSV

Hur man gör:

I Lua kan arbete med CSV-filer närmas genom grundläggande fil-IO-operationer som språket tillhandahåller, utan behov av externa bibliotek för enkla uppgifter. För mer komplexa operationer, såsom hantering av specialfall (t.ex., komman inom värden), kan det vara fördelaktigt att använda tredjepartsbibliotek som lua-csv.

Läsa en CSV-fil

Här är ett enkelt exempel på att läsa en CSV-fil rad för rad, dela varje rad i värden baserat på kommatecknet som separator.

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()

Exempelutskrift (för en example.csv med innehållet “name,age\nJohn Doe,30\nJane Doe,32”):

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

Skriva en CSV-fil

För att generera en CSV-fil konstruerar du helt enkelt strängar med komma-separerade värden och skriver dem rad för rad till en fil.

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()

Detta skulle skapa (eller skriva över) en output.csv-fil med de specificerade datan.

Använda lua-csv

För mer avancerad hantering av CSV, inklusive stöd för citattecken och escape-tecken, är lua-csv-biblioteket ett robust val.

Först, installera det med LuaRocks:

luarocks install lua-csv

Sedan, att läsa en CSV-fil blir så enkelt som:

local csv = require("csv")

-- Läsa från en fil
for fields in csv.open("example.csv") do
    for i, v in ipairs(fields) do
        print(i, v)
    end
end

Och skriva till en CSV med korrekt citering och escaping:

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

Detta tillvägagångssätt hanterar automatiskt komplexiteter såsom komma och citattecken inom värden.