トップページ⇒tech
1001コメント385KB

Ruby 初心者スレッド Part 49

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/05/09(水) 05:04:47.69
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
RoRはスレ違いよ

前スレ
Ruby 初心者スレッド Part 48
http://toro.2ch.net/test/read.cgi/tech/1328648447/


るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/
0175デフォルトの名無しさん2012/05/19(土) 10:57:12.96
ちょっと気になって調べたら
http://d.hatena.ne.jp/bellbind/20070611/1181561807
を見つけたので、自分とこで確認してみたら

x86_64-linux 1.9.3 (2011-10-30)
#<SystemStackError: stack level too deep>
recursive size: 8734
となった。
0176デフォルトの名無しさん2012/05/19(土) 13:17:43.42
ruby 1.9.2p0 (2010-08-18 revision 29036) [i686-linux]
では、9356段までだった
ttp://ideone.com/6ntPo
0177デフォルトの名無しさん2012/05/19(土) 13:59:39.60
ruby 1.9.3p194 (2012-04-20 revision 35410) [i386-mingw32]

i386-mingw32 1.9.3 (2012-04-20)
#<SystemStackError: stack level too deep>
recursive size: 8734
0178デフォルトの名無しさん2012/05/19(土) 15:01:50.17
なんかLLバトルスレ向きのレスなんだけど

ruby 1.9.3p194 (2012-04-20 revision 35410) [i386-mingw32] だと
def mes(i)
puts i
mes i+1
end
mes 0
が、8731まで表示して stack level too deep (SystemStackError) で落ちた

Python 2.7.1だと
def mes(i):
print(i)
mes(i+1)
mes(0)
998まで表示してRuntimeError: maximum recursion depth exceeded で落ちた

Perl 5.12.1だと
sub mes{
my $i = shift;
print $i,"\n";
mes($i+1);
};
mes(0);
3722238まで表示してOut of memory!で止まった
どんどんとメモリを消費していって最終的に1.2Gほど使ってた
0179デフォルトの名無しさん2012/05/19(土) 15:04:04.80
Lua 5.1.3だと
function mes(i)
print(i)
mes(i+1)
end
mes(0)
16378まで表示してstack overflowで落ちた


Gauche 0.9.2だと
Schemeはあいかわらずよくわからんので、Webをみながらてきとうに書いてみるのですが
(define (mes i)
(print i)
(mes (+ i 1)))
(mes 0)
止まる気配がなかった
末尾最適化が利いているのでしょう
0180デフォルトの名無しさん2012/05/19(土) 15:07:18.10
おまけで
ruby 1.9.3p194 (2012-04-20 revision 35410) [i386-mingw32] で

RubyVM::InstructionSequence.compile_option = {tailcall_optimization: true, trace_instruction: false}
eval <<'EOS'
def mes(i) puts i;mes(i+1) end
mes 0
EOS

止まる気配がない
たぶん末尾最適化が利いて無限ループしてるはず

デフォルトで末尾再帰最適化が有効になってないのは何がまずいのだろう?
0181デフォルトの名無しさん2012/05/19(土) 16:42:16.40
理論上はすべての再帰は末尾再帰に変換できるんだっけ?
0182デフォルトの名無しさん2012/05/19(土) 17:21:35.07
そりゃプログラムを丸ごとCPSに変換すりゃ、全部末尾ジャンプになるけど、
「ifとgotoさえあればなんでも書ける」ってのと同じで、意味のない言明だよ。
0183uy2012/05/19(土) 17:30:34.59
理論上は~って話をしたらプログラムの世界では全てが可能だろね
今のPCスペックと人間スペックでかけるかどうかが問題
0184デフォルトの名無しさん2012/05/19(土) 17:39:27.23
>>180
こんなことが出来たのか
勉強になるなぁ。
ありがとう!
0185デフォルトの名無しさん2012/05/19(土) 18:22:00.98
schemeは全部末尾再帰に変換することを仕様で義務づけてなかった?
0186デフォルトの名無しさん2012/05/19(土) 18:30:54.54
要求としては、末尾コンテキストにある呼び出しなら、それを繰り返しても、
スタックが溢れたりしないこと。
0187デフォルトの名無しさん2012/05/19(土) 18:33:11.01
>>185
それは末尾再帰最適化が仕様に含まれているので
末尾再帰がループと同等に扱えるって話じゃ


(Pythonは使ってないもので)
再帰の回数に制限がかかってたのを思い出した

Python 2.7.1にて
import sys
sys.setrecursionlimit(100000)
def mes(i):
print(i)
mes(i+1)
mes(0)

9663まで表示してMemoryError: stack overflow で落ちた
負けた……
0188デフォルトの名無しさん2012/05/19(土) 18:33:44.33
末尾再帰の最適化(ループへ変換とか)は要求されているが
再帰を末尾再帰に変換する義務はない、ということか。
0189デフォルトの名無しさん2012/05/20(日) 00:44:44.64
そもそも任意の再帰を末尾再帰に変換するのは
勝手に環境フレーム相当のものをヒープに用意したりしない限りは
無理じゃないのと思うんだが
0190デフォルトの名無しさん2012/05/20(日) 09:07:27.53
OSがアプリケーションごとに使っていいスタックサイズ変更とか出来るようになればいいだけ
動的に生成された再帰コードを末尾再帰に変換しようぜとか今の人間の技術じゃない
0191デフォルトの名無しさん2012/05/20(日) 09:41:23.21
もしLinuxでRuby 1.8の人いたらulimit -s <stacksize>してから
上のスクリプト試すとどうなるかやってみて
(うちのLinux/Ruby1.9では効果なし)
0192デフォルトの名無しさん2012/05/20(日) 09:48:12.89
>>190 まずは Proper Tail Recursion and Space Efficiency を読め。
話はそれからだ。
0193デフォルトの名無しさん2012/05/20(日) 09:54:39.24
>>191
うちでも1.9.3では効果なかった。
でも1.8.7では、
スタックサイズ 8192 で 4101
スタックサイズ 16384 で 8794
スタックサイズ 32768 で 18152
と効果が見られた。
0194デフォルトの名無しさん2012/05/20(日) 10:06:02.95
ありがと。やっぱり1.8では効果あるのね
0195デフォルトの名無しさん2012/05/20(日) 10:24:25.61
TKでプログラムを実行したときにウィンドウを出さずコンテキストメニューを表示させるサンプルが載ってるサイトはありませんか?
どれも右クリックでメニューを出すものは見つかるのですが自動的にメニューを表示させるサンプルが見つかりませんでした
0196デフォルトの名無しさん2012/05/20(日) 12:57:00.58
>>195
元のTkでそのようにする方法を調べて、それをRuby/Tk上で書く
0197デフォルトの名無しさん2012/05/20(日) 14:05:27.20
passenger, mongrel, unicorn, webrick以外でwindowsで動かせる奴ってありませんか?
0198デフォルトの名無しさん2012/05/20(日) 14:44:06.84
thin
0199デフォルトの名無しさん2012/05/20(日) 18:14:01.72
python
0200デフォルトの名無しさん2012/05/20(日) 20:13:13.87
やっぱりここの先輩方は何かプログラムを書くときにプロジェクト管理を使ったりテストをしたりするものですか?
0201デフォルトの名無しさん2012/05/20(日) 22:52:03.08
RubyInstallerでWindowsに1.9.3を入れたんですが
コマンドプロンプトから
ruby -v
ってやるとパスが通っているのかバージョンがちゃんと表示されます
ただし、batファイルに
ruby -v
と書いて実行すると
>'ruby' は、内部コマンドまたは外部コマンド、
>操作可能なプログラムまたはバッチ ファイルとして認識されていません。
ってエラーになります

これはなぜですか?
0202デフォルトの名無しさん2012/05/20(日) 22:58:17.17
>>201
そのコマンドプロンプトは偽物だ
ruby consoleはあらかじめパスを通したコマンドプロンプトのウィンドウを出す
普通のバッチファイルでruby.exeを使いたいなら、そのruby.exeを実行したい人の環境変数でパス通せ
0203デフォルトの名無しさん2012/05/20(日) 23:01:47.25
つまりどういうことですか?
システムにrubyのbinフォルダを登録しなくちゃいけないってことでしょうか?
0204デフォルトの名無しさん2012/05/20(日) 23:19:27.62
>>203
だいたいそんなところ
詳しくは「パスを通す」でググれ

Vista以降でシステム環境変数でなくユーザ環境変数に登録したいなら
コントロールパネル開いて右上の検索ボックスに「環境変数」と入力
0205デフォルトの名無しさん2012/05/20(日) 23:20:02.98
そのruby.exeを実行したい人の環境変数でパス通せ

これしか言いようが無い
わからんかったらお前向いてない
0206デフォルトの名無しさん2012/05/20(日) 23:22:00.01
RubyInstallerではexeとzipがありますが
exeでインストールすると勝手に環境変数も入れてくれると思ってたんですが
exeでインストールするメリットってzipと比較してないと考えていいんでしょうか
0207デフォルトの名無しさん2012/05/20(日) 23:29:29.00
普通に入れたらパス通らなかったっけ?
環境が変なんじゃね
0208デフォルトの名無しさん2012/05/20(日) 23:39:39.35
>>200
ふつうRedmine RSpec Jenkinsな感じ。
0209デフォルトの名無しさん2012/05/20(日) 23:40:54.39
ぐぐったらexeだとインスコ時にAdd Ruby executables to your PATHみたいに聞かれるらしいね
0210デフォルトの名無しさん2012/05/21(月) 00:26:44.53
>>195
メニューだけ表示してなんかして終了するの?

require 'tk'
menu1 = Tk::Menu.new tearoff:false do
add :command, {label:'Ok',command:->{puts 'menu Ok';exit}}
end

Tk::Wm.withdraw Tk.root
Tk.after 100,->{menu1.popup TkWinfo.pointerx(Tk.root), TkWinfo.pointery(Tk.root);exit}
Tk.mainloop

こんなのだろうか?
正しいのかわからんけど
0211デフォルトの名無しさん2012/05/21(月) 10:00:41.76
文系なので、解らないのですが、なぜ、Rubyは、JavaやC言語で、記述されていて
Rubyそのもので、記述されていないのでしょうか?
0212デフォルトの名無しさん2012/05/21(月) 10:16:10.82
>>211
コンパイラじゃないから
0213uy2012/05/21(月) 10:23:16.94
実行速度は アセンブラ>C言語>JAVA>>>>Ruby
開発効率は Ruby>>JAVA>>>>C言語>>>>>>>>>>>>>アセンブラ
です。

なるべく実行速度の速い言語で、言語処理系をつくりたいんです
あと、Rubyは動的言語っていうものなのでRubyそのもので記述しようとするなら
eval ""
で終わり
0214デフォルトの名無しさん2012/05/21(月) 10:35:09.80
>>212

ありがとうございます。
インタプリタ言語では、プログラミング言語は、記述
0215デフォルトの名無しさん2012/05/21(月) 10:38:26.77
214ミスりましたすみません。

つづき、記述ができても、処理系に向いていないということで、将来、処理速度
が向上したら、できる可能性もあるのでしょうか。
0216デフォルトの名無しさん2012/05/21(月) 10:44:34.70
>>215
Cプログラムで動作しているOSと遣り取りする部分のプログラムをCで書かない理由ってなに?
0217デフォルトの名無しさん2012/05/21(月) 10:47:01.95
学んでて、文系としては、全部Rubyなら、いいのにと面倒くさがりました。

その後、宗教論争などを見て、反省もしましたが、疑問はつきませんでした。
0218デフォルトの名無しさん2012/05/21(月) 10:49:40.45
>>216

ですから、
インラインアセンブラの話が、C言語では、この話に近いと思われます。

正直、わかりません。言い訳になりますが、説明をあまり見かけないのです。
0219デフォルトの名無しさん2012/05/21(月) 11:12:11.61
>>218
もしRubyインタプリタをRubyでコーディングするとしたら
そのRubyコードを実行するRubyインタプリタは何で書くの?Rubyで書きたい?
0220デフォルトの名無しさん2012/05/21(月) 11:28:12.75
マシン語で記述されてるレベルのRubyのハードやOSがあれば、いいのでしょうか
0221デフォルトの名無しさん2012/05/21(月) 11:30:44.42
>>219

理想からすると、
Rubyの方が、コードを読みやすいはずです。

文系では、他の分野で、読まなければならない本が、やたら多いので、
入り方が、重要なのです。
0222デフォルトの名無しさん2012/05/21(月) 11:31:32.96
coffeescriptなんかもあるよ。
0223デフォルトの名無しさん2012/05/21(月) 11:33:21.47
文系なら読点くらいまともにしたらどうだろう。息上がってんのか?
0224デフォルトの名無しさん2012/05/21(月) 11:37:28.69
>>221
私も文系です。釣りならお帰りください
そうでないならブートストラップ問題でぐぐって熟読したうえで他で聞いてください
それかPythonにはPythonで実装されたPyPyって処理系があるのでそっちに行ってくれてもいいです
0225デフォルトの名無しさん2012/05/21(月) 11:38:57.26
挑発をしたわけでなくて、理解度の問題でした。

つまり、アセンブラを学ぶのと、Rubyを学ぶのでは、どの道、C言語拡張まで
想定してRubyを学び、開発者を目指すなら、アセンブラ回帰が必須になり、
技術の修得スピードと翻訳、文献の量の問題が、大きいですね。

開発スピードの矛盾を発見したわけです。これは、おかしい。
0226デフォルトの名無しさん2012/05/21(月) 11:40:31.87
>>224

Pythonびいきではないし、アンチではないですよ。
0227デフォルトの名無しさん2012/05/21(月) 11:42:06.13
Rubyは早く書けることを主体にした言語なのに
if〜endの「end」を入力するのが苦痛です
何故endを書かないといけない仕様なんですか
if〜eでいいじゃないですか
0228デフォルトの名無しさん2012/05/21(月) 11:43:02.24
WindowsでまともにRubyを動かせるWebサーバがありません
クロスプラットフォームで動く動的言語なのにこれは致命的です
0229デフォルトの名無しさん2012/05/21(月) 11:53:12.58
つまり、ダダこねてるのでなくて、

実際問題、おそらくは、Rubyから入門するというケースが、外されてしまうのは
損失ですね。将来的には、Ruby ですべて、こなせるという目的は、ないと思われ
てしまう。
0230デフォルトの名無しさん2012/05/21(月) 12:10:13.15
春休みって随分長いんだな
0231デフォルトの名無しさん2012/05/21(月) 12:13:12.15
脅かすつもりもなかったし、過去の論争の苛立ちからするとギリギリの

ラインの質問ですまなかった。

掲載しろとは言わないが、Rubyの入門書に期待したい。

RHGを読むときの理解度にも関わるので、ちょっと聞いてみたんだ。

すまない。
0232デフォルトの名無しさん2012/05/21(月) 12:17:07.52
反論できない話になるとすぐ春休みとかに逃げるよね
0233デフォルトの名無しさん2012/05/21(月) 12:31:35.79
初心者からすると、

Ruby開発者は、開発時間の比率からするとRubyでなくて、

C言語、JAVA言語をやってるんですね。

これを、言わせない説明方法を、教えてください。
0234デフォルトの名無しさん2012/05/21(月) 12:34:14.99
Rubinius とか Mirah とかを覗いてみると楽しいかもね
初心者向けではないかもしれないけど
0235デフォルトの名無しさん2012/05/21(月) 12:44:26.74
>>234

がてんがいったので、

しばし、勉強して、後日きます。



0236デフォルトの名無しさん2012/05/21(月) 12:47:00.30
>>233
>Ruby開発者は、開発時間の比率からするとRubyでなくて、
>C言語、JAVA言語をやってるんですね。

これ自体は別に不思議なことでも、悪いことでもない
CRuby開発陣はCプログラマばっかりだと言われることがあるのと同様
JVMを書いている開発者だって恐らくC系言語を使っているだろう

もちろん、言語処理系上のライブラリ開発者であれば
Pure Rubyで記述している場合もあるだろう
0237デフォルトの名無しさん2012/05/21(月) 12:49:44.84
>>236

重ねて感謝、ありがとうございました。助かります。
0238デフォルトの名無しさん2012/05/21(月) 14:52:40.66
読み込んだwebページのテキストをメモ帳に出力するのってできますか?
0239デフォルトの名無しさん2012/05/21(月) 15:03:02.70
取得した内容をテキストファイルにに書き出すのか
取得した内容をメモ帳に貼り付けるのかどっちだい?
両方できるが
0240デフォルトの名無しさん2012/05/21(月) 15:04:17.89
やっぱり国産言語だからPythonよりRubyを選んでこれから勉強しようと思ってます。
Rubyをやる場合に基礎が身につく入門書ってありませんか?
10日で覚える系のは論外です
0241デフォルトの名無しさん2012/05/21(月) 15:04:30.20
>>239
前者です!
0242デフォルトの名無しさん2012/05/21(月) 15:06:29.97
require "open-uri"
open("http://www.defense.gov/"){|f| $s = f.read}
open("test.html", "w"){|f| f.write($s)}
`start notepad.exe test.html`
0243デフォルトの名無しさん2012/05/21(月) 15:11:05.71
>>242のようなのは真似しないように
0244デフォルトの名無しさん2012/05/21(月) 16:12:10.79
open(require("open-uri").to_s,"wb").print open("http://google.co.jp/").read
0245デフォルトの名無しさん2012/05/21(月) 17:15:56.52
>>244
うまくいきません\(^o^)/
ttp://www.ruby-lang.org/ja/documentation/
にアクセスしてメモ帳に
ここでは、マニュアルなどのドキュメントを紹介します。…
を出力したいのです
1.8.7です
02462382012/05/21(月) 17:38:00.86
これで出力できました
ここから<p>とか<div>をとる方法を模索中です

require 'rubygems'
require 'mechanize'
require 'kconv'
require 'open-uri'

agent = Mechanize.new
agent.get('http://www.ruby-lang.org/ja/documentation/')
p = agent.page.at('p')
`start notepad.exe p`
0247デフォルトの名無しさん2012/05/22(火) 06:24:09.67
rubyでos作ると思って速攻で挫折したの思い出した。
シェルスクリプトなんてルビーで置き換えられるじゃないと思って¥、シェルの代わりにルビーを指定したらログイン不能になったわw

過去のトラウマ。
あうあうあー。

ウィンドウズでサーバ自体とんでもなく手間が掛かる。
教祖様と同様にatt unixがいいね。デビアンは使いにくいけど。
0248デフォルトの名無しさん2012/05/22(火) 07:10:52.57
>>211
>文系なので、解らないのですが、なぜ、Rubyは、JavaやC言語で、記述されていて
>Rubyそのもので、記述されていないのでしょうか?

いい質問です。独力でそこに気づいたのなら、文系とはいえかなりのセンスの持ち主です。
すでに234が書いてますが、Rubiniusという処理系が、まさにRubyそのもので記述されたRuby処理系です。
本家RubyはCで書かれた処理系、JRubyはJavaで書かれた処理系、RubiniusはRubyで書かれた処理系、といえます。
とはいえRubiniusが100%Rubyで書かれているかというと、そういうわけではなく、RubyのサブセットをC++とLLVMで作り、
そのサブセットでフル仕様のRubyを記述しています。つまり2段構え。
このような仕組みだと遅いように思うでしょうが、RubiniusはJITを搭載しているので、最初の読み込みこそ遅いものの、そのあとは本家Rubyよりも速いです。
このような仕組みはSmalltalkが確立した方法で、昔から有名です。PythonだとPyPyという処理系が同じ仕組みです。

なお初心者相手だと>>213や>>219みたいなゴミが湧き出ますが気にしないでください。ごめんねあんなやつらを相手にさせて。
0249デフォルトの名無しさん2012/05/22(火) 08:23:49.17
その辺を考えるとosを作れるcは偉大だな。
まだjavaもrubyもpyもsmalltalkもosを作り出せてない。
0250デフォルトの名無しさん2012/05/22(火) 09:00:17.00
Cの偉大さはけっして揺るぐものではないので、
たまにはAPLマシン、LISPマシン、Smalltalkマシン、Prologマシンのことも
思い出してあげてください。
0251デフォルトの名無しさん2012/05/22(火) 09:13:05.99
>>228
https://github.com/arton/ennou
0252デフォルトの名無しさん2012/05/22(火) 13:00:29.09
初心者すぎて昨日からスマソ
以下を実行した時に取得できるテキストをメモ帳に書きだすのはどうすれば良いでしょうか?
コマンドプロンプトに表示させる必要はないのでputはなくて良いのですが…

require 'rubygems'
require 'mechanize'
require 'kconv'

agent = Mechanize.new
agent.get('http://www.ruby-lang.org/ja/documentation/')

agent.page.search('p').each do |p|
puts p.inner_text.tosjis
puts '---'
end
0253デフォルトの名無しさん2012/05/22(火) 13:06:57.13
>>210
これ見て勉強します
0254デフォルトの名無しさん2012/05/22(火) 14:00:13.09
>>252
まとめてやろうとすんな
一気にやろうとせずに段階踏んで別々にやって、その成果を最後に組み合わせろ

「自作の” ”で囲った文字列を画面に表示する」
「自作の” ”で囲った文字列を変数に代入し、変数の内容を文字列として画面に表示する」
「ファイルにアクセスしてその内容文字列を画面に表示する」
「変数の内容を画面に表示するかわりにファイルにアクセスしてそこに書き込む」
「実際にやりたいメソッドの戻り値を変数に代入し、ファイルにアクセスしてそこに書き込む」

前の4つができていないと、最後のひとつはできない
0255デフォルトの名無しさん2012/05/22(火) 14:19:32.28
>>252がスクリプト実行するたびにRuby公式のサーバにアクセスしまくってるんだと思うと目頭が熱くなるな
0256デフォルトの名無しさん2012/05/22(火) 14:24:06.14
`start notepad #{!!open((!require("open-uri")).to_s,"wb").print(open("http://google.co.jp/").read)}`
0257デフォルトの名無しさん2012/05/22(火) 14:29:40.49

require 'rubygems'
require 'mechanize'
require 'kconv'

agent = Mechanize.new
agent.get('http://www.ruby-lang.org/ja/documentation/')

a = ""
agent.page.search('p').each do |p|
  a << p.inner_text.tosjis
  a << '---'
end
file = "file_testest123456789.txt"
open(file,"wb") do |f|
  f.print a
end

system"start notepad #{file}"

0258デフォルトの名無しさん2012/05/22(火) 14:34:33.58

require 'rubygems'
require 'mechanize'
require 'kconv'
require 'win32ole'
# gem install win32-clipboard'
require 'win32/clipboard'

agent = Mechanize.new
agent.get('http://www.ruby-lang.org/ja/documentation/')

a = ""
agent.page.search('p').each do |p|
  a << p.inner_text.tosjis
  a << '---'
end

Win32::Clipboard.set_data a

wsh = WIN32OLE.new('Wscript.Shell')
wsh.run("notepad")
sleep 0.4
wsh.SendKeys"^v"
0259デフォルトの名無しさん2012/05/22(火) 17:48:03.78
centos4.6に、ruby1.9.3-p194をインストールしたいのですが、
makeで、「rdoc」エラーで失敗して進めません。
調べたら、yumのレポジトリに、「dev.centos.org/centos/4/CentOS-Testing.repo」を
追加とあったのですが、今現在ファイルが存在しません。

centos4系でrdocとインストールするにはどうすればいいのでしょうか?
0260デフォルトの名無しさん2012/05/22(火) 20:37:57.03
コマンドプロンプト以外を使ってみたく、
RDEを使ったところ、ものすごく使いづらいんですが、
他にrubyの実行ができるソフトってないんでしょうか?
0261デフォルトの名無しさん2012/05/22(火) 21:04:05.10
>>257
トン!
notepadだと改行うまくいかないみたいなのでwordpadで開くようにしてみますた
あとはpとかdivで囲まれたところではなく欲しいところを書きだすように書き換えに挑戦
これは明日やります…
0262デフォルトの名無しさん2012/05/23(水) 04:00:53.18
でも全世界のruby使いの学習の為に公式サイトは存在してる所は有るので。
perlやpyやphpのサイトとかで練習しないだけでも。
0263デフォルトの名無しさん2012/05/23(水) 09:05:50.76
>>255
こう? get メソッドが動作することがわかったら実行行をコメントにして、
あらかじめ保存しておいた arakajime.html を読み込む動作にしばらく切り替えておく

require 'open-uri'
require 'kconv'
require 'rubygems'
require 'nokogiri'
def winsave_as(path, data)
open(path,'wb'){|f| f.print data.to_s.tosjis.gsub(/\n$/){"\r\n"}}
end
def get(url)
URI.parse(url).read
end
def search(html)
Nokogiri::HTML.parse(html).search('p').map{|e| e.text}
end
def notepad(path)
system "start notepad #{path}"
end

url = "http://www.ruby-lang.org/ja/documentation/"
path = 'tekitou54.txt'
# html = get(url)
html = File.open('arakajime.html',rb'){|f| f.read}
data = search(html).join("\n---\n")
winsave_as(path, data)
notepad(path)
0264デフォルトの名無しさん2012/05/23(水) 09:25:25.00
>>263
そんな感じっすな
実際問題としても、ネットアクセスとかデータベースアクセスとかはいちばん遅いはずなので、
スクリプト作成中にこの部分をローカルファイルの読み込みにしておくことの意義は大きい
マシンスペックにもよるけど、実行した直後に終わるはずだ
0265デフォルトの名無しさん2012/05/23(水) 10:14:15.89
>>259
そろそろできた?
0266デフォルトの名無しさん2012/05/23(水) 10:26:58.31
>>251
これしか選択しないですか?
gemでインストールできるものってないですかね?
0267デフォルトの名無しさん2012/05/23(水) 19:18:47.13
なぜwindowsに拘ってるの?
もしくはなぜRubyに拘ってるの?
0268デフォルトの名無しさん2012/05/23(水) 19:32:03.22
というか既存のはどこがダメなのか言ってもらわないとどうにも
0269デフォルトの名無しさん2012/05/23(水) 20:49:17.57
やっぱり今流行のRedmineでプロジェクト管理したいですしRuby on Railsとかも勉強したいです
Windowsしか使ったことないのとPCが1台しかなくて、仮想マシン入れて動かせるほど良いスペックでもないです
ennouはWindowsによくあるインストーラ形式っていうのが引っかかるのでキツイです
0270デフォルトの名無しさん2012/05/23(水) 20:52:40.93
わけがわからないよ。
0271デフォルトの名無しさん2012/05/23(水) 20:58:05.38
VPS使ったら幸せになれるかもよ?
0272デフォルトの名無しさん2012/05/23(水) 21:06:06.96
Apacheでmod_rubyだのFastCGIだの使って普通にRuby動作させるのじゃ何が不満なんだ
0273デフォルトの名無しさん2012/05/23(水) 22:07:29.33
HTMLで<div>に囲まれた文字列を取得するのってinner_textですが
<div id=Main>から<div>までなど場所を指定して取得するのってどう書けばよいでしょうか
またこういうのってどうやってググれば良いでしょうか
『たのしいRuby第3版』買ったけど内容がやりたいことに追いついてない気がします
0274デフォルトの名無しさん2012/05/23(水) 22:14:01.38
馬鹿が自己満足のために一足飛びにモノだけ教えたせいで被害が拡大してるな
君は怒っていいと思うよ

一発で出てこないということは、とりあえず正規表現を学ぶことをおすすめする
あんまり深入りすると抜け出せないので、 . + * ? () あたりの記号の使い方と意味だけわかれば充分
複雑な正規表現はとりあえずパスして、そのぶん ruby の if とか String#scan とか String#gsub とか String#split とかの機能を駆使する

正規表現で対処し切れなくなってからはじめて、HTML のパースライブラリの使用を検討するのが正当
■ このスレッドは過去ログ倉庫に格納されています