sdot257
sdot257

Reputation: 10376

How to display a variable inside string with Ruby

So I have the following code that reads a text file line by line. Each line ends with a return carriage. The code below outputs the following:

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

How do i get rid of the bracket and quotes?

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

Upvotes: 6

Views: 15684

Answers (3)

phtrivier
phtrivier

Reputation: 13415

If your file is the following

server1
server2

And you want to produce a file like this :

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
}

I would do something like :

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

Upvotes: 0

TK.
TK.

Reputation: 28193

#{data[0]}

split returns an array.

Upvotes: 0

phtrivier
phtrivier

Reputation: 13415

You could Use

#{data[0]}

instead of #{data}

That's because split creates an array of strings.

However, if you really want to simply get the line without the trailing end of line, you can use the strip method.

Upvotes: 6

Related Questions