首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用elixir/phoenix从csv文件导入?

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

Stack Overflow用户
提问于 2017-07-12 18:13:11
回答 1查看 2.6K关注 0票数 0

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

我正在尝试使用CSV模块中的headers: true方法,但我不知道如何使用它,也不知道它的答案的内容(Elixir对我来说还没有ruby那么清楚;)

有什么建议吗?

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

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

回答已采纳

发布于 2017-07-15 03:10:19

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

代码语言:javascript
运行
复制
item_params["file"].path
  |> File.stream!()
  |> CSV.decode(separator: ?;, headers: [:level, :dim0, :dim1, :dim2, :dim3, :dim4])
  |> Enum.map(fn (item) ->
    {:ok, fields} = item
    Item.changeset(%Item{}, %{topic_id: item_params["topic_id"], level: fields.level, dim0: fields.dim0, dim1: fields.dim1, dim2: fields.dim2, dim3: fields.dim3, dim4: fields.dim4})
    |> Repo.insert
  end)
票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45054796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档