如何用elixir / phoenix从csv文件导入?

时间:2017-07-12 10:13:11

标签: csv elixir phoenix-framework

我有一个CSV文件要在Elixir中处理并在我的仓库中填充一些数据。我跟着How to import users from csv file with elixir/phoenix?,但我的需求略有不同;

我正在尝试使用CSV模块中的header:true方法,但无法弄清楚如何使用它或检查其答案的内容(Elixir对我来说还不像红宝石一样清晰;)

有什么建议吗?

处理文件(我收到flash消息)

def import(conn, %{"item" => item_params}) do
    item_params["file"].path
    |> File.stream!()
    |> CSV.decode(separator: ?;, headers: true) #headers: [:level, :DIM0, :DIM1, :DIM2, :DIM3, :DIM4]
    |> Enum.map(fn (item) ->
      Item.changeset(%Item{}, %{level: Enum.at(item, 0), dim0: Enum.at(item, 1), dim1: Enum.at(item, 2), dim2: Enum.at(item, 3), dim3: Enum.at(item, 4), dim4: Enum.at(item, 5)})
      #|> (fn(item) -> Logger.info "Csv content : #{inspect item}" end).()
      |> Repo.insert
    end)
    |> Enum.filter(fn
      {:error, _} -> true
      _ -> false
    end)
    |> case do
      [] ->
        conn
        |> put_flash(:info, "Imported without error")
        |> redirect(to: item_path(conn, :index))
      errors ->
        #errors = parse_errors(errors)  # create this fun
        conn
        |> put_flash(:error, errors)
        |> render("import.html")
    end
end

1 个答案:

答案 0 :(得分:1)

对于任何人的需求,这是我的代码:

EXPLAIN