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

jrd*_*oko 9 ruby csv newline file line-endings

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

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

mu *_*ort 20

你可以使用:row_sep => :auto:

:row_sep
附加到每行末尾的String.这可以设置为特殊:auto设置,该设置请求CSV自动从数据中发现此信息.自动发现在寻找下一个数据预读"\r\n","\n""\r"序列.

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

gsub在将数据交给CSV进行解析之前,您还可以手动清理EOL .在尝试解析CSV之前,我可能会采用这种方法并手动将所有\r\ns和\rs 转换为单个\ns.OTOH,如果您的CSV中存在嵌入的二进制数据,那么这将无法正常工作\r.在抓狂的手上,这是我们正在处理的CSV,所以谁知道你最终会处理什么样的疯狂废话.

  • +1 很好的抓获!我希望它对每一行都提前读取,因为我过去遇到过 CSV 文件,由于有人将 Windows CSV 附加到 Mac CSV,因此其中包含混合行尾。这是一个皮塔饼。 (2认同)