2

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}
4

1 に答える 1

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}
于 2013-04-19T23:24:22.277 に答える