2016-03-07 100 views
-1

我想從#{vm}中獲得第5到第7個字符,但是我似乎無法使其工作。我錯過了什麼?紅寶石 - 從字符串獲得第n個字符

puts "#{Colorable.wrap_color("Restarting VM's", :BLUE)}" 
change_set.vms_to_restart.each do |vm| 

puts "JH 0 - " + %x{hostname} 
host_code = %x{hostname}[7,9] 
vm_code = #vm[5,7] <---- THIS DOES NOT WORK 

puts "JH 1 - #{host_code}" 
puts "JH 2 - #{vm_code}" 
puts "JH 3 - #{vm}" 

    puts "Restarting ... #{vm}" 
exit 1 
    vm.restart 
end 
puts " " 

輸出:

Restarting VM's 
JH 0 - qdscild401 
JH 1 - 401 
JH 2 -     <---------- BLANK 
JH 3 - qdcld401.vm10 
Restarting ... qdcld401.vm10 
+0

怎麼樣'vm_code = 「#{VM [5,7]}」' –

+0

不能再現。 – sawa

+0

上面的vm_code =「#{vm [5,7]}」給了我這個錯誤: ./do_changes.rb:76:未定義的方法'[]'爲#(NoMethodError) from ./do_changes.rb:72:in'each' from ./do_changes.rb:72 – Jaron787

回答

2

在此代碼:

vm_code = #vm[5,7] 

一切後,#是一條評論。因此,這種說法實際上是:

vm_code = nil 

該行應

vm_code = vm[5,7] 

或者,如果vm對象不是String你可以嘗試

vm_code = vm.to_s[5,7] 
1

該多好啊 - 我想

vm_code = vm.to_s[5,7] 

但一直沒有修剪掉一切的第7個字符

Restarting VM's 
JH 0 - qdscild401 
JH 1 - 401 
JH 2 - 401.vm1   <----- NOT TRIMMED after 7th 
JH 3 - qdcld401.vm10 
Restarting ... qdcld401.vm10 
+0

「我正在嘗試從#{vm}中獲得第5到第7個字符」,所以當然第7個字符後的所有內容都將被刪除!!!!! – ReggieB

+0

是的,但它沒有修剪它 – Jaron787

+0

啊,因爲它需要是:vm_code = vm.to_s [5,3] – Jaron787

3

後,只是爲了澄清,vm[5,7]意味着拿到第六個字符和六個附加字符後(總共7個字符)。

所以

vm = 'abcdefghijklmno' 
vm[5,7] 
=> 'fghijkl' 

如果只想第五個字符到第七個字符

vm[4,3] 
=> 'efg' 
+0

好點 - 提出 – ReggieB

+0

感謝澄清 - 我沒有意識到 – Jaron787

+0

@CarySwoveland像往常一樣精心設計。 – SteveTurczyn