我有一个CSV文件,其数据如下:日期; salario
Nome; Data; Salario
JOANNA 1981-04-11 7519.07
LUCIMAR 1958-06-10 819.77
PEDRO 1976-05-11 83.43
JOAO 1989-03-12 867.5
CAIO 1954-02-13 88.6
JULIANA 1958-07-15 884.78
LUCIMAR 1958-07-15 894.7
我需要比较日期并知道出生时间较长的人和最近出生的人,但是我没有得到。
我可以读取文件csv但无法比较日期。任何人都可以帮助我吗?
require 'csv'
CSV.read('file.csv')
CSV.foreach('file.csv') do |row|
puts row.inspect
end
我已经尝试过比较日期
data = Date.new
dataAtual = Date.new
pessoa = Hash.new
CSV.foreach('test.csv') do |row|
dataAtual = Date.parse(row[1])
if dataAtual > data
data = dataAtual
end
pessoa["name"] = row[0]
pessoa["date"] = row[1]
end
感谢您的聆听
答案 0 :(得分:1)
正确格式化csv文件
Nome;Data;Salario
JOANNA ;1981-04-11;7519.07
LUCIMAR;1958-06-10;819.77
PEDRO ;1976-05-11;83.43
JOAO ;1989-03-12;867.5
CAIO ;1954-02-13;88.6
JULIANA;1958-07-15;884.78
LUCIMAR;1958-07-15;894.7
这是代码
require 'csv'
# load rows and delete empty? rows
rows = CSV.read('./file.csv', headers: true, col_sep: ';').delete_if{ |row| row.empty? }
sorted_rows = rows.sort_by{ |row| row['Data'] }
sorted_rows.each{ |row| puts row.inspect }
答案 1 :(得分:1)
如果您不使用逗号作为分隔符,则需要通过包含.value.get.get
选项来指定它。然后,这只是解析和存储最老/最年轻的问题:
col_sep
答案 2 :(得分:0)
您必须将日期字符串转换为日期对象 - 它们具有可比性并且可以进行排序。
2.1.1 :002 > require 'date'
=> true
2.1.1 :003 > Date.strptime('1981-04-11', '%Y-%m-%d')
=> #<Date: 1981-04-11 ((2444706j,0s,0n),+0s,2299161j)>
2.1.1 :004 > Date.strptime('1981-04-11', '%Y-%m-%d') > Date.strptime('1981-04-12', '%Y-%m-%d')
=> false
2.1.1 :005 > Date.strptime('1981-04-11', '%Y-%m-%d') > Date.strptime('1981-04-10', '%Y-%m-%d')
=> true