Lua:
Trabajando con CSV

Cómo hacerlo:

En Lua, trabajar con archivos CSV se puede abordar utilizando operaciones básicas de E/S de archivos proporcionadas por el lenguaje, sin necesidad de bibliotecas externas para tareas simples. Para operaciones más complejas, como el manejo de casos especiales (por ejemplo, comas dentro de los valores), podría ser beneficioso usar bibliotecas de terceros como lua-csv.

Leyendo un archivo CSV

Aquí hay un ejemplo simple para leer un archivo CSV línea por línea, dividiendo cada línea en valores basados en el separador de comas.

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

Salida de muestra (para un example.csv con contenido “name,age\newlineJohn Doe,30\newlineJane Doe,32”):

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

Escribiendo un archivo CSV

Para generar un archivo CSV, simplemente construyes cadenas con valores separados por comas y los escribes en un archivo línea por línea.

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

Esto creará (o sobrescribirá) un archivo output.csv con los datos especificados.

Usando lua-csv

Para un manejo más avanzado de CSV, incluyendo soporte para comillas y caracteres de escape, la biblioteca lua-csv es una elección robusta.

Primero, instálala usando LuaRocks:

luarocks install lua-csv

Luego, leer un archivo CSV se vuelve tan simple como:

local csv = require("csv")

-- Leyendo desde un archivo
for fields in csv.open("example.csv") do
    for i, v in ipairs(fields) do
        print(i, v)
    end
end

Y escribir en un CSV con las comillas y escape adecuados:

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

Este enfoque maneja automáticamente complejidades como comas y comillas dentro de los valores.