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

时间:2013-09-23 22:06:09

标签: ruby file csv newline line-endings

在Rails应用程序中,我接受并解析可能使用三种可能的行终止字符格式化的CSV文件:\nLF),\r\n({{ 1}})或CR+LF\r)。 Ruby的CRFile库似乎可以正常处理前两种情况,但最后一种情况(“Mac经典”CSV行结尾)不作为换行处理。能够接受这种格式以及其他格式非常重要,因为Microsoft Excel for Mac(在OS X上运行)似乎在导出到“逗号分隔值”时使用它(尽管导出到“Windows逗号分隔”使得更容易处理\r)。

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

1 个答案:

答案 0 :(得分:18)

您可以使用:row_sep => :auto

  

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

当然有一些注意事项,请参阅上面链接的手册了解详情。

在将数据交给CSV进行解析之前,您还可以使用gsub来手动清理EOL。在尝试解析CSV之前,我可能会采用此路由并手动将所有\r\n\r转换为单\n。 OTOH,如果你的CSV中有嵌入的二进制数据\r意味着什么,这将无法正常工作。在抓狂的手上,这是我们正在处理的CSV,所以谁知道你最终会处理什么样的疯狂废话。