Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Ruby显示字符串中的变量_Ruby - Fatal编程技术网

如何用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))…通常情况下,如果我相信。。。