在Rails应用程序中,我接受并解析CSV文件,这些文件可能格式化为三种可能的行终止字符中的任何一个:n
(LF
),rn
(CR+LF
)或r
(CR
)。Ruby 的 File
和CSV
库似乎可以很好地处理前两种情况,但最后一种情况("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 之前,我可能会采取这种方式并手动将所有rn
和r
转换为单个 n
s。OTOH,如果您的 CSV 中有嵌入的二进制数据,r
意味着什么,这将不起作用。在抓人的手上,这是我们正在处理的CSV,所以谁知道你最终会处理什么样的疯狂的废话。