为 Elixir File.stream 指定替代 line_end 字符!功能

Specify alternative line_end character for Elixir File.stream! function

Elixir 的 File.stream! 拆分并假定为 \r 字符。

是否可以指定 \r\n 或任何其他模式?

这样的便利将使 File.stream! 成为一个方便的文件解析器。

编辑:添加源文件内容:

 iex(1)> File.read! "D:\Projects\Telegram\PQ.txt"
"1039027537039357001\r\n1124138842463513719\r\n1137145765766942221\r\n1159807134726147157\r\n1162386423249503807\r\n1166092057686212149\r\n1192934946182607263\r\n1239437837009623463\r\n1242249431735251217\r\n1286092661601003031\r\n1300223652350017207\r\n1320700236992142661\r\n1322986082402655259\r\n1342729635050601557\r\n1342815051384338027\r\n1361578683715077199\r\n1381265403472415423\r\n1387654405700676857\r\n1414719090657425471\r\n1438176310698548801\r\n1440426998028857687\r\n1444777794598883737\r\n1448786004429696643\r\n1449069084476072141\r\n1449922801627060913\r\n1459186197300152561\r\n1470497644058466497\r\n1497532721434112879\r\n1514370843858307907\r\n1528087672407582373\r\n1530255914631110911\r\n1537681216742780453\r\n1547498566041252091\r\n1563354550428106363\r\n1570520040759209689\r\n1570650619548126013\r\n1572342415580617699\r\n1595238677050713949\r\n1602246062455069687\r\n1603930707387709439\r\n1620038771342153713\r\n1626781435762382063\r\n1628817368590631491\r\n1646011824126204499\r\n1654346190847567153\r\n1671293643237388043\r\n1674249379765115707\r\n1683876665120978837\r\n1700490364729897369\r\n1724114033281923457\r\n1729626235343064671\r\n1736390408379387421\r\n1742094280210984849\r\n1750652888783086363\r\n1756848379834132853\r\n1769689620230136307\r\n1791811376213642701\r\n1802412521744570741\r\n1816018323888992941\r\n1816202297040826291\r\n1833488086890603497\r\n1834281595607491843\r\n1840295490995033057\r\n1843931859412695937\r\n1845134226412607369\r\n1847514467055999659\r\n1868936961235125427\r\n18733753

示例:

iex(134)> s|> Enum.to_list

["1039027537039357001\n", "1124138842463513719\n", "1137145765766942221\n",
 "1159807134726147157\n", "1162386423249503807\n", "1166092057686212149\n",
 "1192934946182607263\n", "1239437837009623463\n", "1242249431735251217\n",
 "1286092661601003031\n", "1300223652350017207\n", "1320700236992142661\n",
 "1322986082402655259\n", "1342729635050601557\n", "1342815051384338027\n",
 "1361578683715077199\n", "1381265403472415423\n", "1387654405700676857\n",
 "1414719090657425471\n", "1438176310698548801\n", "1440426998028857687\n",
 "1444777794598883737\n", "1448786004429696643\n", "1449069084476072141\n",
 "1449922801627060913\n", "1459186197300152561\n", "1470497644058466497\n",
 "1497532721434112879\n", "1514370843858307907\n", "1528087672407582373\n",
 "1530255914631110911\n", "1537681216742780453\n", "1547498566041252091\n",
 "1563354550428106363\n", "1570520040759209689\n", "1570650619548126013\n",
 "1572342415580617699\n", "1595238677050713949\n", "1602246062455069687\n",
 "1603930707387709439\n", "1620038771342153713\n", "1626781435762382063\n",
 "1628817368590631491\n", "1646011824126204499\n", "1654346190847567153\n",
 "1671293643237388043\n", "1674249379765115707\n", "1683876665120978837\n",
 "1700490364729897369\n", "1724114033281923457\n", ...]

iex(135)> s|> String.to_integer|> Primes.factorize|> Enum.to_list

您可以在原始模式下打开文件(参见here)并自行检查字符。

Elixir 通过始终将“\r\n”规范化为“\n”来很好地处理 Windows 和 Unix 之间的差异,因此开发人员无需担心这两种格式。这就是上面示例中发生的情况,也是您对 IO 和 File 模块中的操作所期望的。