如何刷新CSV :: Table的标题?

时间:2019-01-15 02:46:09

标签: ruby csv

是否有什么好方法可以刷新CSV :: Table对象中的标头?

require 'csv'

txt =<<TXT
"h1","h2","h3"
1,"test",3
2,"test",6
3,"test",9
TXT

table = CSV::parse(txt, headers: true)
table.each do |row|
  row << {"h4" => "additional"}
end
puts table.to_csv

实际

h1, h2,   h3  
1,  test, 3,  additional  
2,  test, 6,  additional  
3,  test, 9,  additional  

预期

h1, h2,   h3, h4  
1,  test, 3,  additional  
2,  test, 6,  additional  
3,  test, 9,  additional  

1 个答案:

答案 0 :(得分:0)

您的GitHub issue已由作者解决。您可以从GitHub安装gem,它将按您期望的方式工作。

问题是您无法使用gem install轻松安装gem。 (除非您克隆存储库并从文件系统中构建gem并安装gem,但这不是可移植的解决方案)而且如果您不能使用require 'csv',那么就不能使用require '/path/to/csv-3.0.4',因为只会使用您已经安装的错误版本。 (类似地,克隆存储库并使用# Gemfile gem 'csv', git: 'https://github.com/ruby/csv.git', ref: '7ede8e84a2b8' 并不是可移植的解决方案)

一种解决方法是使用捆绑软件将固定的gem安装到您的捆绑软件路径中:

bundle install

然后运行Fetching https://github.com/ruby/csv.git Resolving dependencies... Using bundler 1.17.2 Using csv 3.0.4 from https://github.com/ruby/csv.git (at 7ede8e8@7ede8e8) Bundle complete! 1 Gemfile dependency, 2 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed.

bundle info csv

并运行bundle info csv * csv (3.0.4 7ede8e8) Summary: CSV Reading and Writing Homepage: https://github.com/ruby/csv Path: /Users/foo/.rvm/gems/ruby-2.6.0/bundler/gems/csv-7ede8e84a2b8 确认:

# test.rb
require 'bundler/setup'
Bundler.require :default
gem 'csv', '=3.0.4'

puts CSV::VERSION

下一步,更改脚本以使用捆绑程序加载gem,并指定要使用的gem版本:

require 'csv'

(您不打给ruby test.rb;捆绑器为您完成此操作)

然后运行3.0.4 并验证它是否使用了您期望的gem版本:

test.rb

现在修改require 'bundler/setup' Bundler.require :default gem 'csv', '=3.0.4' txt =<<TXT "h1","h2","h3" 1,"test",3 2,"test",6 3,"test",9 TXT table = CSV::parse(txt, headers: true) puts table.to_csv + "\n" table.each do |row| row << {"h4" => "additional"} end puts table.to_csv 以包括您的原始代码:

ruby test.rb

并运行h1,h2,h3 1,test,3 2,test,6 3,test,9 h1,h2,h3,h4 1,test,3,additional 2,test,6,additional 3,test,9,additional

java -jar

现在您有了一个可移植的解决方案,该解决方案可以在任何系统上运行,并在实施此修复程序的提交时从git repo加载gem。