我有像这样的数组引用
a1 = [["http://ww.amazon.com"],["failed"]]
当我把它写到csv文件时,它写成
["http://ww.amazon.com"]
["failed"]
但我想写像
http://ww.amazon.com failed
答案 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。)