【问题标题】:Creating a comma seperated csv file in ruby在 ruby​​ 中创建逗号分隔的 csv 文件
【发布时间】:2014-12-31 07:35:27
【问题描述】:

我有这样的数组引用

a1 = [["http://ww.amazon.com"],["failed"]]

当我将它写入 csv 文件时,它是这样写的

["http://ww.amazon.com"]
["failed"]

但我想写成这样

http://ww.amazon.com   failed

【问题讨论】:

  • 当您向代码寻求帮助时,向我们展示您编写的代码非常重要。对我们来说,更正你的代码比我们写一些东西然后你试着把它固定到位要好得多,也容易得多。

标签: ruby-on-rails ruby file csv text


【解决方案1】:

首先你需要展平数组a1

b1 = a1.flatten # => ["http://ww.amazon.com", "failed"]

然后您需要通过将每一行(数组)传递给以下csv 变量来生成 CSV:

require 'csv'
csv_string = CSV.generate({:col_sep => "\t"}) do |csv|
  csv << b1
end

:col_sep =&gt;"\t" 用于在每一行中插入tab 分隔符。

更改:col_sep =&gt; "," 的值以使用逗号。

你终于有了包含正确格式的csv的csv_string

【讨论】:

  • 是的,它可以工作,但我如何添加一个新行来打印下一个数组结果?
  • 要向 csv 添加新行,您只需要csv &lt;&lt; new_row
【解决方案2】:

Ruby 的内置 CSV 类是您的起点。来自the documentation 用于写入 CSV 文件:

CSV.open("path/to/file.csv", "wb") do |csv|
  csv << ["row", "of", "CSV", "data"]
  csv << ["another", "row"]
  # ...
end

对于您的代码,只需展平您的数组:

[['a'], ['b']].flatten # => ["a", "b"]

然后您可以将它分配给块的参数(csv),这将导致将数组写入文件:

require 'csv'

CSV.open('file.csv', 'wb') do |csv|
  csv << [["row"], ["of"], ["CSV"], ["data"]].flatten
end

保存并运行创建“file.csv”,其中包含:

row,of,CSV,data

您的问题是以这样一种方式编写的,听起来您正在尝试手动生成 CSV 文件,而不是依赖于为该特定任务设计的类。从表面上看,创建 CSV 似乎很容易,但是当字符串包含空格 用于分隔字符串的引号字符时,它有一些令人讨厌的极端情况和需要处理的问题。一个经过良好测试的预写类可以为您节省大量编写和调试代码的时间,或者让您不必向客户或经理解释为什么您的数据无法正确加载到数据库中。

但这留下了一个问题,为什么你的数组包含子数组?通常这是因为你在收集元素时做错了什么,这让我认为你的问题应该是关于如何避免这样做。 (称为XY problem。)

【讨论】:

    猜你喜欢
    • 2017-02-09
    • 1970-01-01
    • 2016-12-08
    • 2021-05-30
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 2016-09-11
    • 2012-11-09
    相关资源
    最近更新 更多