2016-07-31 2 views
4

Если у меня есть строка в c1, я могу напечатать его в строке, выполнив:Как напечатать номер строки каждой строки в строке?

c1.each_line do |line| 
    puts line 
end 

Я хочу дать номер каждую строку с каждой строкой, как это:

c1.each_with_index do |line, index| 
    puts "#{index} #{line}" 
end 

Но это не работает на строке.

Я пробовал использовать $.. Когда я делаю, что в приведенном выше итератора так:

puts #{$.} #{line} 

печатает номер строки для последней строки на каждой строке.

Я также пробовал использовать lineno, но это работает только при загрузке файла, а не при использовании строки.

Как распечатать или получить доступ к номеру строки для каждой строки строки?

+2

Не то, что вы просили, но вы можете быть заинтересованы, тем не менее, если вы когда-нибудь хотели, чтобы все строки в файле (тот, который вы на самом деле в) вы можете добавить это в свой скрипт: 'p File.new (__ FILE __). each.with_index {| l, i | puts "строка # {i + 1}: # {l}"}; '' '. Попробуйте. –

ответ

7

Слегка изменив код, попробуйте следующее:

c1.each_line.with_index do |line, index| 
    puts "line: #{index+1}: #{line}" 
end 

Это используется с with_index метода Enumerable.

+0

Это потрясающе. Никогда не знал о методе 'with_index' в Enumerable. Сегодня я чему-то научился! Спасибо большое Мэн! – marcamillion

3

код Слегка модифицирующих @ sagarpandya82 в:

c1.each_line.with_index(1) do |line, index| 
    puts "line: #{index}: #{line}" 
end 
+0

Это умно. Спасибо за эту модификацию. – marcamillion

3
c1 = "Hey diddle diddle,\nthe cat and the fiddle,\nthe cow jumped\nover the moon.\n" 

n = 1.step 
    #=> #<Enumerator: 1:step> 
c1.each_line { |line| puts "line: #{n.next}: #{line}" } 
    # line: 1: Hey diddle diddle, 
    # line: 2: the cat and the fiddle, 
    # line: 3: the cow jumped 
    # line: 4: over the moon.