2014-02-18 2 views
1

Для ввода типа 12,34,56; 78,91; 50,60;Использование .split для строки в массиве

Я хочу, чтобы разделить строку на полу двоеточия разграничить, а затем эти строки расщепленной запятой разграничить

например:

puts "Input: " 
input = gets.chomp 
s_array = input.split(";") 
for i in 0..s_array.size 
    puts s_array[i].split(",") 
end 

Он успешно печатать puts, но после того, как я получаю ошибку

undefined method 'split' for nil:NilClass <NoMethodError> 

Какая причина для этой ошибки?

+0

Это не то, о чем вы просили, но вы можете найти его интерес: '" 12,34,56; 78,91; 50,60; ". Split (/ [,;] /) # = > ["12", "34", "56", "78", "91", "50", "60"] '. –

ответ

2

Изменение .. для ...

for i in 0...s_array.size 

Создание диапазона с .. является включительно, в то время как ... не является, например,

1..5 # => 1,2,3,4,5 
1...5 # => 1,2,3,4 

Так переменная i перетекает массив, в вашем случае, если размер массива 5, array_s [5] будет Нилл.

+0

Да, это спасибо – emanyalpsid

+0

@ user1763861, тогда вы должны принять этот вопрос как правильный. – zeantsoi

2

Более rubyish подход:

input.split(";").each { |x| puts x.split (",") } 

Вы должны использовать Array#each, не rubyish использовать for и очень мало случаев, когда требуется вместо each рубина и for ключевого слова for петли делегаты до each даже при использовании.

Смежные вопросы