在ruby中创建逗号分隔的csv文件

时间:2014-11-04 12:03:42

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

我有像这样的数组引用

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

当我把它写到csv文件时,它写成

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

但我想写像

http://ww.amazon.com   failed

2 个答案:

答案 0 :(得分:3)

首先,您需要展平数组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 =>"\t"用于在每行中插入tab分隔符。

使用逗号更改:col_sep => ","的值。

最后,您的csv_string包含正确形式的csv

答案 1 :(得分:0)

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。)