ListToCsv (list_to_csv v1.1.1) View Source

ListToCsv is main module of this library.

Link to this section Summary

Link to this section Types

Specs

target() :: map() | struct() | keyword()

Link to this section Functions

Specs

get(any(), ListToCsv.Key.many()) :: any()

Specs

parse([target()], ListToCsv.Option.t()) :: [[String.t()]]

Returns a list with header and body rows

Options

See ListToCsv.Option for details.

  • :headers - (list(string)) Optional.
  • :Keys - (list(Key.many())) Required. Keys can be atoms, strings, numbers, or functions.
  • :length - (list({Key.many(), length}) | nil) Optional. The length of the list can be variable, so if it is not fixed, the result value is not constant width.

Examples

iex> ListToCsv.parse([%{name: "bob"}], headers: ["name"], keys: [:name])
[["name"], ["bob"]]

iex> ListToCsv.parse([%{name: "bob"}], keys: [:name])
[["bob"]]

iex> ListToCsv.parse(
...>   [
...>     %{
...>       name: "name1",
...>       items: [
...>         %{title: "title1", code: "code1"},
...>         %{title: "title2", code: "code2"},
...>         %{title: "title3", code: "code3"}
...>       ]
...>     },
...>     %{
...>       name: "name2",
...>       items: [
...>         %{title: "title4", code: "code4"},
...>         %{title: "title5", code: "code5"},
...>         %{title: "title6", code: "code6"},
...>         %{title: "title7", code: "code7"},
...>         %{title: "title8", code: "code8"}
...>       ]
...>     }
...>   ],
...>   headers: [
...>     "名前",
...>     "アイテム#名",
...>     "アイテム#コード",
...>     "item overflow?"
...>   ],
...>   keys: [
...>     :name,
...>     [:items, :N, :title],
...>     [:items, :N, :code],
...>     [:items, &(length(&1) > 4)]
...>   ],
...>   length: [items: 4]
...> )
[
  ["名前", "アイテム1名", "アイテム1コード", "アイテム2名", "アイテム2コード", "アイテム3名", "アイテム3コード", "アイテム4名", "アイテム4コード", "item overflow?"],
  ["name1", "title1", "code1", "title2", "code2", "title3", "code3", "", "", "false"],
  ["name2", "title4", "code4", "title5", "code5", "title6", "code6", "title7", "code7", "true"]
]

iex> ListToCsv.parse(
...>   [
...>     %{
...>       name: "name1",
...>       items: [
...>         %{title: "title1", code: "code1"},
...>         %{title: "title2", code: "code2"},
...>         %{title: "title3", code: "code3"}
...>       ]
...>     },
...>     %{
...>       name: "name2",
...>       items: [
...>         %{title: "title4", code: "code4"},
...>         %{title: "title5", code: "code5"},
...>         %{title: "title6", code: "code6"},
...>         %{title: "title7", code: "code7"},
...>         %{title: "title8", code: "code8"}
...>       ]
...>     }
...>   ],
...>   keys: [
...>     :name,
...>     [:items, :N, :title],
...>     [:items, :N, :code],
...>     [:items, &(length(&1) > 4)]
...>   ],
...>   length: [items: 4]
...> )
[
  ["name1", "title1", "code1", "title2", "code2", "title3", "code3", "", "", "false"],
  ["name2", "title4", "code4", "title5", "code5", "title6", "code6", "title7", "code7", "true"]
]

Specs

parse_cell(any(), ListToCsv.Key.many()) :: String.t()
Link to this function

parse_row(map, keys_list)

View Source

Specs

parse_row(target(), [ListToCsv.Key.many()]) :: [String.t()]
Link to this function

parse_rows(list, keys_list)

View Source

Specs

parse_rows([target()], ListToCsv.Key.many()) :: [[String.t()]]