Elixir:
Trabajando con CSV

Cómo hacerlo:

Elixir, con su poderoso emparejamiento de patrones y soporte para la canalización, puede manejar archivos CSV de manera eficiente, incluso sin bibliotecas de terceros. Sin embargo, para necesidades más avanzadas, la biblioteca nimble_csv es una opción rápida y sencilla.

Leyendo un Archivo CSV Sin Bibliotecas Externas

Puedes leer y analizar un archivo CSV utilizando las funciones incorporadas de Elixir:

defmodule LectorCSV do
  def leer_archivo(ruta_archivo) do
    File.stream!(ruta_archivo)
    |> Stream.map(&String.trim_trailing/1)
    |> Stream.map(&String.split(&1, ","))
    |> Enum.to_list()
  end
end

# Uso de muestra
LectorCSV.leer_archivo("datos.csv")
# Salida: [["Encabezado1", "Encabezado2"], ["Valor1Fila1", "Valor2Fila1"], ["Valor1Fila2", "Valor2Fila2"]]

Escribiendo en un Archivo CSV

De manera similar, para escribir datos en un archivo CSV:

defmodule EscritorCSV do
  def escribir_en_archivo(ruta_archivo, datos) do
    File.open(ruta_archivo, [:write], fn archivo ->
      Enum.each(datos, fn fila ->
        IO.write(archivo, Enum.join(fila, ",") <> "\n")
      end)
    end)
  end
end

# Uso de muestra
datos = [["Encabezado1", "Encabezado2"], ["Valor1", "Valor2"], ["Valor3", "Valor4"]]
EscritorCSV.escribir_en_archivo("salida.csv", datos)
# Crea salida.csv con los datos formateados como CSV

Usando nimble_csv

Para un manejo más complejo de CSV, nimble_csv proporciona una manera poderosa y flexible de trabajar con datos CSV. Primero, añade nimble_csv a tus dependencias en mix.exs y ejecuta mix deps.get:

defp deps do
  [
    {:nimble_csv, "~> 1.2"}
  ]
end

Analizando datos CSV con nimble_csv:

defmodule MiAnalizadorCSV do
  NimbleCSV.define(MiAnalizador, separator: ",", escape: "\\")

  def analizar(ruta_archivo) do
    ruta_archivo
    |> File.stream!()
    |> MiAnalizador.parse_stream()
    |> Enum.to_list()
  end
end

# Uso de muestra
MiAnalizadorCSV.analizar("datos.csv")
# La salida con nimble_csv se puede personalizar según la definición, pero generalmente parece una lista de listas o tuplas dependiendo de cómo configures tu analizador.

Escribir datos CSV usando nimble_csv requiere transformar manualmente tus datos en un formato adecuado y luego escribirlos en un archivo, muy parecido al ejemplo de Elixir simple pero aprovechando nimble_csv para generar filas CSV formateadas correctamente.

Al elegir el enfoque adecuado para la complejidad de tu tarea, puedes manejar archivos CSV en Elixir con gran flexibilidad y poder.