2010-06-03 6 views
9

me dieron el siguiente ejemplo:cómo utilizar erb al archivo de salida después de la unión

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) 

acompañado por

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


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

hi, my name is <%= myname %> 

} 

imprime muy bien a la pantalla.

¿Cuál es la forma más sencilla de enviar a otro archivo: "text2.txt" en lugar de a la pantalla?

Sé que esto es realmente un pedazo de pastel para la mayoría de los experimentados maestros de rubí, pero para mí que acaba de adquirir un Principio Rubí de principiante ... es un desafío ahora ... pero quiero usar el código para propósito de la vida real ...

gracias!

Respuesta

20

Tenga en cuenta que ERB no está imprimiendo esto, usted sí.

print erb.result(binding) 

Cambiemos eso. Abriremos el identificador del archivo, en el modo w para escribir, y escribiremos el resultado del ERB en el archivo.

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

File.open('text2.txt', 'w') abre el archivo en text2.txtw modo de rito, y pasa ese objeto archivo en el bloque. f.write muestra su argumento en el archivo. En algunos casos, puede necesitar llamar al f.close para permitir que otros procesos en su computadora accedan al archivo, pero como usamos aquí la notación de bloque, el archivo se cierra automáticamente al final del bloque.

Código no probado: comuníqueme si obtiene un error. ¡Buena suerte en tu viaje de codificación!

+0

que es realmente agradable, explicación detallada! ¡gracias! – john

Cuestiones relacionadas