2012-04-10 3 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

add.sub!(/http:\/\//, "")added 이외에 add의 값을 변경하기 때문에 문자열이 자리를 대신합니다.

URI가있는 open(name) 메서드를 사용하려면 name 값을 http://과 같은 URI 체계로 시작해야합니다. 당신이 added을 설정하려면

,과 같이 그렇게 :

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