我正在尝试使用Ruby来操作一些excel数据,但我给出的.csv文件将所有数据放在一列中。
数据的标题和值以逗号分隔,但它们包含在第一列中。 此外,第一列中的某些值的文字被引号括起来,引号内有逗号。
有没有办法将第一列中的数据分成带有Ruby的单独列?
我知道你可以在excel中执行此操作,但我希望能够在Ruby中执行此操作,因此我不必手动更正每个.csv文件。
我在下面列出了.csv文件的示例。
所需的输出是:
{:header 1 => integer,
:header 2 => text,
:header 3 => "this text, has a comma within the quote"
:header 4 => integer}
我很感激帮助。
答案 0 :(得分:1)
这是一种粗略的方法:
require 'csv'
result = []
csv = CSV.read('./file.csv')
headers = csv.shift
csv.each do |l|
hash = {}
hash[headers[0]] = l[0]
hash[headers[1]] = l[1]
hash[headers[2]] = l[2]
hash[headers[3]] = l[3]
result << hash
end
p result
[{"header 1"=>"integer",
"header 2"=>"text",
"header 3"=>"this text, has a comma within the quote",
"header 4"=>"integer"},
{"header 1"=>"integer",
"header 2"=>"text",
"header 3"=>"this text, has a comma within the quote",
"header 4"=>"integer"}]
这当然假设每行有4个值。
编辑:以下是将结果实际写入文件的示例:
CSV.open('./output.csv', 'wb') do |csv|
result.each do |hash|
temp = []
hash.each do |key, value|
temp << "#{key} => #{value}"
end
csv << temp
end
end