2016-11-12 31 views
0

嘿傢伙我覺得我很接近這一點,但像往常一樣,我認爲我會輕微地搞亂語法。目標是解析mime.type文件以查看MIME類型是否具有擴展名。我必須做一個散列。輸出應該讀的東西一樣,「富/酒吧有擴展的垃圾郵件,雞蛋,還是應該讀‘富/條無extionsions’如果擴展沒有vlaue這裏是我的進步迄今:使用散列解析mime.types的擴展

#!/user/bin/ruby 
#comment line 
lineHash = Hash.new 
File.open("/etc/mime.types", "r") do |file| 
    file.each_line do |line| 
      next if line[0] == ?# 
      next if line == "\n" 
      line = line.chomp.split 
      lineHash[line[0]] = line[1..-1] 
    end 
end 
lineHash.each do |key, value| 
    if value.length == 0 
      puts key + ' has no extensions.' 
    else 
      puts key + ' has extensions ' + value.join(',') 
    end 
end 

的錯誤我收到當我運行該腳本是:

parsemime.rb:13:in block in <main>': undefined method 'length' for nil:NilClass (NoMethodError) 
from parsemime.rb:12:in 'each' 
from parsemime.rb:12:in '<main>' 

好像是失敗的lineHash.each做|鍵,值|因爲這是線12 線13(下一行)正在讀一個未定義長度方法

我發電子郵件給我的教授指導和w如所告知的:「我收到的錯誤表明解釋器行不正確。正確的路徑可以通過發出哪個ruby命令來確定。「

我不確定這是什麼意思說實話。我試圖把一段時間放在lineHash.each do | key,value |並收到一個這裏說的語法錯誤意外「|」,期待「=」

+0

倘使你打印出來的線條前當你處理它們時,你可以看到它失敗的那一行。 –

+0

添加了我的註釋行,並更好地描述了發生錯誤的位置 –

+0

對不起,我的意思是'/ etc/mime.types'哪行失敗? –

回答

0

好像你需要檢查值不爲零試圖獲得其長度

lineHash.each do |key, value| 
    if !value.is_a?(Array) || value.empty? 
      puts key + ' has no extensions.' 
    # ... 
+0

嘗試了此方法並收到相同的結果。 「if value.length == 0應該和這個 –

+0

差不多,不同之處在於你要確保'value'在調用'length'之前是一個數組 –