我正在使用Rails应用程序(CSV.generate
中的默认列分隔符(“,”)使用Rails 4.2.4 & ruby version ruby 2.2.4p230
生成CSV。
我现在需要将列分隔符更新为;
,我可以这样做CSV.generate(:col_sep => ";")
,但是我将不得不在很多地方进行替换。
我想知道是否可以在应用程序中某个适用于所有CSV.generate
的通用位置上设置列分隔符,而不必在每个单独的位置上更改。
谢谢。
答案 0 :(得分:0)
(当前)不是可以全局设置的选项。但是,您可以编写一个覆盖initialize
的包装器,并在当前使用CSV
的地方使用它。
class SSV < CSV
# Uses Ruby 2.2.4 semantics instead of named parameters used in later versions.
def initialize(data, options = Hash.new)
super(data, options.merge(col_sep: ';'))
end
end
SSV.generate('') { |ssv| ssv << ['foo', 'bar', ';'] } # => "foo;bar;\";\"\n"
(请确保在一些测试中将其包装。)
答案 1 :(得分:0)
CSV::DEFAULT_OPTIONS
哈希常量保存选项的默认值,包括col_sep
。由于哈希值被冻结,因此没有设置或修改这些默认值的标准方法。需要一些解决方法(或者可能是肮脏的hack):
require 'csv'
modified_defaults = CSV::DEFAULT_OPTIONS.dup
modified_defaults[:col_sep] = ';'
CSV::DEFAULT_OPTIONS = modified_defaults.freeze
最好的位置可能是在config/initializers/csv.rb
中。这将使csv
库在您的应用程序中全局可用,并全局重新定义默认值。
此解决方案将引发有关重新定义常量的警告。请记住,.generate
不仅会使用新的默认值,而且csv
库中接受col_sep
选项的所有方法都将使用新的默认值。