2012-04-10 10 views
1

Ich habe den Code:open-uri Fehler Rubin

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 

(Ja, ich weiß es nicht gut Code ist, kommentiere nicht darüber bitte) Wenn ich es laufen, und für die URL, ich trete in, sagen:

http://stackoverflow.com 

bekomme ich folgende Fehlermeldung:

/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' 

Warum dieser Fehler kommen und wie kann ich es beheben?

Antwort

2

Die String.sub! Methode ersetzt die Zeichenfolge an Ort und Stelle, so add.sub!(/http:\/\//, "") ändert den Wert von add zusätzlich added zu setzen.

Um die open(name)-Methode mit URIs zu verwenden, muss der Wert name mit einem URI-Schema wie http:// beginnen.

Wenn Sie added festlegen möchten, tun Sie dies wie folgt:

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