Elixir:
Arbeiten mit CSV

Wie geht das:

Elixir kann mit seiner leistungsfähigen Mustererkennung und Unterstützung für Pipelining effizient CSV-Dateien verarbeiten, auch ohne externe Bibliotheken. Für fortgeschrittenere Bedürfnisse ist jedoch die Bibliothek nimble_csv eine schnelle und unkomplizierte Wahl.

Eine CSV-Datei ohne externe Bibliotheken lesen

Sie können eine CSV-Datei lesen und parsen, indem Sie die integrierten Funktionen von Elixir verwenden:

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

# Beispielverwendung
CSVReader.read_file("data.csv")
# Ausgabe: [["Header1", "Header2"], ["Row1Value1", "Row1Value2"], ["Row2Value1", "Row2Value2"]]

In eine CSV-Datei schreiben

Ähnlich, um Daten in eine CSV-Datei zu schreiben:

defmodule CSVWriter do
  def write_to_file(dateipfad, daten) do
    File.open(dateipfad, [:write], fn datei ->
      Enum.each(daten, fn zeile ->
        IO.write(datei, Enum.join(zeile, ",") <> "\n")
      end)
    end)
  end
end

# Beispielverwendung
daten = [["Header1", "Header2"], ["Value1", "Value2"], ["Value3", "Value4"]]
CSVWriter.write_to_file("output.csv", daten)
# Erstellt output.csv mit den Daten im CSV-Format

nimble_csv verwenden

Für komplexere CSV-Verarbeitungen bietet nimble_csv eine leistungsstarke und flexible Möglichkeit, mit CSV-Daten zu arbeiten. Fügen Sie zunächst nimble_csv zu Ihren Abhängigkeiten in mix.exs hinzu und führen Sie mix deps.get aus:

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

CSV-Daten mit nimble_csv parsen:

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

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

# Beispielverwendung
MyCSVParser.parse("data.csv")
# Die Ausgabe mit nimble_csv kann basierend auf der Definition angepasst werden, sieht aber im Allgemeinen aus wie eine Liste von Listen oder Tupeln, abhängig davon, wie Sie Ihren Parser einrichten.

Das Schreiben von CSV-Daten mit nimble_csv erfordert eine manuelle Umwandlung Ihrer Daten in ein geeignetes Format und anschließendes Schreiben in eine Datei, ähnlich wie im reinen Elixir-Beispiel, jedoch mit Nutzung von nimble_csv zum Generieren korrekt formatierter CSV-Zeilen.

Indem Sie den für die Komplexität Ihrer Aufgabe geeigneten Ansatz wählen, können Sie CSV-Dateien in Elixir mit großer Flexibilität und Kraft handhaben.