2012-04-10 50 views
1

我的代码:开放-URI红宝石错误

require 'open-uri' 
print "Enter a URL: " 
add = gets 
added = add.sub!(/http:\/\//, "") 
puts "Info from: #{add}" 
open("#{add}") do |f| 
    img = f.read.scan(/<img/) 
    img = img.length 
    puts "\t#{img} images" 
    f.close 
end 
open("#{add}") do |f| 
    links = f.read.scan(/<a/) 
    links = links.length 
    puts "\t#{links} links" 
    f.close 
end 
open("#{add}") do |f| 
    div = f.read.scan(/<div/) 
    div = div.le1ngth 
    puts "\t#{div} div tags" 
    f.close 
end 

(是的,我知道这是不好的代码,它请不要评论)当我运行它,并为URL ,我进去,说:

http://stackoverflow.com 

我得到以下错误:

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:32:in `initialize': No such file or directory - http (Errno::ENOENT) 
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:32:in `open_uri_original_open' 
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:32:in `open' 

为什么会出现这种错误来了,我该如何解决?

回答

2

String.sub!方法替换代替字符串,所以add.sub!(/http:\/\//, "")另外改变的add值来设定added

要使用带有URI的open(name)方法,name的值必须以URI方案开头,如http://

如果你想设置added,这样做就像这样:

added = add.sub(/http:\/\//, "")