我有一张包含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中的值
非常感谢任何正确方向的帮助或指示。
答案 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
有意义吗?