2009-12-22 45 views
5

因此,我有以下代碼逐行讀取文本文件。每條線以一個返回托架結束。下面的代碼輸出以下內容:如何在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

回答

5

你可以使用

#{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

0
#{data[0]} 

split返回數組。

0

如果你的文件是以下

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