Ruby - 从字符串中获取第n个字符

时间:2016-03-07 14:38:47

标签: ruby

我正试图从#{vm}获得第5到第7个角色但是我似乎无法让它发挥作用。我错过了什么?

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

3 个答案:

答案 0 :(得分:3)

在此代码中:

vm_code   = #vm[5,7]

#之后的所有内容都是评论。因此,该陈述是有效的:

vm_code = nil

该行应为

vm_code   = vm[5,7]

如果vm对象不是String,您可以尝试

vm_code   = vm.to_s[5,7]

答案 1 :(得分:3)

为了澄清,vm[5,7]表示获得第六个字符和后面的六个附加字符(总共七个字符)。

所以

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

如果您只想将第五个角色转换为第七个角色

vm[4,3]
=> 'efg'

答案 2 :(得分: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