mirror of
https://github.com/netfun2000/hipudding-teslamate.git
synced 2026-02-27 09:44:28 +08:00
31 lines
661 B
Elixir
31 lines
661 B
Elixir
defmodule TeslaMate.Import.CSV do
|
|
NimbleCSV.define(Parser, separator: ",", escape: "\"", newlines: ["\r\n", "\n"])
|
|
|
|
def parse(file_stream) do
|
|
file_stream
|
|
|> Parser.parse_stream(skip_headers: false)
|
|
|> Enum.take(2)
|
|
|> case do
|
|
[[_], _] ->
|
|
{:error, :unsupported_delimiter}
|
|
|
|
[] ->
|
|
{:error, :no_contents}
|
|
|
|
[_] ->
|
|
{:error, :no_contents}
|
|
|
|
[headers, _] ->
|
|
rows =
|
|
file_stream
|
|
|> Parser.parse_stream()
|
|
|> Stream.flat_map(fn
|
|
[""] -> []
|
|
row -> [headers |> Enum.zip(row) |> Enum.into(%{})]
|
|
end)
|
|
|
|
{:ok, rows}
|
|
end
|
|
end
|
|
end
|