:all
コンバーターは、すべての組み込みコンバーターを試すことを意味します。具体的には、次のとおりです。
:integer: Converts any field Integer() accepts.
:float: Converts any field Float() accepts.
:date: Converts any field Date::parse() accepts.
:date_time: Converts any field DateTime::parse() accepts.
基本的に、これはフィールドを文字列として残すのではなく、(可能であれば) それらの値に変換しようとすることを意味します。そのrow[i]
ため、文字列値 '9' を返す場合、代わりに整数値 9 を返します。
ヘッダー コンバーターは、ヘッダーを使用して行にインデックスを付ける方法を変更します。たとえば、次のようなことをするとします。
FastCSV.foreach(some_file, :header_converters => :downcase) do |row|
ヘッダー「Some Header」を持つ列を として索引付けしますrow['some header']
。
代わりに使用する場合:symbol
は、 で索引付けしrow[:some_header]
ます。Symbol は、ヘッダー名を小文字化し、スペースをアンダースコアに置き換え、az、0-9、. 以外の文字を削除し_
ます。シンボルの比較は文字列の比較よりもはるかに高速であるため、便利です。
で列にインデックスを付けたい場合は、オプションrow['Some Header']
を提供しないでください。:header_converter
編集:
あなたのコメントに応えて、 headers_convert はあなたが望むことをしません。ヘッダー行の値は変更されず、インデックスとして使用される方法だけが変更されます。代わりに、:return_headers
オプションを使用してヘッダー行を検出し、変更を加える必要があります。ファイルを変更して再度書き出すには、次のようなものを使用できます。
require 'fastercsv'
input = File.open 'original.csv', 'r'
output = File.open 'modified.csv', 'w'
FasterCSV.filter input, output, :headers => true, :write_headers => true, :return_headers => true do |row|
change_headers(row) if row.header_row?
end
input.close
output.close
元のファイルを完全に置き換える必要がある場合は、上記の実行後に次の行を追加します。
FileUtils.mv 'modified.csv', 'original.csv', :force => true