有关 Enum.to_list 的第二个参数的错误消息

问题描述 投票:0回答:1

我有一个文件,其中每一行由用分号分隔的“字段”组成,例如

AAA;BBBB;CCC
XXX;YY;ZZZ

字段本身既不包含分号也不包含换行符。没有进行任何花哨的引用,因此该文件有点像一个“简单”的 CSV 文件,没有任何引用和转义字符。

我的目标是将此文件变成列表的列表,如下所示:

[["AAA", "BBBB", "CCC"], ["XXX", "YY", "ZZZ"]]

我的 Elexir 脚本中的方法是这样的:

File.stream!(cfile)
|> Stream.map(fn (line) -> String.split(line, ';') end)
|> Enum.to_list()
|> IO.puts()

(最终IO.puts的目的只是为了调试。最终,结果列表将以某种方式处理)。

我对我的剧本的理解是:

  • 第一行为此文件生成一个 Stream。
  • 第二行分割该流中的每一行,整个操作产生一个可枚举的列表
  • 第三行将列表的 Enumerable 转换为列表的列表。

运行此脚本会引发错误

* 2nd argument: not a valid pattern

并且错误消息的行号指向包含

Enum.to_list
的行。这个函数甚至没有第二个参数!
String.split
将有两个参数,但这在前面的行中,并且 split 的参数对我来说看起来不错。

有人可以解释一下,这里出了什么问题吗?或者我逐行处理文件的方法在某些基本方面存在缺陷?

elixir
1个回答
0
投票

您提供了一个 charlist

';'
而不是字符串
";"
作为
String.split/3
的第二个参数:

iex(1)> String.split("AAA;BBBB;CCC", ';')
** (ArgumentError) errors were found at the given arguments:

  * 2nd argument: not a valid pattern

iex(2)> String.split("AAA;BBBB;CCC", ";")
["AAA", "BBBB", "CCC"]
© www.soinside.com 2019 - 2024. All rights reserved.