Hermanverschooten/csv_generator

Simple CSV generator

★ 11Forks 2ElixirGitHub ↗Compare
csvelixir

README

This library provides an easy way to generate CSV files. It allows you to define the colums and their respective types.

Example

defmodule MyCSV do
  use CsvGenerator

  column :name, :string
  column :joined, :date, format: "%d-%m-%Y"
  column :points, :integer, header: "points earned"
  hardcoded :string, "Game", "domino"
end

You would then render the CSV bij calling the render/1 method with the list of lines to render.

Example

iex> MyCSV.render([
   %{ name: "Chris McCord", joined: ~D[2020-01-01], points: 110},
   %{ name: "Jose Valim", joined: ~D[2020-03-29], points: 10} ])
"\"name\",\"joined\",\"points earned\",\"Game\"\n\"Chris McCord\",01-01-2020,110,\"domino\"\n\"Jose Valim\",29-03-2020,10,\"domino\""

By default the CSV columns will be seperated by a ",", the lines by a "\n". This can be changed by using delimiter and line_ending.

Example

defmodule MyCSV do
  use CsvGenerator

  delimiter ";"
  line_ending "\r\n"

  column :name, :string
  column :joined, :date, format: "%d-%m-%Y"
  column :points, :integer, header: "points earned"
end

iex> MyCSV.render([
   %{ name: "Jose Valim", joined: ~D[2020-03-29], points: 10} ])
"\"name\";\"joined\";\"points earned\"\r\n\"Jose Valim\";29-03-2020;10"

Formatting

A formatter is included, to be able to have mix format use it, you have to add it to your own .formatter.exs in import_deps.

Example

[
  import_deps: [:ecto, :phoenix, :csv_generator],
  inputs: ["*.{ex,exs}", "priv/*/seeds.exs", "{config,lib,test}/**/*.{ex,exs}"],
  subdirectories: ["priv/*/migrations"]
]

Contributors

Hermanverschooten

Issues