2016-05-23 3 views
2

私は今週末にRubyを学び始めました。私は、DateフィールドとTimeフィールドを持つCSVファイルを読み込み、出力に書き込まれた新しいDateTimeフィールドに値をマージするスクリプトを作成しています。Ruby- CSVのマージフィールド値

私が持っているものは部分的には動作していますが、問題はカンマで区切られた日付と時刻の値です。私はカンマを削除し、スペースで置き換えたいと思います。カンマを削除して値をマージするにはどうすればよいですか?

require 'csv' 

CSV.open("output.csv", "wb", :headers => true) do |output| 
    CSV.foreach("input.csv", :headers => true, :return_headers => true) do |row| 
    if row.header_row? 
     output << (row << 'DateTime') 
    else 
     output << (row << row['Date'].to_s << (row['Time'].to_s)) 
    end 
    end 
end 
+0

CSVヘッダーとCSVのレコードの最初の行を表示することができます。 –

+0

ファイルを 'wb'モードで開く必要はありません。 'b'はバイナリを意味し、バイナリファイルではなくテキストファイルを作成しています。これはUnixに違いはないかもしれませんが、読者には「バイナリファイルになる」と言われているので、移植性がなく、一般的に悪い習慣です。 –

答えて

0

あなたは、文字列の内容を置き換えるためにtrを使用することができます。

date = row['Date'] 
time = row['Time'] 

datetime = "#{date} #{time}".tr(',', ' ') 
0

このような何かを助ける必要があります。

require 'csv' 

CSV.open("output.csv", "wb", :headers => true) do |output| 
    output << 'DateTime' 

    CSV.foreach("input.csv", :headers => true, :return_headers => true, :header_converters => :symbolize) do |row| 
    output << ["#{row[:date] row[:time]}"] 
    end 
end 

ここでの変更は、この機能を表す:

  • :return_headers => trueが大幅にも中等度のパフォーマンスを向上させることができ、シンボルにヘッダーフィールド名を変換し、長さのCSVファイル
  • ヘッダが安全であるため、ヘッダ出力を入力CSVループの外に移動しました任意の行データ
  • row[:date]row[:time]
  • ための効率的な列参照メカニズムを使用する前に、LY row[:date]row[:time]
両方を含む補間文字列からなる、(1つの要素の)配列として行データを書き込んだ書き込むこと
+0

@JohnnySemicolonこれがあなたの質問に答えた場合は、答えの横にあるチェックマークをクリックしてそれを受け入れてください。チェックマークが緑色に変わります。アップホーテも常に高く評価されています。 :D –

関連する問題