如何在Ruby中显示字符串内的变量

问题描述:

因此,我有以下代码逐行读取文本文件。每条线以一个返回托架结束。下面的代码输出以下内容:如何在Ruby中显示字符串内的变量

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

如何摆脱括号和引号?

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

得到它,改变阅读的一行.. data = line.strip – luckytaxi 2009-12-22 17:59:07

你可以使用

#{data[0]} 

代替#{}数据

这是因为拆分创建一个字符串数组。

但是,如果您确实想要简单地获取没有行尾的行,则可以使用strip方法。

+0

嗯,确定工作秒。我忘了提及,文本文件只包含“一列”(主机名)。我仍然需要使用“#data [0]” – luckytaxi 2009-12-22 17:55:54

+0

有没有更好的方法来做到这一点?我的文本文件包含以下内容: server1 server2 server3 server4 – luckytaxi 2009-12-22 17:56:51

+0

是的,当您使用split时,您总是会得到一个数组,即使它是只有一个元素的数组。不过,我不确定你是否真的需要它,或者如果剥离就足够了。 – phtrivier 2009-12-22 17:58:35

#{data[0]} 

split返回数组。

如果你的文件是以下

server1 
server2 

而且要产生这样的文件:

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 
} 

我会做这样的事情:

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

工程中打印了“line”,但我不得不将line.split更改为line.strip。 – luckytaxi 2009-12-22 18:11:56

+0

我的错误,修正了... – phtrivier 2009-12-22 18:16:29

+0

最后一个问题,而我更喜欢你的代码,我怎么让你的代码看起来更有组织?我的意思是,如果我缩进“定义主机”,那么在输出文件中,该行是缩进的。但是,我不希望这样,希望其他行缩进。它实际上适合我的代码,但是f.puts并不吸引人(更多的输入)。 – luckytaxi 2009-12-22 18:18:45