解析CSV文件,从列中获取输入,输出到新列并导出到新CSV

时间:2014-06-21 00:59:40

标签: ruby csv export-to-csv

我有一张包含7到8列数据的CSV。

对于每一行,我想 1)取2列的值 2)在我定义的方法中使用这些值 3)将输出添加到新列 4)删除原来的2列 5)导出到新的CSV

我对Ruby和编程非常陌生,而且我似乎找不到任何关于如何做到的答案(我能理解)。

我所拥有的一个例子是:

CSV标题:标题,日期,日期,时间 示例值:太阳的乐趣,星期三,09/11/14,下午3:00

我将(尝试编写)将日期和时间结合起来的方法:

def convert_time (time) 
    time_array = time.split(" ")
    time_numbers = time_array[0]
    time_mod = time_array[1]
    time_numbers = time_numbers.split("")
    if time_mod == "pm" 
        time_numbers[0] = (time_numbers[0].to_i + 12).to_s
    end
    time_numbers.join("") 
end

def add_date (date, time)
    # 09/11/14 -> 20140911
    date_array = date.split("/")
    new_date = "2014" + date_array[0] + date_array[1]
    output = "TZID=AMERICA/LOS ANGELES:#{new_date}" + "t" + convert_time(time)
end

我想获取CSV文件中的值(日期和时间),并将其作为参数添加到我的add_date方法中,以获取我在新列中添加到CSV中的值

非常感谢任何正确方向的帮助或指示。

1 个答案:

答案 0 :(得分:0)

如果没有看到您的CSV文件的剪辑,我无法给您一个确切的答案。但是,我可以使用我制作的CSV文件,它应该与您的数据类似。无论身在何处,你都必须填补空白。

我以前从未处理过在Ruby中解析CSV文件,因此我将逐步解决问题解决过程,并希望它能说明如何在将来解决此类问题。

首先,这是我正在使用的CSV文件:

Title, Day, Date, Time
Fun in the Sun, Wed, 09/11/14, 3:00 pm

快速Google搜索Ruby CSV会生成Ruby的CSV解析类文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html

Ruby csv headers的进一步Google搜索会产生此堆栈溢出帖子:Parse CSV file with header fields as attributes for each row

太好了,现在我们可以这样做了:

CSV.foreach('my_file.csv', :headers => true) do |csv_obj|
  # Access CSV data here
end

查看CSV类的文档,我们还可以将数据写入CSV。最后,我们可以解决您的问题:

def add_date (date, time)
  # 09/11/14 -> 20140911
  date_array = date.split("/")
  new_date = "2014" + date_array[0] + date_array[1]
  output = "TZID=AMERICA/LOS ANGELES:#{new_date}" + "t" + convert_time(time)
end

CSV.open('output_file.csv', 'wb') do |csv_out|
  CSV.foreach('input_file.csv', :headers => true) do |csv_in|
    csv_out << [csv_in['Title'], csv_in['Day'], add_date(csv_in['Date'], csv_in['Time'])]
  end
end

有意义吗?