2 votes

Comment exécuter une date à partir d'une chaîne de caractères ?

J'essaie de lire un fichier qui contient des dates dynamiques, par exemple Date.today o (Date.today - 1 ) et exécuter mon code en fonction de la date demandée.

Si j'ai la chaîne définie avec la date entre guillemets, cela fonctionne. En revanche, la lecture de la même chaîne à partir d'un fichier ne fonctionne pas. Existe-t-il une eval que je dois utiliser pour que cela fonctionne ?

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
}

Contenu du fichier test.txt :

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

0voto

Cody Caughlan Points 18780

Vous allez devoir utiliser eval pour évaluer le contenu de chaque ligne au fur et à mesure de sa lecture.

Mais comme vous évaluez un code arbitraire, vous devez être sûr qu'il ne s'agit pas d'un code malveillant.

Donc, en supposant que vous faites confiance au fichier et à ses lignes :

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

Remarquez la mise entre guillemets, car le "morceau de code" que vous allez évaluer doit être une chaîne Ruby "valide" (qui contient elle-même du code, donc vous la mettez entre guillemets pour la faire apparaître comme une véritable chaîne entre guillemets).

Cela fonctionne si test.txt ressemble à :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X