是否有什么好方法可以刷新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
答案 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。