ruby - 如何从字符串执行日期?

标签 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}

最佳答案

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

关于ruby - 如何从字符串执行日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16114836/

相关文章:

ruby - 从 sinatra 的帖子调用系统

ruby - Ruby 类变量不好吗?

在C中复制字符串的一部分

ruby - 在 Ruby 中操作字符串和数组

parsing - Jsoup 与 GWT(制作兼容的 JAR)

java - 在 Java 中解析伪 XML 文件

python - 使用 Python/Pandas 解析嵌套 JSON

ruby - 有没有一种简单的方法可以使用 Ruby 的 Socket 类通过原始套接字发送数据包?

ruby - 我怎么知道 BigDecimal 是否解析失败?

javascript regexp 不只计算一个字符