
require 'open-uri'
file = open('http://www.google.co.jp')
p file.read
というソースコードで、コマンドプロンプトで実行した結果、
C:/samples/samples/09_02/library2.rb:3:in `initialize': Invalid argument @ rb_sysopen - http://www.google.co.jp (Errno::EINVAL)
from C:/samples/samples/09_02/library2.rb:3:in `open'
from C:/samples/samples/09_02/library2.rb:3:in `<main>'
という結果が帰ってくるのですが、なぜでしょうか?教えていただけると幸いです。
の所で、
require 'open-uri'
URI.open('http://www.google.co.jp')
か
require 'open-uri'
uri = URI.parse('http://www.google.co.jp')
uri.open
のプログラムを書いて、コマンドプロンプトで実行した結果、何も表示されませんでした。
なぜでしょうか?コマンドプロンプトで、HTMLみたいなものがどうすれば実行結果に表示されるのでしょうか?どんなプログラムをコーディングすれば、いいのでしょうか?
教えていただけると幸いです。
No.6
- 回答日時:
すみません。
No5の説明は無視してください。URI.openは、以下の何れかの書き方ができます。
方式1
file = URI.open(・・・)
・・・fileに関する処理・・・
file.close
方式2
URI.open(・・・) { |file|
・・・fileに関する処理・・・
}
方式2の場合は、closeの処理がかかれていませんが、
・・・fileに関する処理・・・ が終わると自動的にrubyがcloseを行ってくれます。
上記を踏まえて、
方式1は
require 'open-uri'
file = URI.open('http://www.google.co.jp')
file.each_line {|line|
print line
}
file.close
方式2は
require 'open-uri'
URI.open("http://www.google.co.jp") {|file|
file.each_line {|line|
print line
}
}
になります。
どちらも、同じ結果になります。
No.5
- 回答日時:
require 'open-uri'
URI.open("http://www.google.co.jp") {|file|
file.each_line {|line|
print line
}
}
は、open時にブロックを指定する方法です。
https://docs.ruby-lang.org/ja/latest/method/File …
の
例: File.open による書き込みモードでのファイルオープン
File.open("testfile", "w", 0755) { |f| f.print "test" }
に該当します。
この方法を使用すると、closeを記述する必要がありません。
このような書き方もあるということを覚えておけば良いかと思います。
No.4
- 回答日時:
>大変失礼ですが、もう一つ質問があって、NO.2のプログラムを実行した結果、コマンドプロンプトに何か長ったらしいものが表示されました。
ここには、書き切れないくらい長かったです。こちらで実行した結果もかなりの量が表示されます。
その書籍では、省略されていると思われます。
ちなみに
file = URI.open('http://www.google.co.jp')
を
file = URI.open('http://www.ruby-lang.org/')
に変えて実行すると、少量の以下のメッセージになります。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ruby Programming Language</title>
<script type="text/javascript">
var languages = {
"de": "de",
"es": "es",
"id": "id",
"ja": "ja",
"ko": "ko",
"pt": "pt",
"ru": "ru",
"tr": "tr",
"zh-CN": "zh_cn",
"zh-TW": "zh_tw"
};
var code = window.navigator.language || window.navigator.userLanguage || "en";
if (code.substr(0,2) !== "zh") { code = code.substr(0,2); }
var language = languages[code];
if (!language) { language = "en"; }
document.location = "/" + language + "/";
</script>
<noscript>
<meta http-equiv="refresh" content="0; url=/en/">
</noscript>
</head>
<body>
<p><a href="/en/">Click here</a> to be redirected.</p>
</body>
</html>
No.3
- 回答日時:
>①fileは、配列ですか?eachメソッドですよね?
fileは、StringIO クラスのオブジェクトです。(Tempfile の場合もあり)
https://docs.ruby-lang.org/ja/latest/library/ope …
StringIOクラスは、「文字列に IO と同じインタフェースを持たせるためのクラスです。」
https://docs.ruby-lang.org/ja/latest/class/Strin …
IOクラスは、基本的な入出力機能のためのクラスです。
https://docs.ruby-lang.org/ja/latest/class/IO.html
IOクラスは、openによって返されるインスタンスです。
このクラスでは、IO#each_lineがサポートされています。
これは、1行ずつ読み込んだ結果を処理してくれます。
file.each_line {|line|
print line
}
では、1行読み込んだ結果をlineに設定し、{}の中を実行します。
つまり、1行ずつ読み込んだ結果を印字しています。
>②_lineはどういう意味があるのでしょうか?
_lineではなく、each_lineのことですか?
each_lineは1行ずつ読み込んだ結果を処理するためのメソッドです。
>③このプログラムの仕組みは、まず、 'open-uri'をインクルードして、
>そして、変数lineに、fileが代入されて、fileが出力されて、最後にfileを閉じるという事でしょうか?
以下のようなことを行ってます。
(1)まず、 'open-uri'をインクルードして、
(2)URL 'http://www.google.co.jp' オープンして、その結果をfileに格納します。
fileはStringIOクラスのオブジェクトです。
(3)fileを1行ずつ読み込んで、その結果をlineに設定します。
(4)そのlineの内容を画面に印字します。
(5)最後にfileをクローズします。
>④なぜ、プログラムにfile.closeを入れたのでしょうか?
通常は、オープンしたファイルは最後にクローズするので、その慣習にならってクローズしています。
尚、以下のように書いた場合は、ruby側で自動的にクローズしてくれるので、file.closeを記述する必要は
ありません。
require 'open-uri'
URI.open("http://www.google.co.jp") {|file|
file.each_line {|line|
print line
}
}
No.2
- 回答日時:
オープンしただけでは、URIの内容は表示されません。
それを読み込んで、読み込んだ内容を印字する必要があります。
>コマンドプロンプトで、HTMLみたいなものがどうすれば実行結果に表示されるのでしょうか?
以下のようにしてください。
require 'open-uri'
file = URI.open('http://www.google.co.jp')
file.each_line {|line|
print line
}
file.close
で、このプログラムのprintの所は、pか、putsの間違いでは無いですよね?教えていただけると幸いです。
すみません。これについては、撤回します。大変失礼しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ruby 配列
Ruby
-
Ruby newメソッド
Ruby
-
ruby loopメソッド 変数
Ruby
-
-
4
Ruby 変数 用途と違い
Ruby
-
5
ルビー言語 ライブラリー
Ruby
-
6
Ruby 引数
Ruby
-
7
ルビー言語 csvファイル part2
Ruby
-
8
Ruby require ライブラリー
Ruby
-
9
ruby begin句
Ruby
-
10
ruby OpenURI::Meta
Ruby
-
11
HTML &CSSとHTML5&CSS3 違い
HTML・CSS
-
12
ルビー言語 csvファイル 続き
Ruby
-
13
ruby クラス・オブジェクト・インスタンス
Ruby
-
14
ルビー言語 ライブラリー
Ruby
-
15
ルビー言語 ライブラリー 追記
Ruby
-
16
ruby while式
Ruby
-
17
Ruby 格納
Ruby
-
18
プログラミング言語のバージョン確認について。
その他(プログラミング・Web制作)
-
19
ruby raise句
Ruby
-
20
ruby loopメソッド 変数(再喝)
Ruby
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
(再質問)エクセルのマクロボ...
-
秀丸エディタで、同じ記号で囲...
-
CSSのhtmlへの紐付けについ...
-
Ruby 格納
-
Ruby newメソッド
-
1、Rstudioで回帰直線を求める...
-
a=2, b=1のとき”x=(a-b+3)%3”の...
-
Ruby require ライブラリー
-
ruby OpenURI::Meta
-
ruby while式
-
ruby loopメソッド 変数(再喝)
-
ruby 配列
-
ruby loopメソッド 変数
-
ruby クラス・オブジェクト・イ...
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
ruby begin句
-
ruby ensure句
-
ルビー言語 ライブラリー(再々...
-
ルビー言語 csvファイル 続き(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
1、Rstudioで回帰直線を求める...
-
CSSのhtmlへの紐付けについ...
-
(再質問)エクセルのマクロボ...
-
パソコンのスクリーンセーバー...
-
教えてください
-
ビーリアルのユーザー名を変え...
-
ruby while式
-
ruby loopメソッド 変数
-
英数字を含む文字列(0-9,A-Z)...
-
Ruby newメソッド
-
100万件越えCSVから条件を満た...
-
C言語の入力した文字を反転させ...
-
pandasでsqlite3にテーブル作成...
-
ruby loopメソッド 変数(再喝)
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
Beautiful Soupのインストール...
-
<python>ノイズを時間指定して...
-
Ruby require ライブラリー
-
あせんうぶり言語
おすすめ情報
では、どんなプログラムをコーディングすれば、コマンドプロンプトにHTMLみたいな内容のものが、
表示されるのでしょうか?教えていただけると幸いです。
迅速な回答ありがとうございます!先ずは、おかえりなさい。
で、NO.2のプログラムを実行した結果、コマンドプロンプトに何か長ったらしいものが表示されました。ここには、書き切れないくらい長かったです。
こっちの書籍には、3行くらいの実行結果になっていますが、中略されているのかもしれませんね。で、このプログラムのprintの所は、pか、putsの間違いでは無いですよね?教えていただけると幸いです。
tatsumaru77様
いくつか質問してもよろしいでしょうか?
このプログラムについてです。
require 'open-uri'
file = URI.open('http://www.google.co.jp')
file.each_line {|line|
print line
}
file.close
①fileは、配列ですか?eachメソッドですよね?
②_lineはどういう意味があるのでしょうか?
③このプログラムの仕組みは、まず、 'open-uri'をインクルードして、そして、変数lineに、fileが代入されて、fileが出力されて、最後にfileを閉じるという事でしょうか?
④なぜ、プログラムにfile.closeを入れたのでしょうか?
これらの質問に答えて頂けると嬉しいです。
よろしくお願いします!
大変失礼ですが、もう一つ質問があって、NO.2のプログラムを実行した結果、コマンドプロンプトに何か長ったらしいものが表示されました。ここには、書き切れないくらい長かったです。
こっちの書籍には、3行くらいの実行結果になっていますが、中略されているのかもしれませんね。
について、教えていただけると幸いです。
すみません。プログラムが
require 'open-uri'
URI.open("http://www.google.co.jp") {|file|
file.each_line {|line|
print line
}
}
から、
require 'open-uri'
file = URI.open('http://www.google.co.jp')
file.each_line {|line|
print line
}
file.close
にプログラムが置き換わっているのですが、file.closeが無いだけならまだ分かるのですが。
教えていただけると幸いです。
require 'open-uri'
URI.open("http://www.google.co.jp") {|file|
file.each_line {|line|
print line
}
}
が、なぜ例: File.open による書き込みモードでのファイルオープン
File.open("testfile", "w", 0755) { |f| f.print "test" }
に該当するのでしょうか?それと、URIの所は、fileに置き換えているのでしょうか?教えて頂けると幸いです!
迅速な回答ありがとうございます!所で、方式1も方式2もそういう書き方をするという風に覚えればよいのでしょうか?なぜ方式1にはcloseがあるのも、そういうものだと覚えれば良いのでしょうか?
教えていただけると幸いです。