2009-12-22 32 views
5

Así que tengo el siguiente código que lee un archivo de texto línea por línea. Cada línea termina con un carro de retorno. El siguiente código muestra lo siguiente:Cómo mostrar una variable dentro de cadena con Ruby

define host { 
    use    servers 
    host_name   ["buffy"] 
    alias   ["buffy"] 
    address  ["buffy"].mydomain.com 
} 

¿Cómo me deshago del corchete y las comillas?

File.open('hosts','r') do |f1| 

while line = f1.gets 
    data = line.chomp.split("\n") 

     File.open("nagios_hosts.cfg", "a") do |f| 
      f.puts "define host {\n"; 
      f.puts "\tuse    servers\n" 
      f.puts "\thost_name  #{data}" 
      f.puts "\talias   #{data}" 
      f.puts "\taddress  #{data}.mydomain.com" 
      f.puts "\t}\n\n" 
     end 
    end 
end 
+0

lo tiene, cambiado la una línea para leer .. data = line.strip – luckytaxi

Respuesta

5

usted podría utilizar

#{data[0]} 

en lugar de # {datos}

Eso es porque dividida crea una matriz de cadenas.

Sin embargo, si realmente desea obtener la línea sin el final de la línea, puede utilizar el método de la tira.

+0

hmmm, vale eso trabajo s. olvidé mencionar que el archivo de texto solo contiene "una columna" (el nombre de host). ¿Todavía tendría que usar "#data [0]" – luckytaxi

+0

¿hay una mejor manera de hacerlo? mi archivo de texto contiene lo siguiente: server1 servidor2 servidor3 server4 – luckytaxi

+0

Sí, siempre se obtiene una matriz cuando se utiliza dividida, incluso si se trata de una matriz con un solo elemento. Sin embargo, no estoy seguro de que realmente lo necesites o si la tira fuera suficiente. – phtrivier

0
#{data[0]} 

split devuelve una matriz.

0

Si el archivo es el siguiente

server1 
server2 

Y se quiere producir un archivo de la siguiente manera:

define host { 
use    servers 
host_name  server1 
alias   server1 
address   server1.mydomain.com 
} 

define host { 
use    servers 
host_name  server2 
alias   server2 
address   server2.mydomain.com 
} 

me gustaría hacer algo como:

output = File.open("output", "w") 

File.open("hosts").each_line do |line| 
    server_name = line.strip 
    text = <<EOF 
define host { 
use servers 
host_name #{server_name} 
alias #{server_name} 
address #{server_name}.mydomain.com 
} 
EOF 
    output << text 
end 

output.close 
+0

pero tuve que cambiar line.split por line.strip. – luckytaxi

+0

mi error, corrigió esa ... – phtrivier

+0

una última pregunta, mientras prefiero tu código al mío, ¿cómo hago que tu código parezca más organizado? Lo que quiero decir es que si doblo "definir host", entonces en el archivo de salida, esa línea se sangra. Sin embargo, no quiero eso, quiero que las otras líneas sean sangradas. Realmente funciona a mi gusto en mi código, pero sí las entradas no son atractivas (más tipeo). – luckytaxi

Cuestiones relacionadas