У меня есть хэш хэшей (@post), и я хочу сохранить его в csv. Для меня странно, что мой подход работает для заголовка, но не для строк. Если я отображаю строки, используя
csv << (@post_csv_order.each {|element| puts single_post[element]})
Я вижу правильные строки на экране, но CSV-файлы содержат значения хеш-ключа, а не значения хеш-значений. В основном у меня есть 5 строк заголовка в моем CSV вместо правильных значений.
Я думаю, что мне нужно преобразовать хеш @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