2012-09-11 57 views
0

我有一個從使用html和使用split函數創建的字符串數組。我想通過它與迭代:沒有從零到整數的隱式轉換

html_array.each do |line| 
    ... 
end 

我可以每個lineputs line.index('text')puts字符串的索引,我可以將指數與puts line[17](都未打印零),但puts性格當我將二者結合起來到一個命令像

puts line[line.index('text')] 

它給我的錯誤:

no implicit conversion from nil to integer (TypeError) 

有人可以告訴我我做錯了什麼嗎?我是編程新手,ruby btw。

+0

使用'p',不'puts':'html_array.each {|線| p line.index'text'}'你可能有不匹配的行。你也不應該用'split'函數解析HTML。請嘗試[Nokogiri](http://rubygems.org/gems/nokogiri)。 –

回答

0

只是爲了追查是否有一些你行的錯誤,請嘗試:

html_array.each do |line| 
    puts (line[line.index('text')] rescue "nil") 
end 

這將打印在每行有錯誤「無」。我懷疑'文字'不會出現在每一行中。你能分享一下你想要完成的事情嗎?

+0

「文本」確實不會發生在每一行中。這是所有的,但第一個,但我一開始並沒有意識到這一點。使用rescure不起作用,但我得到它與puts line [line.index(「text」)]如果line.index(「文本」) –

4

line.index('text')在某個點返回nil,因爲在該行中找不到字符串「text」。然後您嘗試訪問line[nil],這是一個無效的數組索引。

像這樣的東西可能會更好:

index = line.index('text') 
if index.nil? 
    puts "Text not found" 
else 
    puts line[index] 
end 

這將檢查是否字符串的指數是零嘗試使用它(並會提醒你,如果該行不包含字符串)前。

+0

我得到它與基本相同的事情工作:puts行[ line.index(「text」)] if line.index(「text」) –

0

您可以輕鬆地做到這一點象下面這樣:

html_array.each do |line| 
     if line.index("Text").present? 
      puts line[line.index("Text")] 
     end 
    end 
相關問題