Ruby的Range功能强大无比,我们可以简单的使用:
(1..10).each{|i| puts i}
打印出:
1
2
...
10
对于字符串我们也可以:
("hello" .. "world").each{|word| puts word}
更加强大的是对于日期,ruby同样支持rang
require 'date'
date_begin = Date.parse '2010-09-01'
date_end = Date.parse '2010-10-07'
(date_begin .. date_end).each{|date| puts date}
这个很有用,我今天就遇到了一个问题使用了date的Range,轻松搞定。
这个问题是:要处理的文件都是文件名为保存时的日期加后缀,比如:
20100910-00001,现在我要处理从2010-09-01到2010-10-07的所有文件,
shell有seq,这个只能搞定通过使用seq 1 10做1..10这样的事情,对于日期
搞不定,也不想自己搞那么一个数组。
于是就想到了强大的Ruby的Range来搞定它,发现日期果然支持Range操作,于是开搞:
代码类似如下:
date_seq.rb
require 'date'
date_begin = Date.parse '2010-09-01'
date_end = Date.parse '2010-10-07'
(date_begin .. date_end).each{|date| puts date.to_s.gsub(/-/,"")}
while read date; do
for file in `ls $date-*`; do
#process the file
done
done < ruby date_seq.rb