【问题标题】:How can I use a ruby program to save an array of hashes to a csv file?如何使用 ruby​​ 程序将哈希数组保存到 csv 文件?
【发布时间】:2013-11-24 04:42:26
【问题描述】:

我在 ruby​​ 程序中有一个包含销售数据的哈希数组,我想编写代码将这些数据保存到 csv 文件中,以便以后访问或更新。关于我如何做到这一点的任何建议?感谢您的所有帮助!

【问题讨论】:

  • 您是否有需要使用 CSV 格式的理由(例如,将其读入电子表格),或者您只是想保存数组的内容以便稍后检索它以供进一步使用用 Ruby 处理?如果是后者,请考虑改用Marshall。 Marshall 是一种获取 Ruby 对象快照的简单方法,您可以选择将其保存到文件中。
  • @CarySwoveland 感谢您的评论。我需要保存数组的内容,以便稍后检索它以进行进一步处理。我需要能够在 csv 中的数组中查询特定日期范围内的销售数据
  • 如果您确定要以 CSV 格式保存数据,一个答案会将您指向 CSV 类。 CSV 通常用于在不共享更方便格式的程序之间传输。如果您不喜欢 CSV,您可能希望编辑您的问题以提供有关您想要做什么的更多信息。例如,如果您计划定期将销售数据保存到单独的文件中,然后读取这些文件进行处理,请考虑将数据保存在数据库中(例如,SQLite)。

标签: ruby arrays csv methods io


【解决方案1】:

您可以使用 Ruby Marshal 内置类进行序列化。

# load array from array.bin or initialize new array
array = if File.exists?('array.bin')
           File.open('array.bin') do|file|
             Marshal.load(file)
           end
         else
           []
         end

# see what's in array
puts array.inspect

# modify array
array << ["test"]

# save into array.bin file
File.open('array.bin','w') do|file|
  Marshal.dump(array, file)
end

【讨论】:

  • 谢谢@retro。在这种情况下可以使用 .csv 扩展名吗?我需要将其保存到 csv 文件中,以便以后按日期范围查询信息。
  • 不,您需要编写自己的从 ruby​​ 数组到 CSV 的转换。这会将您的数组序列化为二进制文件。再次加载后,你会得到相同的数组。
【解决方案2】:

我认为您可以考虑使用 Ruby 标准库中的 CSV 类。

http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html

【讨论】:

    猜你喜欢
    • 2012-01-01
    • 2012-04-20
    • 1970-01-01
    • 2017-11-30
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    相关资源
    最近更新 更多