Ruby 中的通用换行符支持,包括 r (CR) 行尾



在Rails应用程序中,我接受并解析CSV文件,这些文件可能格式化为三种可能的行终止字符中的任何一个:nLF),rnCR+LF)或rCR)。Ruby 的 FileCSV库似乎可以很好地处理前两种情况,但最后一种情况("Mac classic"r行尾)没有作为换行符处理。能够接受这种格式以及其他格式很重要,Microsoft因为 Mac 版 Excel(在 OS X 上运行)似乎在导出为"逗号分隔值"时使用它(尽管导出到"Windows 逗号分隔"会产生更易于处理的rn)。

Python具有"通用换行符支持",并且可以毫无问题地处理这三种格式中的任何一种。Ruby 中是否有类似的东西可以在事先不知道格式的情况下接受所有三个?

您可以使用

:row_sep => :auto

:row_sep
追加到每行末尾的字符串。这可以设置为特殊:auto设置,该设置要求 CSV 自动从数据中发现这一点。自动发现会提前读取数据,查找下一个"rn""n""r"序列。

当然,有一些注意事项,有关详细信息,请参阅上面链接的手册。

您还可以在将数据交给 CSV 进行分析之前,使用一些gsub手动清理 EOL。在尝试解析 CSV 之前,我可能会采取这种方式并手动将所有rnr转换为单个 n s。OTOH,如果您的 CSV 中有嵌入的二进制数据,r意味着什么,这将不起作用。在抓人的手上,这是我们正在处理的CSV,所以谁知道你最终会处理什么样的疯狂的废话。

最新更新