напишите csv в рубиновых 1.9 и CSV:: Писатель

у меня есть кодекс, который хорошо работает с рубиновыми 1.87, но не делайте работ с рубиновыми 1.9. Это говорит что CSV:: Писатель необъявленный, но это все еще часть rdoc. csv API изменился после слияния fastercsv, или нет?

мой кодекс:

require 'csv'

def self.export_csv
 file_name = File.join(RAILS_ROOT, 'public','csv',"#{start_date_f}_#{end_date_f}.csv")
 return file_name if File.exist?(file_name)
 @results = find(:all)
 header_row = []
 outfile = File.open(file_name, 'wb')
 CSV::Writer.generate(outfile) do |csv|
      header_row = ['gateway_id','created', 'gateway_status_id', 'panel_id',  'panel_status','volts_out', 'amps_out', 'temp','aid' ,'sid', 'pisid']
      csv << header_row
  end
end

Ошибка, которую я получаю: NameError: неинициализированный постоянный CSV:: Писатель

Обратите внимание, что требуют, чтобы 'csv' был там. я пробую его в своем пульте, когда я делаю требование 'csv', это работает, но как только я называю CSV:: Писатель я получаю ту ошибку. Этот кодекс хорошо работает с рубиновыми 1.87, таким образом, он заставляет меня думать, что это - рубиновые 1,9 csv проблемы, так как он был слит с fasterCSV.

18
задан VP. 26 January 2010 в 13:18
поделиться

1 ответ

Библиотека CSV еще там, но CSV :: писатель нет. Согласно CSV.RB в 1.9.0:

# I'm sure I'll miss something, but I'll try to mention most of the major
# differences I am aware of, to help others quickly get up to speed:
#
# === CSV Parsing
#
# * This parser is m17n aware.  See CSV for full details.
# * This library has a stricter parser and will throw MalformedCSVErrors on
#   problematic data.
# * This library has a less liberal idea of a line ending than CSV.  What you
#   set as the <tt>:row_sep</tt> is law.  It can auto-detect your line endings
#   though.
# * The old library returned empty lines as <tt>[nil]</tt>.  This library calls
#   them <tt>[]</tt>.
# * This library has a much faster parser.
#
# === Interface
#
# * CSV now uses Hash-style parameters to set options.
# * CSV no longer has generate_row() or parse_row().
# * The old CSV's Reader and Writer classes have been dropped.
# * CSV::open() is now more like Ruby's open().
# * CSV objects now support most standard IO methods.
# * CSV now has a new() method used to wrap objects like String and IO for
#   reading and writing.
# * CSV::generate() is different from the old method.
# * CSV no longer supports partial reads.  It works line-by-line.
# * CSV no longer allows the instance methods to override the separators for
#   performance reasons.  They must be set in the constructor.

чуть позже, есть пример того, как писать строку (а также другие методы написания):

# === To a File
#
#   CSV.open("path/to/file.csv", "wb") do |csv|
#     csv << ["row", "of", "CSV", "data"]
#     csv << ["another", "row"]
#     # ...
#   end
44
ответ дан 30 November 2019 в 06:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: