Elixir:
Arbeta med CSV

Hur man gör:

Elixir, med sin kraftfulla mönstermatchning och stöd för pipelining, kan hantera CSV-filer effektivt, även utan tredjepartsbibliotek. Dock, för mer avancerade behov, är biblioteket nimble_csv ett snabbt och enkelt val.

Läsa en CSV-fil utan externa bibliotek

Du kan läsa och parsa en CSV-fil genom att använda Elixirs inbyggda funktioner:

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

# Exempelanvändning
CSVReader.read_file("data.csv")
# Utdata: [["Header1", "Header2"], ["Row1Value1", "Row1Value2"], ["Row2Value1", "Row2Value2"]]

Skriva till en CSV-fil

På liknande sätt, för att skriva data till en CSV-fil:

defmodule CSVWriter do
  def write_to_file(file_path, data) do
    File.open(file_path, [:write], fn file ->
      Enum.each(data, fn rad ->
        IO.write(file, Enum.join(rad, ",") <> "\n")
      end)
    end)
  end
end

# Exempelanvändning
data = [["Header1", "Header2"], ["Value1", "Value2"], ["Value3", "Value4"]]
CSVWriter.write_to_file("output.csv", data)
# Skapar output.csv med datan formaterad som CSV

Använda nimble_csv

För mer komplex hantering av CSV erbjuder nimble_csv ett kraftfullt och flexibelt sätt att arbeta med CSV-data. Först, lägg till nimble_csv till dina beroenden i mix.exs och kör mix deps.get:

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

Att parsa CSV-data med nimble_csv:

defmodule MyCSVParser do
  NimbleCSV.define(MyParser, separator: ",", escape: "\\")

  def parse(file_path) do
    file_path
    |> File.stream!()
    |> MyParser.parse_stream()
    |> Enum.to_list()
  end
end

# Exempelanvändning
MyCSVParser.parse("data.csv")
# Utdata med nimble_csv kan anpassas baserat på definitionen, men det ser generellt ut som en lista av listor eller tupler beroende på hur du ställt in din parser.

Att skriva CSV-data med hjälp av nimble_csv kräver manuell omvandling av din data till ett korrekt format och sedan skriva det till en fil, mycket likt det rena Elixir-exemplet men med användning av nimble_csv för att generera korrekt formaterade CSV-rader.

Genom att välja rätt tillvägagångssätt för din uppgifts komplexitet, kan du hantera CSV-filer i Elixir med stor flexibilitet och kraft.