Elixir:
Arbeide med CSV
Hvordan:
Elixir, med sin kraftfulle mønstersammenligning og støtte for rørlegging, kan håndtere CSV-filer effektivt, selv uten tredjepartsbiblioteker. Men for mer avanserte behov, er biblioteket nimble_csv
et raskt og greit valg.
Å lese en CSV-fil uten eksterne biblioteker
Du kan lese og tolke en CSV-fil ved å bruke Elixirs innebygde funksjoner:
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
# Eksempel på bruk
CSVReader.read_file("data.csv")
# Utdata: [["Header1", "Header2"], ["Row1Value1", "Row1Value2"], ["Row2Value1", "Row2Value2"]]
Skrive til en CSV-fil
Tilsvarende, for å skrive data til 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 row ->
IO.write(file, Enum.join(row, ",") <> "\n")
end)
end)
end
end
# Eksempel på bruk
data = [["Header1", "Header2"], ["Value1", "Value2"], ["Value3", "Value4"]]
CSVWriter.write_to_file("output.csv", data)
# Oppretter output.csv med dataene formatert som CSV
Bruke nimble_csv
For mer kompleks håndtering av CSV, tilbyr nimble_csv
en kraftfull og fleksibel måte å jobbe med CSV-data. Først, legg til nimble_csv
i dine avhengigheter i mix.exs
og kjør mix deps.get
:
defp deps do
[
{:nimble_csv, "~> 1.2"}
]
end
Tolkning av 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
# Eksempel på bruk
MyCSVParser.parse("data.csv")
# Utdata med nimble_csv kan tilpasses basert på definisjonen, men det ser generelt ut som en liste av lister eller tupler avhengig av hvordan du setter opp din tolker.
Å skrive CSV-data ved å bruke nimble_csv
krever manuell transformasjon av dataene dine til et passende format og deretter skrive dem til en fil, mye likt det enkle Elixir-eksempelet, men utnytter nimble_csv
for å generere korrekt formaterte CSV-rader.
Ved å velge den passende tilnærmingen for kompleksiteten av oppgaven din, kan du håndtere CSV-filer i Elixir med stor fleksibilitet og kraft.