【问题标题】:Line/Row separator/delimiter in exported CSV using Ruby CSV使用 Ruby CSV 导出的 CSV 中的行/行分隔符/分隔符
【发布时间】:2014-08-14 09:37:03
【问题描述】:

是否可以将默认行分隔符从换行符 '\n' 或 '\r\n' 更改为其他字符,例如 '|'导入时。

我知道这看起来很愚蠢。但是我在 csv 文件中有多条记录,其中包含列地址,并且某些地址可能在信息中包含“\n”。

例如 角落案例 X|X|X|X|123 New Addr|X|X|X|

正常情况 X|X|X|X|123|X|X|X|

【问题讨论】:

  • railscasts.com/episodes/…和“Greg Blass”的评论
  • 你用什么代码写出 CSV?这应该由使用引号的内置 CSV 库处理,例如"123\n...",这与您将获得的有效 CSV 一样。 FasterCSV 也被弃用,取而代之的是同一作者编写的 Ruby 1.9 内置 CSV 库。
  • 我已经导出了文件。我需要正确导入它。 @tadman 我不确定 CSV 输出使用什么,但我现在可以更改它
  • 我会选择 require "csv" 并使用它。 FasterCSV 存在自退役以来永远无法修复的错误。如果您的 CSV 存在缺陷,您可能需要手动修复这些缺陷,或者找到一个能够以某种方式修复它的程序,除非您可以自己使用另一个脚本对其进行修补。
  • 我无法更正 csv,因为它来自其他来源。自动对 7+Gb 文件进行这样的缺陷校正将消耗大量时间。我想我在解析所有 csv 文件时需要做一些修改。

标签: ruby csv ruby-on-rails-3.2 fastercsv data-import


【解决方案1】:

是的,您可以更改默认分隔符。

require 'csv'
CSV.read(csv_file, row_sep: ?|)

但这对您没有帮助,因为无论分隔符如何,CSV 库都不允许在未加引号的字段中使用 \r\n

总是有穷人的解析器:

File.read(file).split(row_sep).map { |row| row.split(col_sep) }

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 2019-05-20
    • 2019-08-01
    • 2013-03-04
    • 2016-05-12
    • 1970-01-01
    相关资源
    最近更新 更多