【发布时间】:2010-01-23 20:25:43
【问题描述】:
我有一个哈希值 (@post),我想将它保存到 csv 中。对我来说奇怪的是,我的方法适用于标题,但不适用于行。如果我使用
显示行csv << (@post_csv_order.each {|element| puts single_post[element]})
我可以在屏幕上看到正确的字符串,但 csv 文件包含哈希键的值而不是哈希值的值。基本上我的 csv 中有 5 行标题,而不是正确的值。
我想我需要将@post[key] 哈希转换为一个基于@post_csv_order 顺序的数组(包含@post[key] 哈希的键)有一个哈希方法to_a 但它不会给出我需要的订单。
我猜你可能会建议不同的方法而不是使用散列的散列,但我也想知道如何将散列转换为具有一些预定义顺序的数组。
另一方面,如果有任何简单的方法可以将哈希散列保存到 csv/table 中,我很乐意重写我的代码。
require 'rubygems'
require 'faster_csv'
require 'pp'
@post = {123 => {"ForumID" => "123", "Post author" => "Thom" },
222 => {"ForumID" => "222", "Post author" => "Mark"},
345 => {"ForumID" => "345", "Post author" => "Eddy"},
444 => {"ForumID" => "444", "Post author" => "Eli"}}
@post_csv_order = [
"ForumID" ,
"Post author"
]
FasterCSV.open("test.csv", "w", { :quote_char => '"', :col_sep =>',', :row_sep =>:auto, :headers => true, :return_headers => false, :force_quotes => true}) do |csv|
csv << (@post_csv_order.each {|element| element})
@post.each_value do |single_post|
csv << (@post_csv_order.each {|element| single_post[element]})
#csv << (@post_csv_order.each {|element| puts single_post[element]})
end
end
【问题讨论】: