Elixir:
Trabalhando com CSV
Como Fazer:
Elixir, com sua poderosa correspondência de padrões e suporte para encadeamento (pipelining), pode manejar arquivos CSV de forma eficiente, mesmo sem bibliotecas de terceiros. Contudo, para necessidades mais avançadas, a biblioteca nimble_csv é uma opção rápida e direta.
Lendo um Arquivo CSV Sem Bibliotecas Externas
Você pode ler e analisar um arquivo CSV usando as funções internas do Elixir:
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
# Exemplo de uso
CSVReader.read_file("data.csv")
# Saída: [["Cabeçalho1", "Cabeçalho2"], ["ValorLinha1", "ValorLinha2"], ["ValorLinha2", "ValorLinha2"]]Escrevendo em um Arquivo CSV
Similarmente, para escrever dados em um arquivo 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
# Exemplo de uso
dados = [["Cabeçalho1", "Cabeçalho2"], ["Valor1", "Valor2"], ["Valor3", "Valor4"]]
CSVWriter.write_to_file("saida.csv", dados)
# Cria saida.csv com os dados formatados como CSVUsando nimble_csv
Para manipulações de CSV mais complexas, nimble_csv proporciona uma maneira poderosa e flexível de trabalhar com dados CSV. Primeiro, adicione nimble_csv às suas dependências em mix.exs e execute mix deps.get:
defp deps do
[
{:nimble_csv, "~> 1.2"}
]
endAnalisando dados CSV com 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
# Exemplo de uso
MyCSVParser.parse("data.csv")
# A saída com nimble_csv pode ser personalizada com base na definição, mas geralmente se parece com uma lista de listas ou tuplas, dependendo de como você configurou seu analisador.Escrever dados CSV usando nimble_csv requer transformar manualmente seus dados em um formato apropriado e então escrevê-los em um arquivo, muito como o exemplo em Elixir puro, mas aproveitando o nimble_csv para gerar linhas CSV formatadas corretamente.
Escolhendo a abordagem apropriada para a complexidade da sua tarefa, você pode manipular arquivos CSV em Elixir com grande flexibilidade e poder.