在 Rails 应用程序中,我正在接受和解析 CSV 文件,这些文件可能使用以下三种可能的行终止字符中的任何一种进行格式化:\n
(LF
)、\r\n
(CR+LF
),或 \r
(CR
)。 Ruby 的 File
和 CSV
库似乎可以很好地处理前两种情况,但最后一种情况(“Mac classic” \r
行结尾)不作为换行符处理。能够接受这种格式以及其他格式很重要,因为 Microsoft Excel for Mac(在 OS X 上运行)似乎在导出为“逗号分隔值”时使用它(尽管导出为“Windows 逗号分隔”更容易- 处理 \r\n
).
Python 具有“通用换行支持”,可以毫无问题地处理这三种格式中的任何一种。 Ruby 中是否有类似的东西可以在事先不知道格式的情况下接受所有这三种格式?
最佳答案
你可以使用 :row_sep => :auto
:
:row_sep
The String appended to the end of each row. This can be set to the special:auto
setting, which requests that CSV automatically discover this from the data. Auto-discovery reads ahead in the data looking for the next"\r\n"
,"\n"
, or"\r"
sequence.
当然有一些注意事项,有关详细信息,请参阅上面链接的手册。
在将数据交给 CSV 进行解析之前,您还可以使用一些 gsub
ing 手动清理 EOL。我可能会采取这条路线并在尝试解析之前手动将所有 \r\n
和 \r
转换为单个 \n
CSV 文件。 OTOH,如果您的 CSV 中嵌入了二进制数据,其中 \r
表示某些内容,那么这将不会很好地工作。在紧握的手上,这是我们正在处理的 CSV,所以谁知道您最终会处理什么样的疯狂破烂废话。
关于ruby - Ruby 中的通用换行符支持,包括\r (CR) 行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18969691/