热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Ruby-CSV的哈希数组

如何解决《Ruby-CSV的哈希数组》经验,为你挑选了1个好方法。

我已经收集了一些数据并将其保存为以下形式的哈希数组:

info = [
  {'Name' => 'Alex', 'Tel' => 999, 'E-mail' => "bla@bla.com"},
  {'Name' => 'Ali', 'Tel' => 995, 'E-mail' => "ali@bla.com"}
  # ...
]

但并非所有信息都始终存在:

{'Name' => 'GuyWithNoTelephone', 'E-mail' => "poor@bla.com"}

我想将此信息转换为CSV文件.这是我尝试过的:

def to_csv (info)
  CSV.open("sm-data.csv", "wb") do |csv|
  csv <<["Name", "Tel", "E-mail"]
    info.each do |person|
      csv <

当我尝试这个时,表的格式不正确,并且如果缺少电话号码,那么该人的电子邮件将出现在电话栏中.

如何有选择地将此信息写入CSV文件,即如果缺少值,如何跳过列?



1> Stefan..:

但遗憾的是,当我尝试这个时,表的格式不正确,并且说,如果缺少电话号码,那么该人的电子邮件将出现在电话栏中.

那是因为在这种情况下您省略了电话号码,只提供3个值中的2个.要解决此问题,您只需提供所有3个值,即使它们在哈希中不存在:

csv <<['Name', 'Tel', 'E-mail']
info.each do |person|
  csv <<[person['Name'], person['Tel'], person['E-Mail']]
end

或通过Hash#values_at:

csv <<['Name', 'Tel', 'E-mail']
info.each do |person|
  csv <

对于:

{'Name' => 'GuyWithNoTelephone', 'E-mail' => "poor@bla.com"}

这导致:

csv <<['GuyWithNoTelephone', nil, 'poor@bla.com']

生成此输出:(注意两个逗号,表示中间的空字段)

"GuyWithNoTelephone,,poor@bla.com\n"


推荐阅读
author-avatar
来人把老师拖出I去毙了
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有