2014-09-11 64 views
0

使用Ruby红宝石,转换的cron范围为数字

我想这是出现在cron任何范围将扩大到范围EX所包含的数字:

0,5,7,30-35 1,3-8,20 * * * /script.sh 

扩展:

0,5,7,31,32,33,34,35 1,3,4,5,6,7,8,20 * * * /script.sh 

任何帮助理解

+1

什么是'***/script.sh'? – sawa 2014-09-11 12:54:56

+0

这是什么对象?特别是,在......周围发生了什么...... 35 1 ...'? “0,5,7,30-35”的逻辑推测是(0,5,7,31,32,33,34,35)? – sawa 2014-09-11 13:02:35

回答

4

假设0,5,7,30-35 1,3-8,20 * * * /script.sh是一个字符串,一个简单的gsub会工作:

str = "0,5,7,30-35 1,3-8,20 * * * /script.sh" 

str.gsub(/(\d+)-(\d+)/) { ($1..$2).to_a.join(',') } 
#=> "0,5,7,30,31,32,33,34,35 1,3,4,5,6,7,8,20 * * * /script.sh" 
+0

这与OP给出的“扩展”不同。提示:'30'。 – sawa 2014-09-11 13:04:50

+4

不错,我准备发布完全相同的解决方案。 @sawa我认为这是排除30-35范围内的'30'的OP错误。 – 2014-09-11 13:05:41

+0

好的,斯蒂芬。一个变体:'str =“1-3,5,6-8,10,12-14”; str.gsub(/ \ d + - \ d + /){| r | F,L = r.split( ' - '); [*(f..l)]。join(',')} =>“1,2,3,5,6,7,8,10,12,13,14”'。你能解释一下吗(对于上面的'str'):'str.gsub(/(\ d +) - (\ d +)/,$ 1 +' - '+ $ 2)=>“12-14,5,12-14, 10,12-14" '? – 2014-09-11 17:41:54