gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:40:42 24 4
gpt4 key购买 nike

在 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

最佳答案

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

问题是您无法使用 gem install 轻松安装 gem。 (除非你克隆 repo 并构建 gem 并从你的文件系统安装 gem,但这不是一个可移植的解决方案)如果你不能使用 gem install 那么你就不能使用 require 'csv' 因为那样只会使用您已经安装的有漏洞的版本。 (类似地,克隆存储库并使用 require '/path/to/csv-3.0.4' 不是可移植的解决方案)

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

# Gemfile
gem 'csv', git: 'https://github.com/ruby/csv.git', ref: '7ede8e84a2b8'

然后运行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

接下来,更改脚本以使用 bundler 加载 gem 并指定要使用的 gem 的版本:

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

puts CSV::VERSION

(您不需要调用 require 'csv'; bundler 会为您完成)

然后运行 ​​ruby test.rb 并验证它使用的是您期望的 gem 版本:

3.0.4

现在修改 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

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

关于ruby - 如何刷新 CSV::Table 的标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54192058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com