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

标签 ruby file csv newline line-endings

在 Rails 应用程序中,我正在接受和解析 CSV 文件,这些文件可能使用以下三种可能的行终止字符中的任何一种进行格式化:\n (LF)、\r\n (CR+LF),或 \r (CR)。 Ruby 的 FileCSV 库似乎可以很好地处理前两种情况,但最后一种情况(“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 进行解析之前,您还可以使用一些 gsubing 手动清理 EOL。我可能会采取这条路线并在尝试解析之前手动将所有 \r\n\r 转换为单个 \n CSV 文件。 OTOH,如果您的 CSV 中嵌入了二进制数据,其中 \r 表示某些内容,那么这将不会很好地工作。在紧握的手上,这是我们正在处理的 CSV,所以谁知道您最终会处理什么样的疯狂破烂废话。

关于ruby - Ruby 中的通用换行符支持,包括\r (CR) 行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18969691/

相关文章:

java - 使用java将文本格式应用于CSV文件

linux - 如何在 linux 中使用 awk 命令获取与特定值匹配的列的记录数

csv - 将 CSV 导入表格需要太长时间

ruby - 如何使用 Ruby 在多个日期范围内查找中断

ruby-on-rails - ArgumentError(Api::V1 的副本已从模块树中删除但仍处于事件状态!)

linux - 检查文件是否已创建和删除?

file - 在 GO 中打印表格的有效方法

regex - 在 Perl 中替换引号和多个逗号分隔符

ruby-on-rails - 如何在 Rails 共享主机上执行 restart.txt ruby

ruby-on-rails - 错误 : Undefined variable: $sidebar-spacing-horizontal