我有一个文件,其中每一行由用分号分隔的“字段”组成,例如
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的目的只是为了调试。最终,结果列表将以某种方式处理)。
我对我的剧本的理解是:
运行此脚本会引发错误
* 2nd argument: not a valid pattern
并且错误消息的行号指向包含
Enum.to_list
的行。这个函数甚至没有第二个参数! String.split
将有两个参数,但这在前面的行中,并且 split 的参数对我来说看起来不错。
有人可以解释一下,这里出了什么问题吗?或者我逐行处理文件的方法在某些基本方面存在缺陷?
您提供了一个 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"]