2010-06-03 10 views
9

j'ai eu l'exemple suivant:comment utiliser erb le fichier de sortie après la liaison

require 'erb' 

names = [] 
names.push({ 'first' => "Jack", 'last' => "Herrington" }) 
names.push({ 'first' => "LoriLi", 'last' => "Herrington" }) 
names.push({ 'first' => "Megan", 'last' => "Herrington" }) 

myname = "John Smith" 

File.open(ARGV[0]) { |fh| 

erb = ERB.new(fh.read) 
print erb.result(binding) 

accompagné de

text.txt 
<% name = "Jack" %> 
Hello <%= name %> 


<% names.each { |name| %> 
Hello <%= name[ 'first' ] %> <%= name[ 'last' ] %> 
<% } %> 

hi, my name is <%= myname %> 

} 

il imprime bien à l'écran.

Quelle est la façon la plus simple de sortir un autre fichier: "text2.txt" au lieu de l'écran?

Je sais que c'est vraiment un morceau de gâteau pour la plupart d'entre vous des maîtres rubis expérimentés, mais pour moi qui viens de prendre un début Ruby de Novice ... c'est un défi maintenant ... mais je veux utiliser le code pour but de la vie réelle ...

merci !!!

Répondre

20

Notez que ERB n'imprime pas ceci - vous êtes.

print erb.result(binding) 

Modifions cela. Nous allons ouvrir le handle de fichier, en mode w pour écrire, et écrire le résultat ERB dans le fichier.

File.open('text2.txt', 'w') do |f| 
    f.write erb.result(binding) 
end 

File.open('text2.txt', 'w') ouvre le fichier text2.txt dans w mode de rite, et transmet cet objet de fichier dans le bloc. f.write affiche son argument dans le fichier. Dans certains cas, vous devrez peut-être appeler le f.close pour autoriser d'autres processus sur votre ordinateur à accéder au fichier, mais puisque nous avons utilisé la notation de bloc ici, le fichier est automatiquement fermé à la fin du bloc. Code non testé - faites-moi savoir si vous obtenez une erreur. Bonne chance pour votre voyage de codage!

+0

c'est vraiment sympa, explication détaillée! Je vous remercie! – john