Elixir:
Praca z plikami CSV
Jak to zrobić:
Elixir, z jego potężnym dopasowywaniem wzorców i wsparciem dla łączenia potokowego (pipelining), może skutecznie obsłużyć pliki CSV, nawet bez zewnętrznych bibliotek. Jednakże, dla bardziej zaawansowanych potrzeb, biblioteka nimble_csv
jest szybkim i prostym wyborem.
Odczyt pliku CSV bez zewnętrznych bibliotek
Możesz odczytać i zanalizować plik CSV za pomocą wbudowanych funkcji Elixira:
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
# Przykładowe użycie
CSVReader.read_file("data.csv")
# Wyjście: [["Header1", "Header2"], ["Row1Value1", "Row1Value2"], ["Row2Value1", "Row2Value2"]]
Zapis do pliku CSV
Podobnie, aby zapisać dane do pliku CSV:
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
# Przykładowe użycie
dane = [["Header1", "Header2"], ["Value1", "Value2"], ["Value3", "Value4"]]
CSVWriter.write_to_file("output.csv", dane)
# Tworzy plik output.csv z danymi sformatowanymi jako CSV
Używanie nimble_csv
Dla bardziej skomplikowanego obsługiwania plików CSV, nimble_csv
oferuje potężny i elastyczny sposób pracy z danymi CSV. Najpierw dodaj nimble_csv
do twoich zależności w mix.exs
i uruchom mix deps.get
:
defp deps do
[
{:nimble_csv, "~> 1.2"}
]
end
Analiza danych CSV z 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
# Przykładowe użycie
MyCSVParser.parse("data.csv")
# Wyjście z nimble_csv można dostosować w zależności od definicji, ale ogólnie wygląda to jak lista list lub krotek, w zależności od tego, jak skonfigurowałeś parser.
Zapis danych CSV za pomocą nimble_csv
wymaga ręcznej transformacji danych na odpowiedni format, a następnie zapisania ich do pliku, podobnie jak w prostym przykładzie Elixira, ale wykorzystując nimble_csv
do generowania poprawnie sformatowanych wierszy CSV.
Wybierając odpowiednie podejście do złożoności twojego zadania, możesz obsługiwać pliki CSV w Elixirze z dużą elastycznością i mocą.