【问题标题】:How do I execute Date from a string?如何从字符串执行日期?
【发布时间】:2013-04-19 23:21:30
【问题描述】:

我正在尝试读取其中包含动态日期的文件,例如 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}

【问题讨论】:

  • 如其所写...enter code here。或者那里。 Thay 会有所帮助。
  • 这是我的第一篇文章..我在发布它时遇到了问题..所以尽快编辑它。没想到有人会这么快发帖:)

标签: ruby string parsing date


【解决方案1】:

您将不得不使用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}

【讨论】:

  • 我可能错了,我打算使用 OCRA 打包它,所以如果我将 i 分发给其他人,eval 是否有效? .会尝试我自己,但想检查并确认。
  • 工作得非常好。我在想这个eval,但使用你的 eval 例子效果很好。 :)
猜你喜欢
  • 2019-04-22
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多