如何用Ruby显示字符串中的变量
下面的代码逐行读取文本文件。 每条线都以一个回程车厢结束。以下代码输出以下内容:如何用Ruby显示字符串中的变量,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
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
你可以用
#{data[0]}
而不是#{data}
这是因为split创建了一个字符串数组
但是,如果您真的想简单地获取没有行尾端的行,可以使用strip方法
#{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
output=File.open(“output”,“w”)
文件。打开(“主机”)。每行|
服务器名称=line.strip
text=hmmm,好的,可以了。我忘了提到,文本文件只包含“一列”(主机名)。我还需要使用“#数据[0]”吗?有更好的方法吗?我的文本文件包含以下内容:server1 server2 server3 server4是的,使用split时始终会得到一个数组,即使它是一个只有一个元素的数组。然而,我不确定你是否真的需要它,或者脱衣是否足够。哦,我是个笨蛋,我甚至不需要做任何事情。我删除了data=line部分,只是在{}内打印了“line”,得到它,将其中一行改为read。。data=line.strip最后一个问题,虽然我更喜欢您的代码而不是我的代码,但如何使您的代码看起来更有条理?我的意思是,如果我缩进“define host”,那么在输出文件中,该行是缩进的。但是,我不希望这样,希望其他行缩进。在我的代码中,它实际上符合我的喜好,但是f.puts并不吸引人(更多的输入)。然后,另一个解决方案是将要打印的所有文本行放入一个数组中(比如行=[“define host{”,“use servers”,“host#name{server#u name]”),并将数组传递给put(output.puts(lines))…通常情况下,如果我相信。。。