10

在 Rails 应用程序中,我接受并解析可能使用以下三种可能的行终止字符中的任何一种格式的 CSV 文件:( \n) LF\r\n( CR+LF) 或\r( CR)。RubyFileCSV库似乎可以很好地处理前两种情况,但最后一种情况(“Mac 经典”\r行尾)没有作为换行符处理。能够接受这种格式以及其他格式很重要,因为 Microsoft Excel for Mac(在 OS X 上运行)在导出到“逗号分隔值”时似乎使用它(尽管导出到“Windows 逗号分隔”会更容易- 处理\r\n)。

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

4

1 回答 1

24

你可以使用:row_sep => :auto

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

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

gsub在将数据交给 CSV 进行解析之前,您还可以手动清理 EOL 。在尝试解析 CSV 之前,我可能会采取这条路线并手动将所有\r\ns 和\rs 转换为单个s。\nOTOH,如果您的 CSV 中有嵌入的二进制数据,其中\rs 意味着某些东西,这将无法正常工作。令人抓狂的是,这是我们正在处理的 CSV,所以谁知道你最终会处理什么样的疯狂的废话。

于 2013-09-23T22:26:29.623 回答