You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elixir使用NimbleCSV解析CSV遇问题:初始报错后输出空列表

解决NimbleCSV解析报错与输出空列表问题

原解析报错原因

你之前遇到的(NimbleCSV.ParseError) unexpected escape character "错误,根源是CSV格式与解析配置不匹配:

  • 你自定义了分隔符为|、转义符为"的MyParser,但实际使用的是默认遵循RFC4180标准(逗号分隔、双引号转义)的NimbleCSV.RFC4180.parse_stream()
  • 同时原始CSV格式混乱,比如01|Data1","02|Data2","01|Data3混合了引号和错误的分隔符,尝试的"01|Data1","02|Data2","01|Data3"则是逗号分隔的格式,和你定义的|分隔符冲突。

当前空列表问题的解决

现在CSV内容格式正确(每行用|分隔两个字段),但输出空列表是代码存在两处错误:

  1. 未使用自定义的解析器:你定义了MyParser却依然调用NimbleCSV.RFC4180.parse_stream(),而RFC4180默认用逗号作为分隔符,自然解析不出|分隔的内容。
  2. 函数语法错误:Stream.map中的匿名函数定义不完整,fn [code, data] - 缺少了>,应为fn [code, data] ->。

修正后的代码

NimbleCSV.define(MyParser, separator: "|", escape: "\"")

File.stream!("data.csv")
|> MyParser.parse_stream()
|> Stream.map(fn [code, data] ->
  %{code: code, data: data}
end)
|> Enum.to_list()
|> IO.inspect()

验证结果

使用你当前的CSV内容:

01|Data1
02|Data2
01|Data3

运行修正后的代码,会输出正确的列表:

[%{code: "01", data: "Data1"}, %{code: "02", data: "Data2"}, %{code: "01", data: "Data3"}]

内容的提问来源于stack exchange,提问作者C0ol_Cod3r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:55:25