问题编号。 1为什么主持人删除了我在(FunctionClauseError) no function clause matching in Access.get/3中的其他问题,却在询问有关原始问题答案的问题
问题编号。 2我试图理解为什么: 原始答案(无效)
{:ok, decode_csv} =
File.stream!('users_departs.csv')
|> Stream.drop(1)
|> CSV.decode(headers: [:name, :title, :departments])
提高:
== Compilation error in file lib/data_dictionary.ex ==
** (MatchError) no match of right hand side value: #Function<62.51129937/2 in Stream.transform/3>
...
此文档含糊不清,很不幸,我还没有升级到CSV 2.2.1版本。
我很困惑,不知道该如何处理CSV.decode的返回值...
衷心祝福托马斯
答案 0 :(得分:2)
文档中明确指出,CSV.decode/2
返回流。在终止之前,它是一个流。也就是说,您需要确保a)以某种方式终止它,例如通过使用Enum.to_list/1
转换为列表,并且b)您可以正确处理返回值,它们基本上是元组{:ok, values}
或 {:error, description}
。
对于平凡的情况,当您可以提出错误时,只需使用爆炸的版本CSV.decode!/2
,它会返回流列表或在未能解析任何行时引发。 / p>
'users_departs.csv'
|> File.stream!()
|> Stream.drop(1)
|> CSV.decode!(headers: [:name, :title, :departments])
|> Enum.to_list() # ESSENTIAL!