如何从字符串中执行日期?

时间:2013-04-19 23:21:31

标签: ruby string parsing date

我正在尝试阅读其中包含动态日期的文件,例如Date.today(Date.today - 1 ),并根据请求的日期执行我的代码。

如果我使用引号中的日期定义了字符串,则它可以正常工作。从文件中读取相同的字符串时,它不会。是否需要使用eval函数才能使其正常工作?

require 'date'
#Works
abc = "something #{Date.today}"
puts abc
# something 2013-04-19

#does not work
f = File.read("test.txt")
f.each_line { |line|  puts line ; words = line.split("\t")
  puts line
}

test.txt文件的内容:

something #{Date.today}
# something #{Date.today}

1 个答案:

答案 0 :(得分:0)

您将不得不使用eval来实际评估每行的内容作为其读取。

但是既然你要评估任意代码,你就必须相信它不是恶意代码。

因此,假设您信任该文件及其行:

require 'date'
f = File.read("test.txt")
f.each_line do |line|
 puts eval("\"#{line}\"")
end

注意双引号包装,因为你要评估的“代码片段”需要是一个“有效的”Ruby字符串(它反过来包含代码,所以你用引号括起来使它看起来像是一个实际的双引号字符串。

如果test.txt看起来像这样:

Hello, #{Date.today}
Goodbye, #{Date.today}