Ruby- CSV合并字段值

时间:2016-05-23 06:19:53

标签: ruby csv

本周末我开始学习Ruby。我正在编写一个脚本,该脚本将读取具有Date字段和Time字段的CSV文件,并将值合并到写入输出的新DateTime字段中。

我所拥有的是部分工作,但我遇到的问题是日期和时间值以逗号分隔。我想删除逗号并用空格替换它。如何删除逗号并将值合并在一起?

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

2 个答案:

答案 0 :(得分:0)

您可以使用tr替换字符串中的内容。

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

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

答案 1 :(得分: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]
  • 的高效列引用机制
  • 将行数据写为一个数组(一个元素),由包含row[:date]row[:time]
  • 的插值字符串组成