比较ruby中CSV文件的日期

时间:2015-07-04 13:10:19

标签: ruby csv

我有一个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

感谢您的聆听

3 个答案:

答案 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 

http://ruby-doc.org/stdlib-2.1.1/libdoc/date/rdoc/Date.html