【问题标题】:Storing cvs data for further manipulation using Ruby使用 Ruby 存储 cvs 数据以进行进一步操作
【发布时间】:2011-02-22 02:49:02
【问题描述】:

我正在处理一个包含一些客户信息(电子邮件、姓名、地址、金额、[shopping_list: item 1, item 2])的 csv 文件。

我想处理这些数据并制作一些用于打印的标签...以及收集一些额外信息(总金额、总项目 1...)

我主要关心的是找到合适的结构来将数据存储在 ruby​​ 中以供将来操作。目前我想到了以下几种可能性:

  1. 多维数组:构建起来非常简单,但很难以漂亮的 ruby​​ 方式访问数据。
  2. 散列:将电子邮件作为键,并将信息存储在不同的散列中(一个散列用于名称,另一个散列用于地址,另一个散列用于购物清单...)
  3. (将 cvs 数据放入数据库并使用来自 ruby​​ 的数据??)

非常感谢您的建议和指导!

【问题讨论】:

    标签: ruby database csv


    【解决方案1】:

    一旦您拥有需要组合在一起的多条信息,就该考虑从通用哈希/数组转移到更专业的东西了。 Ruby 的struct module

    Customer = Struct.new(:email, :name, :address) # etc.
    
    bill = Customer.new('bill@asdf.com', 'Bill Foo', '123 Bar St.')
    
    puts "#{bill.name} lives at #{bill.address} and can be reached at #{bill.email}"
    

    输出:

    Bill Foo 住在 123 Bar St.,可以通过 bill@asdf.com 联系到

    Struct#new 只需为您传入的每个符号创建一个带有 attr_accessor 的类。嗯,它实际上创建的不止这些,但对于初学者来说,这就是您需要担心的全部。

    一旦您将每一行的数据打包到某种对象中(无论是struct 还是您自己的类),然后您就可以担心如何存储那些对象。

    • 散列非常适合通过给定密钥(可能是客户姓名或其他唯一 ID)进行随机访问
    • 一维数组可以很好地按照插入顺序对整个客户集进行迭代

    【讨论】:

    • 感谢您的超快速回复 :) 如果我理解正确,我应该做的是:第一次在某种结构/类中获取 cvs 的每一“行”,第二次存储所有散列/数组中的结构以方便操作......对吗?
    • @ischnura:是的,你的理解完全正确。
    • 再次感谢您的回答...我按照您的建议构建了代码,一切都更容易理解。一切都很好!
    猜你喜欢
    • 1970-01-01
    • 2021-01-05
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    相关资源
    最近更新 更多