Ruby 初心者スレッド Part 24at TECH
Ruby 初心者スレッド Part 24 - 暇つぶし2ch1: 【大吉】
09/01/01 13:13:22
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
   【最新安定版の Ruby1.8.7 の使用をお勧めします】
    ※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。
      1.9 の新機能の一部が利用可能なので初学者にお勧めです。
    ※ただし十分安定しているとは言えないので
      プロダクション環境での利用にはお勧めしません。

関連スレやURLは>>2-8あたりを見てください。Ruby on Railsの質問はRailsスレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す URLリンク(www.ruby-lang.org)
 ・FAQを一応読む URLリンク(www.ruby-lang.org)
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

2:デフォルトの名無しさん
09/01/01 13:14:07
【よくあるしつもん】
Q:
いちからRubyを始める初心者向けのRuby入門書は何がおすすめでしょうか?

A:
プログラム作成の初心者だったら
「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
URLリンク(www.amazon.co.jp)

他の言語経験があるんだったら
「プログラミングRuby 第2版 言語編」
URLリンク(www.amazon.co.jp)
「初めてのRuby」
URLリンク(www.amazon.co.jp)
「Ruby Way 第2版」
URLリンク(www.amazon.co.jp)

3:デフォルトの名無しさん
09/01/01 13:19:01
■前スレ
Ruby 初心者スレッド Part 23
スレリンク(tech板)

■関連スレ
Rubyについて Part 33
スレリンク(tech板)
Rubyの宿題教えてください。2限目
スレリンク(tech板)
RubyCocoa 初心者質問【Leopardバンドル記念】
スレリンク(mac板)
【ActiveScript】RubyをWindowsで使うスレ【GUI】
スレリンク(tech板)
デザパタ + Python/Ruby/Smalltalk part2
スレリンク(tech板)
魁け! Ruby 1.9.X
スレリンク(tech板)
Rubyについて(アンチ専用) Part003
スレリンク(tech板)
【Ruby/SDL他】Rubyでゲーム制作・総合スレッド
スレリンク(gamedev板)
【Ruby】RubyonRailsPart6
スレリンク(php板)
【Rails】便利なRubyGemsを共有するスレ【Hpricot】
スレリンク(tech板)

4:デフォルトの名無しさん
09/01/01 13:22:21
Ruby>>>>>Java
スレリンク(tech板)
Rubyは難しすぎ
スレリンク(tech板)
【カルト】Ruby開発者Matz【モルモン】
スレリンク(prog板)

■公式/非公式関連リンク
Ruby Home Page
URLリンク(www.ruby-lang.org)
Rubyリファレンス(よくサーバーエラーになります)
URLリンク(www.ruby-lang.org)
URLリンク(www.ruby-doc.org) (英語)
リファレンスのHTMLヘルプ版配布
URLリンク(elbereth-hp.hp.infoseek.co.jp)
# Windowsで便利

Ruby FAQ
URLリンク(ruby-lang.org)
Programming Ruby - The Pragmatic Programmer's Guide
URLリンク(www.ruby-doc.org)
# 好評書籍をWebで公開中、ただし英語

逆引きRuby
URLリンク(www.namaraii.com)

5:デフォルトの名無しさん
09/01/01 13:23:07
RAA - Ruby Application Archive
URLリンク(raa.ruby-lang.org)
RubyForge
URLリンク(www.rubyforge.org)
# Rubyのアプリやライブラリが検索できる

GitHub RubyGems
URLリンク(gems.github.com)
URLリンク(github.com)
# 最近は RubyForge より GitHub が人気

日本Rubyの会 公式Wiki
URLリンク(jp.rubyist.net)
# メニューに表示されていない埋もれた情報ページ多数

Rubyist Magazine - るびま
URLリンク(jp.rubyist.net)
# コードレビューが好評

Ruby hotlinks 五月雨版(日記やblogのアンテナ)
URLリンク(www.rubyist.net)
Rubyの本一覧
URLリンク(www.ruby-lang.org)
<rubyXML/>
URLリンク(www.rubyxml.com)
Matzにっき(Ruby作者の日記)
URLリンク(www.rubyist.net)

6:デフォルトの名無しさん
09/01/01 13:24:18
■ちょっと前にできたWiki
Ruby 初心者スレッド Hiki
URLリンク(starlet.s145.xrea.com)
Ruby Portal
URLリンク(ruby.morphball.net)

■プレゼンテーション
Ruby会議2008
URLリンク(jp.rubyist.net)
URLリンク(www.nicovideo.jp)
Ruby会議2007
URLリンク(jp.rubyist.net)
URLリンク(www.nicovideo.jp)


7:デフォルトの名無しさん
09/01/01 13:31:03
Cで書かれたアプリの組み込み言語としてRubyを使う方法なら
URLリンク(eto.com)

XmlSimpleってライブラリがあるよ
URLリンク(xml-simple.rubyforge.org)

Ruby による Win32OLE プログラミング
URLリンク(www.morijp.com)


8:デフォルトの名無しさん
09/01/01 15:34:51
     . \\   ィ       ─ァ      立 |了
      //  ┴      ∠ 」      口 |
               ,ィ' ̄` ー、_
             ((”Y:ハMリソY ち
             ,ゞ-{|モュ tチ|ト. く,               ,ノ⌒ヽ-、_
             `tー'ゝ ワ,.イ:`イ             ,.ィ'" 入 ヽ i_,,.
             /::::::_:ィヤ'Y::/7`ー-ゥ=、-―=ー―--y'" ,./_ゝ i Y }_
            /:::イ キ/|./::/f   /             /|  { ヤi | |ヘ、_
          /:/Y  ヤ"|:::| キィ、 ヤフ`ー--=、..,,__i   i /  |   `ー' イ/Yー'
         /::/イ  i.  ,  i::| /::::`Y"::\      ∨.  |. 変 .|   >>1  .|
  Yモ`、_,,.=-―ー{(.>、Y  i  || /::::::::::::::::::::::\.     ヽ  } 身 .|   乙   |
   `ー--zー―-イノ:::::::ノ    }{ ):::::::::::::::::::::::::::\    } / 部 .|   部   |
     /:::::::::::::::::::::::::/     リ Y:::::::::::::::::::::::::::∧   i{ノ| 部 .|   部   |
     /:::::::::::::::::::::::::イイT"T"T ̄| ヤー―--==;;;_::::}     | 長 |   長   |
      ̄ ̄" ̄`ー/7フ ̄ii ̄ii ̄iT∧       ヾ .    |    |       |

9:デフォルトの名無しさん
09/01/01 15:38:05
>ruby -v
ruby 1.8.6 (2007-06-07 patchlevel 36) [i386-mswin32]

(1) 変数を取り消すことはできるのでしょうか?

var = "somthing"
(varを取り消す処理)
p defined? var #=>nil

(2) 手続きオブジェクトのブロックパラメーターにデフォルト値を設定する方法はあるのでしょうか?

proc = lambda { |i=1| puts i }
proc[2] #=>2
proc[] #=>1

10:デフォルトの名無しさん
09/01/01 16:06:45
DBマイグレーションでデータベースにカラムを作ろうとしましたが
以下のようなエラーが出て困っています.

** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
rake aborted!
undefined method `each' for #<Mysql:0x351bf78>

コードは次の最低限のものです

class Test < ActiveRecord::Migration
  def self.up
    t.timestamp
  end

  def self.down
  end
end

どうすればいいかどうかよろしくお願いします

11:デフォルトの名無しさん
09/01/01 16:25:34
>>9
>(1) 変数を取り消すことはできるのでしょうか?
ないんじゃないかなあ。

>(2) 手続きオブジェクトのブロックパラメーターにデフォルト値を設定する方法はあるのでしょうか?
1.8 ではできない。1.9 ではできるらしい。
obj = proc {|x=10| p x }
obj.call(123) #=> 123
obj.call() #=> 10

>>10
> undefined method `each' for #<Mysql:0x351bf78>
というエラーだから、PostgreSQL使おうとしているのにMysqlが使われているのが問題の原因じゃないかな。


12:デフォルトの名無しさん
09/01/01 16:57:31
>>11
(1)は無理だけど、(2)は1.9でできるんすね
サンクス

13:10
09/01/01 16:57:44
>11 どうもです
PostgreSQLをいっさい使わず
mysqlのみない設定のつもりなんですが,
database.yml以外に使用するDBを指定する場所があるのでしょうか?

設定を変更したい場合どこをいじればいいのでしょう...
すみませんがお願いします.

現在は以下の設定

development:
  adapter: mysql
  encoding: utf8
  database: dbname
  username: user_id
  password: *
  host: localhost
test:
  adapter: mysql
  encoding: utf8
  database: dbname_test
  username: user_id
  password: *
  host: localhost
production:
  adapter: mysql
  encoding: utf8
  database: dbname_production
  username: user_id
  password: *
  host: localhost

14:デフォルトの名無しさん
09/01/01 17:21:48
>>13
すまん、「PostgreSQL使おうとしている」なんてどこにも書いてなかったな。勘違いしてた。

使ってるOS名と、Railsのバージョンを書いてみるといいかもね。


15:デフォルトの名無しさん
09/01/01 17:24:18
「undefined method `each' for Mysql」でぐぐると、こんなんが見つかった。
けっこう問題になってるみたいね。
URLリンク(plaza.rakuten.co.jp)
URLリンク(plaza.rakuten.co.jp)


16:デフォルトの名無しさん
09/01/01 17:27:24
なんかMySQLのバージョンが問題らしい。
5.1はだめ、5.0.24もだめ、5.0.67だとうまくいったとか。
URLリンク(www.nabble.com)'-for--%3CMysql:-td20760472.html

17:10
09/01/02 04:14:35
MySqlのバージョンを5.0.67に落とすことで正常に動作しました.

>ALL
ありがとうございました

しかし,最新版使うから正常に動かないって...
いろんな環境で使われるソフトウェアって大変だなぁ...

18:デフォルトの名無しさん
09/01/02 04:19:14
x.0->x.1の大バージョンアップで何か仕様が変わったかしてかみ合わなくなったんじゃない?
例えば、5.0.72なら動きそうな気配。

19:デフォルトの名無しさん
09/01/02 10:27:40
ネットを移動していくプログラムを動かしていると、
相手からの反応がないと(もしくはaddressにたどり着けないと?)
time outでrescueに引っかかることなく、rubyプログラムが終了してしまうんですが。
そのまま次を続けるのは、どうすればいいですか。

20:デフォルトの名無しさん
09/01/02 10:32:06
引数無しrescueはStandardErrorとその子クラスしか補足しないから
TimeoutError( < Interrupt < Exception )が補足できない。

rescue TimeoutError
rescue Interrupt
rescue Exception
のどれかを使う。

21:デフォルトの名無しさん
09/01/02 14:10:18
>>20
ありがとうございました。
助かります。

22:デフォルトの名無しさん
09/01/02 20:29:59
ロングIPアドレスを普通のIPアドレスに変換するライブラリってありますか?

23:デフォルトの名無しさん
09/01/02 20:33:27
ロングIPアドレスって何?


24:デフォルトの名無しさん
09/01/02 20:40:55
自己レス。32オクテットを10進整数とみなしたモノか。

[192*2**24 + 168*2**16 + 0*2**8 + 1].pack('N').unpack('CCCC')

こんなもん?



25:デフォルトの名無しさん
09/01/02 20:41:13
32ビット4オクテットの間違いorz


26:デフォルトの名無しさん
09/01/02 20:41:17
>>23
irb(main):001:0> require 'ipaddr'
=> true
irb(main):002:0> IPAddr.new("192.168.1.1")
=> #<IPAddr: IPv4:192.168.1.1/255.255.255.255>
irb(main):003:0> ip1 = IPAddr.new("192.168.1.1")
=> #<IPAddr: IPv4:192.168.1.1/255.255.255.255>
irb(main):004:0> ip1.to_i
=> 3232235777
    ↑これです

この例なら、3232235777から192.168.1.1を得たいのです
自力で計算してもいいですが、既にあるならそれを使いたいなと

27:デフォルトの名無しさん
09/01/02 20:45:49
最後に .join('.') しないとな。


28:デフォルトの名無しさん
09/01/02 21:38:08
IPAddr.new(3232235777)

29:デフォルトの名無しさん
09/01/02 21:40:06
IPAddr.new_ntoh(3232235777)

30:デフォルトの名無しさん
09/01/02 21:57:59
new_ntohの引数はネットワークバイトオーダーのバイト配列とのこと

$ truby -ripaddr -ve 'puts IPAddr.new_ntoh(3232235777)'
ruby 1.9.1 (2009-01-02 patchlevel-5000 trunk 21272) [i386-darwin9.6.0]
/usr/local/lib/truby/1.9.1/ipaddr.rb:104:in `ntop': undefined method `unpack' for 3232235777:Bignum (NoMethodError)
from /usr/local/lib/truby/1.9.1/ipaddr.rb:96:in `new_ntoh'
from -e:1:in `<main>'
$ truby -ripaddr -ve 'puts IPAddr.new_ntoh([3232235777].pack("N"))'
ruby 1.9.1 (2009-01-02 patchlevel-5000 trunk 21272) [i386-darwin9.6.0]
192.168.1.1

# trubyはウチのtrunk rubyの名前


31:デフォルトの名無しさん
09/01/02 22:15:57
>>23-30
packを見落としていました
ありがとうございました

32:デフォルトの名無しさん
09/01/03 09:10:06
[3232235777].pack("N")
[192*2**24 + 168*2**16 + 0*2**8 + 1].pack('N').unpack('CCCC')
>自力で計算してもいいですが、既にあるならそれを使いたいなと
もう自力で出来てるね

33:デフォルトの名無しさん
09/01/03 23:13:09
Emacs使っていると、ruby のファイルを書いて保存すると
# -*- coding: utf-8 -*-
というのが勝手に先頭につくようになったのですが、やめさせることはできますか。

34:デフォルトの名無しさん
09/01/03 23:16:47
できますよ

35:デフォルトの名無しさん
09/01/03 23:19:43
1.9以降では実質的に必須になるから慣れておいた方がいいとは思うけど。


36:デフォルトの名無しさん
09/01/04 01:41:14
結婚式2週間前、IPA勤務の新郎がつこうた
スレリンク(news板)

仁義なきキンタマ ウイルス情報 Part80
スレリンク(download板:546番)
546 :[名無し]さん(bin+cue).rar :sage :2009/01/04(日) 00:24:59 >>500
報告する時は、詳しく的確に、一部だけ報告しないでお願いね

[殺人] Administrator(20081230-101522)のキンタマ.zip 2,263,376,860 09ed98f10653c3fc2555621ceeed6bc33e8f6228
[殺人] Administrator(20081230-101522)のメール.zip 59,426,579 4da9459b30eec31f58b86530dbb48d1cf86ef4be
[写真集][IV] Administrator(20081230-101522)のアルバム.zip 2,205,946,474 9d87cc0e08dc0e3afd959fcead6c48d569787cee
膨大な量のファイル数キンタマ ファイル数 13508 フォルダ数2381
以前勤めてた会社の資料など多数 独立行政法人情報処理推進機構などの資料など無いと思うが
有るかも知れない、あまりにも数が有り過ぎる、メールなどは、古いものばかりメルマガなど膨大な量
個人情報などは、披露宴主席者などの住所、名前、電話、メール 数十人分しかしエロばっかり落としてるな
ちなみに ハメ撮りscr 踏んだみたいね

早稲田実業学校中等部卒業
早稲田実業学校高等部卒業
早稲田大学政治経済学部政治学科卒業
卒論「知的財産権とインターネット技術」
当時の同大学理工学大学院の大川功 賞佳作を受賞
コンピュータ関連会社に入社ソフトウェア開発の仕事を経て
2005年に独立行政法人情報処理推進機構に入社
ソフトウェア・エンジニアリング・センター企画グループに配属
同グループ主任 岡田さん33歳
2009年1月19日結婚式・・・

37:デフォルトの名無しさん
09/01/04 02:10:22
>>34
なにこの役立たずなレス

38:デフォルトの名無しさん
09/01/04 10:24:44
>>37
なにこの役立たずなレス

39:デフォルトの名無しさん
09/01/04 17:38:56
>>38
なにこの役立たずなレス

40:デフォルトの名無しさん
09/01/04 19:23:59
100マス計算をするプログラムを書いてください。
プログラムがランダムに出題し、人間が100個の
マスに回答を入力し、確認ボタンを押すと
全問正解なら回答にかかった時間を表示して終了。
間違った場合は間違った場所にカーソルが止まり、
別の値が入力されるまで待ちます。
横10個、縦10個の数字は各々11~99までの乱数、
演算は +,-,x のみでよいです。
よろしくおねがいします。

41:デフォルトの名無しさん
09/01/04 19:38:58
>>40
Rubyの宿題教えてください。2限目
スレリンク(tech板)


42:デフォルトの名無しさん
09/01/04 23:06:49
>>40 マルチだぞ。Pythonの宿題スレにも

43:デフォルトの名無しさん
09/01/05 01:23:13
Pythonスレはすぐ回答でたのに
Rubyのスレはだれも作れてないのがワロスwww

44:デフォルトの名無しさん
09/01/05 01:39:06
今年って平成何年だっけ?

45:デフォルトの名無しさん
09/01/05 01:48:50
煽っても何も出ませんよ

46:デフォルトの名無しさん
09/01/05 02:12:31
前スレで「データとパーサを分けるのは設計の常識みたいなもの」って
書いてあったけど、なんで分けたほうがいいの?
そのへん解説したサイトあったら教えてもらえないだろうか?

47:デフォルトの名無しさん
09/01/05 02:23:44
前スレ見てないけど混乱するからじゃないの?

スーパプログラマならごちゃ混ぜでも大丈夫だろうけど。



AWT弄ると割と楽しいな。
rubyにもjavaのAWTみたいなの欲しい。

48:デフォルトの名無しさん
09/01/05 02:44:48
>>46
パーザの差し替えが効かなくなるから。
だから個人用なら好きにしろって言われてたでしょ。

49:デフォルトの名無しさん
09/01/05 03:42:10
>>46
クラスと、クラスの生成を分離するのが
いわゆるFactoryパターン
こう問題を分割することで、コードの見通しが良くなり変更に強くなる

50:デフォルトの名無しさん
09/01/05 05:55:40
I used "-d" option to run ruby.
However, following errors are occured.
What is the menning?

Exception `LoadError' at c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:871 - no such file to load -- rubygems/defaults/operating_system
Exception `NoMethodError' at c:/ruby/lib/ruby/1.8/rational.rb:78 - undefined method `gcd' for Rational(1, 2):Rational
debug_mode


51:デフォルトの名無しさん
09/01/05 05:56:59
>>50
ups, sorry...

note: last "debug_mode" string are output my code


52:デフォルトの名無しさん
09/01/05 05:57:31
> note: last "debug_mode" string are output my code
note: last "debug_mode" string are output from my code

53:デフォルトの名無しさん
09/01/05 06:48:21
Rubyで、文字列として記述するさい、
\をエスケープしないで記述する方法はありますでしょうか?
C#の @"c:\windows" みたいな機能です。

54:デフォルトの名無しさん
09/01/05 07:27:33
>>50
> Exception `LoadError' at c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:871
> - no such file to load -- rubygems/defaults/operating_system
It fails to execute "require 'rubygems/defaults/operating_system'"

> Exception `NoMethodError' at c:/ruby/lib/ruby/1.8/rational.rb:78
> - undefined method `gcd' for Rational(1, 2):Rational
You might execute a code like Rational(1, 2).gcd,
but the Rational class does not have a method named gcd.

55:デフォルトの名無しさん
09/01/05 07:50:12
>>53
'c:\windows'

56:デフォルトの名無しさん
09/01/05 08:52:35
>>55
レスありがとうございます。
シングルクォートだとそのままいけるんですね。助かりました。

57:デフォルトの名無しさん
09/01/05 09:06:48
>>54
> It fails to execute "require 'rubygems/defaults/operating_system'"
Humm....
Ignoring this exception is no problem?

> >‎ Exception `NoMethodError' at c:/ruby/lib/ruby/1.8/rational.rb:78
> >‎ - undefined method `gcd' for Rational(1, 2):Rational
> You might execute a code like Rational(1, 2).gcd,
> but the Rational class does not have a method named gcd.
I found "Rational::gcd" in rational.rb ...
But, the error has occurred. This is why?

sample code is here.
----cut here----
#!ruby -Ku
puts "hello"
----cut here----
Run command "ruby -d foobar.rb" to confirm.

58:デフォルトの名無しさん
09/01/05 10:38:35
require 'rubygems'って重い重い言われてるけどそんなに
重くないんだな
linuxのruby1.9でnokogiriでリンクを抽出して表示するだけのコードなら
require 'rubygems'するのと直接nokogiriをrequireするのとで差が無かったーよ
active rubyとかだと違うのかなぁ

59:デフォルトの名無しさん
09/01/05 11:07:42
>>58
Ruby1.8でも比較してみるんだ!

60:デフォルトの名無しさん
09/01/05 11:20:15
オブジェクトを外部ファイルに格納して呼び出して使うにはどうしたら良いんでしょうか。
ちなみにオブジェクトの中身は単なるファイルのパスです。

例えば、外部ファイル path.rb の中身を、

 file = 'D:/hoge.txt'

とします。それを別の Rubyファイル open.rb で、

 open(file)

と書いて開きたいのです。

61:デフォルトの名無しさん
09/01/05 11:28:57
>>56
一切のエスケープをしない文字列リテラルが欲しい!

シングルクォート文字列だと
クォート文字をエスケープすることでクォート文字自体を含ませられる
よって\自身やクォート文字直前の \ はエスケープしなければならない
したがって \\ と書きたい場合は \\\もしくは\\\\にしなければならず
\\PC1\share\doc\text1.txt みたいなUNCパスや
c:\doc\ みたいに、最後に\が付いたディレクトリ名とかで注意が必要

'\\\PC1\share\doc\text1.txt' # => \\PC1\share\doc\text1.txt
'c:\doc\\' # => c:\doc\
実際のことろは、ruby内で完結するならば パスの区切りは / にしとけば問題ないのだけれども

dirname = <<'EOS'.chomp
\\PC1\share\doc\
EOS
シングルクォートのヒアドキュメントだと、まったくエスケープされないが
どうしても末尾に改行がつくし、ワンライナー出来ない

まったくエスケープしない代わりにクォート文字が含められなくてもかまわない文字列リテラル希望
%b!もじれつ! みたいのだとクォート文字を変えられるのでクォート自体は記述できなくてもいいんだけど


62:デフォルトの名無しさん
09/01/05 12:15:45
なんという国際的なスレッド。。あっぱれ!

63:デフォルトの名無しさん
09/01/05 14:13:45
>>61
ワンライナーするだけなら%s記法でto_sするとか?

個人的には改行無視のバックスラッシュって使ったことないから
%qをバックスラッシュ記法無効にするぐらいでもかまわないけど
ハマる人はいるんだろうぁ。

64:デフォルトの名無しさん
09/01/05 15:03:49
C# の s = @"hogemage"; みたいなの?

65:デフォルトの名無しさん
09/01/05 15:09:25
cygwinにruby・rubygems・rails(1.2.6)・sqlite3-rubyを入れています。
データベースにアクセス(例えばrake db:migrate)すると、↓のようなWarningが表示されます。
/home/***/depot/config/boot.rb:20:Warning: Gem::SourceIndex#search support for String patterns is deprecated

Warningが出る原因、対処法などあればご教授下さい。

66:デフォルトの名無しさん
09/01/05 15:24:16
2年前ぐらいのlinux環境で動いてたrubyのスクリプトを動かしたい
最新のrubyでは動かなかった
2年前だとバージョンいくつぐらいだといいのかな

67:デフォルトの名無しさん
09/01/05 15:27:57
>>60
何がしたいのか良く分からんが文面通りに解釈すると

---open.rb---
require 'path.rb'
open(file)


68:デフォルトの名無しさん
09/01/05 15:32:00
>61
hoge=%(\\PC1\share\doc\text1.txt)
fuga=%(c:\doc\)

69:デフォルトの名無しさん
09/01/05 15:33:06
>>66
1.6

70:デフォルトの名無しさん
09/01/05 15:43:15
>>68
>ruby -ve "puts %(\\PC1\share\doc\text1.txt)"
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
\PC1 haredoc ext1.txt

1.9の話?

71:デフォルトの名無しさん
09/01/05 15:58:35
>>67
できました。ありがとうございます。

72:デフォルトの名無しさん
09/01/05 16:07:45
>>65
cygwinでrailsなんて無理だからやめとけ。

73:デフォルトの名無しさん
09/01/05 20:09:17
>>67
それだとうまくいかないんじゃない?
path.rb には file = 'D:/hoge.txt' と書かれてあるから、変数fileはローカル変数だよね?
require 'path.rb' しても、ローカル変数は path.rb の中だけで有効で、open.rb からは参照できないと思う。
解決策としては、fileじゃなくて$fileにするとか?

>>71
なんでこれでうまくいくの?

74:デフォルトの名無しさん
09/01/05 20:13:16
>>73
URLリンク(www.ruby-lang.org)
>トップレベルのローカル変数はプログラムの終了まで


75:デフォルトの名無しさん
09/01/05 21:50:33
>>74
げげ、しらんかった。さんくす。

76:デフォルトの名無しさん
09/01/05 21:51:20
>>57
Humm... It's kinda odd.
It may be that the instalation of Ruby was failed??

77:デフォルトの名無しさん
09/01/05 21:55:39
トップレベルのローカル変数はファイル内に閉じてるよ

78:デフォルトの名無しさん
09/01/05 22:09:21
なんという国際的なスレッド。。あっぱれ!!

79:デフォルトの名無しさん
09/01/05 22:12:31
Railsで
"fooBarBaz"

"foo_bar_baz"
に変換するメソッドって何ですか。
あと後学のために知りたいんですけど、こういう場合って何をキーワードにしてぐぐればいいでしょうか。

80:デフォルトの名無しさん
09/01/05 22:27:51
>>79
"キャメルケース アンダースコア rails"
でググったら、それらしいのが一番上にでてきたYO!
Rails 使ってないんで、よく分からんが。
URLリンク(recorder.komasui.org)

81:デフォルトの名無しさん
09/01/05 22:39:03
>>63
書きたいのは、連続したバックスラッシュと 末尾のバックスラッシュだから
それでもだめなんですよ

>>64
そんな感じのが欲しい
C#の @"hogehoge" だと
唯一 "" が "になるっていうエスケープのみが効くようで
バックスラッシュは全部そのままになる
Windowsのパスや正規表現を書くには必要だったのでしょうね
C#環境をインストールしてないので、マニュアル見ただけだけですが

Pythonの raw文字列とか三連クォートのraw文字列はかなり理想的なのかも?
と思って調べたら
末尾にバックスラッシュが書けなかった
Win版Inkscapeに付いてた2.5.1なんですけど
r"""ほげほげ\""" はNGで文字列が閉じない
かといって
r"""ほげほげ\"""" # => ほげほげ\"
マニュアル見たら
raw 文字列を奇数個連なったバックスラッシュで終わらせることはできません
と書いてありました


82:デフォルトの名無しさん
09/01/05 22:41:55
C# だと @"foo\bar\dirname\" でもおkなのは良いよね
Matzパクってくれないかしら

83:デフォルトの名無しさん
09/01/05 22:43:14
>>80
ありがとう!

84:デフォルトの名無しさん
09/01/05 22:47:21
>>79

調べ方の一例
$ irb -ractive_support
irb> String.ancestors
=> [String, ActiveSupport::CoreExtensions::String::Multibyte,
ActiveSupport::CoreExtensions::String::Behavior, ActiveSupport::CoreExtensions::String::Filters,
ActiveSupport::CoreExtensions::String::Conversions,
ActiveSupport::CoreExtensions::String::Access, ActiveSupport::CoreExtensions::String::Inflections,
Enumerable, Comparable, Object, ActiveSupport::Dependencies::Loadable, Base64::Deprecated,
Base64, Kernel]

このうち、目的のメソッドはInflections(語形変化)の中にある。
irb> ActiveSupport::CoreExtensions::String::Inflections.instance_methods
=> ["titleize", "constantize", "singularize", "classify", "demodulize", "underscore", "titlecase",
"foreign_key", "tableize", "humanize", "pluralize", "camelize", "camelcase", "parameterize",
"dasherize"]

irb> "fooBarBaz".underscore
=> "foo_bar_baz"


85:デフォルトの名無しさん
09/01/05 22:49:45
あ。

gemで入れたactive_supportが、-rubygemsがなくても動いているのは
~/.irbrcでrequireしてるからデス… 適当に自分の環境にあわせてね。


86:デフォルトの名無しさん
09/01/05 23:40:09
irb(main):005:0> puts %(\\samba\test\hoge"mage")
\samba esthoge"mage"

だめっぽいっすね・・・

87:デフォルトの名無しさん
09/01/05 23:43:55
Rubyだと ファイルパスは / でかくだろJK、というのもわかるんですが
ちょっとしたファイルパスのコピペでも/に置換が必要だったり、
win32のプログラムに渡すのにパスが / じゃ通らなケースが多々あったり
細かいところで不便なところがあるんですよね・・・。


88:デフォルトの名無しさん
09/01/05 23:45:21
>>57
Ok. I see.
I will re-install ruby programs.

Thanks all.

Best regards,

89:デフォルトの名無しさん
09/01/05 23:46:16
ups..

s/>>57/>>76/

90:デフォルトの名無しさん
09/01/05 23:53:39
>r"""ほげほげ\""" はNGで文字列が閉じない
>かといって
>r"""ほげほげ\"""" # => ほげほげ\"

r"""\"ほげほげ""" # => \"ほげほげ
r"""ほげ\\ほげ""" # => ほげ\ほげ

>C# だと @"foo\bar\dirname\" でもおkなのは良いよね
>Matzパクってくれないかしら

いちどVBのマニュアル見るといいよ


91:デフォルトの名無しさん
09/01/06 00:06:50
> いちどVBのマニュアル見るといいよ
なぜVBが出てくるのかさっぱりだが
とりあえずどの辺を読めばいいのかkwsk

92:デフォルトの名無しさん
09/01/06 00:37:24
何で最後に \ が来るような文字列が必要なの?
最後が \ の時はディレクトリ、みたいな判断でもしてるとか?

93:デフォルトの名無しさん
09/01/06 01:06:33
ライブラリ(Rubyで書かれたかどうかは問わない)が
そういう文字列を欲しがることは結構ある。

94:デフォルトの名無しさん
09/01/06 01:15:43
てかなんでwindowsのパス区切りは\なんだ?
\\にしたりしなかったり一体どれだけの混乱を強いていると思ってるんだ

95:デフォルトの名無しさん
09/01/06 01:22:45
+がエンコードできないですけど、どうやればいいでしょうか。

p URI.escape("+")

結果
"+"
ってなっちゃうですけど。

96:デフォルトの名無しさん
09/01/06 01:50:29
>>95
+ って空白文字を表すんじゃないの?

97:96
09/01/06 01:54:14
ごめんうそ。

98:デフォルトの名無しさん
09/01/06 01:54:26


99:デフォルトの名無しさん
09/01/06 02:10:52
>>95
URI.escapeはURIの中に出てきたらおかしいものだけをエスケープする。
+はURIの中に入っていても全く問題ないのでエスケープされない。

+をエンコードしたいなら、CGI.escapeを使えばおk。

100:デフォルトの名無しさん
09/01/06 02:19:22

      _
      /,.ァ、\
     ( ノo o ) )  R
      )ヽ ◎/(.    F
    (/.(・)(・)\ . C
    (/| x |\) 嫁
      //\\
   . (/   \)



101:デフォルトの名無しさん
09/01/06 02:21:07
>>99
御解答ありがとうございます。
うまくできました。

102:デフォルトの名無しさん
09/01/06 02:25:01
かなり初歩なんですけど、配列、ハッシュ、構造体をどのように使い分ければいいでしょうか?
Rubyに限ったことではないですけども・・・・。



103:デフォルトの名無しさん
09/01/06 02:25:49
>>94
MS-DOSはCじゃなくてBasicで書かれていたから
バックスラッシュでエスケープの問題は無かった

104:デフォルトの名無しさん
09/01/06 02:29:29
>>102
用途によって使い分ける
想像付かなければとりあえずアルゴリズム辞典とかでも読んでください

105:デフォルトの名無しさん
09/01/06 02:44:20
>>102
URLリンク(www.codelogy.org)
簡単な奴なら配列やハッシュテーブルを構造体代わり使えばいいけど、
他人に渡したり、再度使おうとするときには構造体を使った方がいいんじゃないかな?
struct使うまでのプログラムかいたことねーけど

106:デフォルトの名無しさん
09/01/06 06:06:35
>>87
pathnameのWindows正式対応版が出てくれれば一番良いんだけどなー
pathname2は他の外部ライブラリに依存してたりするし

>>102
基本的には「臨機応変に」としか言えない

俺の場合、ハッシュはどうしても必要な時以外には使わないようにしている
間違ったキーを使っても、エラーが出なくて困ることがあるし

107:デフォルトの名無しさん
09/01/06 10:05:36
>>94
パス区切りが\でコマンドオプションが/なのは、VMS由来。

108:デフォルトの名無しさん
09/01/06 10:34:33
>>107
まじで?
CP/M由来だと思ってたんだが

109:デフォルトの名無しさん
09/01/06 11:34:19
>>107
VMSはディレクトリを[]でくくり、区切りは '.'
相対パス [.foo.bar.baz]filename.ext
絶対パス [foo.bar.baz]filename.ext



110:デフォルトの名無しさん
09/01/06 11:38:59
CP/M にはディレクトリないだろ

111:デフォルトの名無しさん
09/01/06 12:16:41
CP/M++

DQN

112:デフォルトの名無しさん
09/01/06 12:29:20
>>109
command.comがこれをお手本にしてるから。
URLリンク(h50146.www5.hp.com)

113:デフォルトの名無しさん
09/01/06 13:05:14
DOS は CP/M を元にして作った(参考にした?)
CP/M はコマンドオプション指定に"/"を使ったので DOS もそうなった
んで、ディレクトリを実装する時に"/"を使えないので"﹨"を使った

というのが、普通に聞く説だと思うが

114:デフォルトの名無しさん
09/01/06 14:17:20
しかし「MS-DOSはCじゃなくてBasicで書かれていたから」には吹いた。

ちなみに最初はフルアセンブラです。

115:デフォルトの名無しさん
09/01/06 14:29:45
イメージで言いたいことはわからんでもないがぬ

116:デフォルトの名無しさん
09/01/06 17:37:08
0終端じゃなくて$終端だったような

117:デフォルトの名無しさん
09/01/06 17:57:59
>>116
それはファンクションコール9番の特殊仕様。
たしかキルドールが「その仕様の理由をゲイツに訊いてみな、答えられないから」と
言ってるという話を読んだ記憶がある。ソース忘れた。

118:デフォルトの名無しさん
09/01/06 18:14:47
>>117
俺もその話聞いたことがある。
同じくソース忘れたけど。

119:デフォルトの名無しさん
09/01/06 21:19:49
スレ眺めてたら自分の質問が初歩的過ぎて申し訳ないんですが、質問です。

[23,6,58,345]みたいな配列をコピペしてgetsなどで入力させるとき、
"[23,6,58,345]"となってしまって、これ自体が1つのオブジェクトとして認知されてしまうのですが、
23,6,58,345のように4つのオブジェクトとして一度に認識させる方法はあるのですか?

120:デフォルトの名無しさん
09/01/06 21:23:04
eval

でも他所様からの入力はevalしたら死ねるので注意

121:デフォルトの名無しさん
09/01/06 21:24:23
ありがとうございます
早速ためして見ます

122:デフォルトの名無しさん
09/01/06 22:06:48
>>120
おかげで完成しました。
ありがとうございます!

123:デフォルトの名無しさん
09/01/06 22:58:42
>>120
他所様の入力をevalの前に正規表現で
(\[[\d\,]+\])
とかしてからevalしても死ぬ?

124:デフォルトの名無しさん
09/01/06 23:02:02
>>123
入力がその正規表現に限定できるならそれでもいいんじゃない?

125:デフォルトの名無しさん
09/01/06 23:02:24
>>123
安全と確信できるパターンなら大丈夫いいのだが、
そのパターンだと [,,,,,,,] みたいなのを受け入れてしまわんか?

あと、$SAFEおよびtaint/untaintについても調べておくとよい。


126:デフォルトの名無しさん
09/01/06 23:05:03
>>123
数値だけなら自分でscanとかsplitととかした方が安心な気がする

127:デフォルトの名無しさん
09/01/06 23:40:58
inspect な記述を数値か文字列のどちらかの配列かハッシュに変換するライブラリとか作ったら
それなりに人気が出ると思う


128:デフォルトの名無しさん
09/01/06 23:45:14
>>127
こういうことじゃなくて?
eval({5 => 8.5, :a => 'b'}.inspect)



129:デフォルトの名無しさん
09/01/06 23:48:03
今回の記法に限れば
YAML.load('[1, 2, 3]')
=> [1, 2, 3]
とかもありかな。



130:デフォルトの名無しさん
09/01/06 23:50:36
JSONやYAMLとしてパースしてもいいんじゃない?

131:デフォルトの名無しさん
09/01/07 00:03:16
"[-1,0,1,2,3]".scan(/-?\d+/).map(&:to_i)
こんな感じでいいんじゃなかろうか

132:デフォルトの名無しさん
09/01/07 01:43:30
インスタンス変数の値を、GDBMを使ってDBへ書き込みがしたくて
こんな風に記述した。

GDBM.open(dbfile, 0644, GDBM::NEWDB){|db|
 line = @number, "," ,@name, "," ,@age, "," ,@address, "," ,@tel, "," ,@grade, "," ,@department, "\n"
 db[@number] = line
}

db[@number] = lineの部分で
in `[]=': can't convert Array into String (TypeError)
とエラーが出力される。

授業ではインスタンス変数の値ではなく、
CSVファイルから読み込み→DBファイルへ登録としてて、
カンマ区切りのデータならそのままDBへ書き込めるのかと解釈
したんだがそこから間違ってるのか…orz

長文スマソ

133:デフォルトの名無しさん
09/01/07 01:44:45
>>132
sage忘れた…ゴメンorz

134:デフォルトの名無しさん
09/01/07 01:48:28
いや、質問者はむしろageろ

135:デフォルトの名無しさん
09/01/07 01:58:50
>>132
>line = @number, "," ,@name, "," ,@age, "," ,@address, "," ,@tel, "," ,@grade, "," ,@department, "\n"
これは多重代入の怪しいルールでlineには配列が入るんだ
で,多分GDBMには文字列しか保存できないからこんなことになってる
だからインスタンス変数の値が全部文字列なら+でつなげるといいと思う

136:デフォルトの名無しさん
09/01/07 02:11:51
>>135
試したら先ほどのエラーは消えました!
でも + でつなげるってことはカンマ区切りなしの文字列しか
DBへ書き込みできないってことになりますか?



137:デフォルトの名無しさん
09/01/07 02:14:36
line=@number + "," + @name + "," + (以下略
こうだよこう


138:デフォルトの名無しさん
09/01/07 02:17:09
>>137
素で勘違いしてましたorz
そして出来ました!
助かりました…ありがとうございました!

139:デフォルトの名無しさん
09/01/07 06:41:18
勉強用なら、一旦配列にして結合用文字でjoinするのがスクリプトとしてもわかりやすいんじゃね、と思うぞ

data = [@number, @name, @age, @address, @tel, @grade, @department]
GDBM.open(dbfile, 0644, GDBM::NEWDB){|db|
 db[data[0]] = data.join(',')
}

この場合はDBから読むときには data = db[no].split(',') とかして取り出す
結合用文字はカンマを選んだが、インスタンス変数の中に存在しない文字なら @ でも # でも ^ でも何でもいい

140:デフォルトの名無しさん
09/01/07 13:54:35
'\0' がマジおすすめ


141:デフォルトの名無しさん
09/01/07 15:09:26
>>139,140
重ね重ねありがとう!
おかげで課題出来そう

142:デフォルトの名無しさん
09/01/07 18:37:38
>>132の者です
DB関連の問題は解決したんですが、

s1 = Student.new(引数)
s2 = Student.new(引数)

とインスタンスを生成した場合、Studentクラスのクラスメソッド内で
引数の値を判断してインスタンスを返す(s1とs2どちらのインスタンスなのか判断して返す)
という処理は出来ますか?



143:デフォルトの名無しさん
09/01/07 18:45:53
>>142
そのコードの目的も含めてもうちょっと詳しく

144:デフォルトの名無しさん
09/01/07 18:50:54
そのクラス名は正直どうよと思わなくもない
生徒のもつ個人情報という意味ならふつーに StudentData とかでいいじゃんね

>>142
回答は

「クラスメソッドは @@hoge 形式のクラス変数が読めるので
インスタンスメソッドの中(今回はinitializeの中)で先頭に@を2つつけたクラス変数に値を入れておけばOK」

だけど、たぶんクラスメソッドの使い方間違ってる
でも、間違ってるということが自覚できるのはずっと先なのでまずはどんどん変な構造のスクリプト作れ

145:デフォルトの名無しさん
09/01/07 18:53:04
>>143
課題で学生クラスを生成する課題があって、

・パラメータ7つ保持(これを引数にして渡してる、7つすべて文字列)
・学生クラスのインスタンス1つは、学生1人を表す
・クラスメソッドfindによって、文字列が一致する引数を持つ
学生インスタンスを取得できること

与えられた条件はこんな感じです

146:デフォルトの名無しさん
09/01/07 18:56:00
宿題スレ向けではあるね

Rubyの宿題教えてください。2限目
スレリンク(tech板)

このスレの連中は基本ヒマで、宿題スレも見てる人はいるから答はもらえるとは思うが

147:デフォルトの名無しさん
09/01/07 18:59:20
>>146
課題では他にも色々条件が与えられていて、
他の部分はほぼ実装できてるんだけど
向こうでは>>145みたいな部分的なこと聞いてもおkなんですか?

148:デフォルトの名無しさん
09/01/07 19:06:08
むしろこの初心者スレが、前提条件とか無関係な部分的なことを聞くスレだと思う

クラスメソッドというのは、クラスで定義されたメソッドとかそういう意味ではなくて、たとえば見かけで言うと

Student.find

で動作するタイプのメソッドということでいいのだよね?

s1.find
s2.find
find

で動くタイプのメソッドを指してるつもりの言葉ではないのだよね?

149:デフォルトの名無しさん
09/01/07 19:08:33
>>148
Student.findの方です
言葉足らずですみません…

150:デフォルトの名無しさん
09/01/07 19:12:31
インスタンスを引数にとるユーティリティなメソッドとしてクラスメソッドにまとめろという課題にも思えるけど、違うんだろうな

>>149
Student.find の引数には具体的にどんなものを指定するのが妥当で、
それによってメソッドの返り値としてどんなものが返ってくるべきだと思う?

151:デフォルトの名無しさん
09/01/07 19:14:23
class Student
 @@list = {}
 attr_reader :name
 def initialize(name)
  @name = name
  @@list[name] = self
 end
 def Student.find(name)
  @@list[name]
 end
end

Student.new("foo")
puts Student.find("foo").name

こんな感じか。

152:デフォルトの名無しさん
09/01/07 19:18:07
>>151
initialize の引数はたぶん7つだと思うよ
っていうか、それだと個々のインスタンス生成する意味がねえ

153:デフォルトの名無しさん
09/01/07 19:20:39
>それだと個々のインスタンス生成する意味がねえ
でも課題の内容からすると、まさにその方法を想定してるんだよな、たぶん…

154:デフォルトの名無しさん
09/01/07 19:20:41
>>152
そこまで面倒見る気はないw
クラスが自分のインスタンスのサーチをするサンプルを示しただけ。


155:デフォルトの名無しさん
09/01/07 19:24:07
>>154
サンプルありがとうございます。
でも最終的に欲しい値は>>142でいう"s1"か"s2"なんですorz

156:デフォルトの名無しさん
09/01/07 19:31:20
>>155
( ゚Д゚)<えっ

インスタンスを入れた変数の名前を文字列として知ってどうするの?
まさかevalするわけじゃないよね。

>>151
s1 = Student.new("foo")
としたあとに
p s1
p Student.find("foo")
このふたつが等しくなるんだけど、それでも変数名が必要?

(Class.newやStruct.newは代入した変数名に依存した処理をしてるけど
 あれってスクリプトレベルでできたっけ?)

157:デフォルトの名無しさん
09/01/07 19:36:22
>>155
>>150に答えて
これがしっかりしてないと外部の人間はメソッドが作れないよ
課題の一部だっていうんだから、きっとfindメソッドを他のどこかで使うんじゃないかい?

158:デフォルトの名無しさん
09/01/07 19:39:55
s1 = Student.new(引数7つ)
s2 = Student.new(引数7つ)
s3 = (ry

Student.find("引数に対して検索文字列")
# ↑ここで検索文字列を引数に持つのがs1~s3のどれか判定

s●.他の処理

としたかったんです…
最初からこう聞いてれば良かったですねorz





159:デフォルトの名無しさん
09/01/07 19:43:34
>>158
じゃあもうひとつ
その find メソッドを作ろうと決めたのはもしかしてあなた自身?

「Studentクラスのインスタンスの集団から該当するモノを抽出する」というのが本来必要な処理だったりしない?
そのために必要だと「あなたが思ったもの」が、「Student クラスにあるべきだと考えた find メソッド」だったりしない?

160:デフォルトの名無しさん
09/01/07 19:45:01
>>157
見落としてましたorz

返ってくるべき…ということは>>158に示したのが答えでは
ダメですよね?;

161:デフォルトの名無しさん
09/01/07 19:45:46
>>158
selfっていうのはnewされたオブジェクト本体で
そのあとに代入される変数の中身そのものだから

s = Student.find("引数に対して検索文字列")
s.他の処理

これでいい。変数名は知る必要がない。
s1をひっぱりだす検索をすれば、sの中身はs1と合致する。

162:デフォルトの名無しさん
09/01/07 19:47:09
>>159
findメソッドを作るというのは課題の条件です

163:デフォルトの名無しさん
09/01/07 19:57:42
>>162
こういうのは、ふつーに作ると、こういう処理になる

s1 = Student.new(arg1)
s2 = Student.new(arg2)
s3 = Student.new(arg3)
...
students = [s1, s2, s3, ...]

hit = students.find{|s| s.name = 'なまえ'}

と書きかけて、ちょっと思う
もしかして、データの検索って>>132みたいなDBで行う?


164:デフォルトの名無しさん
09/01/07 20:03:25
質問者は名前に一貫したレス番入れてくれないか
カオスすぎる

165:デフォルトの名無しさん
09/01/07 20:03:32
>>163
>>161で出来ました!

レスくださった皆様、長々とすみませんでしたorz

166:デフォルトの名無しさん
09/01/07 20:18:19
まさに初心者スレだな。
エスパー衆、おつ

167:初心者
09/01/07 22:26:54
rubyで画像サイトを巡回して画像を保存したいです
よろしくおねがいします

168:初心者
09/01/07 22:27:33
失礼しました。
環境はシグウィンです

169:デフォルトの名無しさん
09/01/07 22:28:49
コマンドラインで動作するWebクローラをシェルスクリプト的にRubyで制御するのが近道です
ゼロまたはイチから作ることもできるけれど、おそらくそのための知識は無いことでしょう

170:デフォルトの名無しさん
09/01/07 22:31:35
>>169
それだっ(・∀・)!

171:デフォルトの名無しさん
09/01/07 22:31:58
>>169
そういや、完全初心者だった4年くらい前の頃に作った画像フェッチャは中でwgetが動いてるな
いいかげん書き換えたいんだが、問題なく動作してるし別にいいか、みたいな

HTMLとHTTP(と、情緒的Webサーバ管理)に関する知識がないと作れないからねえ

172:初心者
09/01/07 22:33:33
ユーザエージェントとかクッキーを使わなくてはいけなくて
なおかつ画像URLがリンクになっていないので自前で
解析しなくてはいけないのですが、クローラ的なものは使えますか?

wgetで挑戦したのですがサーバにはねられました。
ちなみにC++はプロです。

173:デフォルトの名無しさん
09/01/07 22:35:11
>ちなみにC++はプロです。

ならドキュメント嫁、で終了。

174:初心者
09/01/07 22:37:22
>>173
Rubyは変なキツネの漫画を読んだだけなので
どういうモジュールがあるのかとか、どういう作りにすれば
いいのかとかわけわかめです

175:初心者
09/01/07 22:39:50
Net::HTTPなるモジュールがぐぐれたので使ってみようと思います。


176:初心者
09/01/07 22:43:01
Net::HTTP.version_1_2 # おまじない
Net::HTTP.start('www.yahoo.co.jp', 80) {|http|
response = http.get('/index.html')
puts response.body
}

これでなんかアクセスできたっぽいのですが、
構文が意味不明です。
解説きぼんぬ

177:デフォルトの名無しさん
09/01/07 22:43:53
open-uri使えば。

178:デフォルトの名無しさん
09/01/07 22:46:20
Mechanizeというのがある。
Hpricotとopen-uriで満足したから使ったことないんだけれど。

179:デフォルトの名無しさん
09/01/07 22:46:37
ほんとうにC++のプロなの?

180:初心者
09/01/07 22:49:30
なるほど、open-uriもつ変えそうですね
ありがとうです

181:初心者
09/01/07 22:52:52
ブロック付きメソッド呼び出しという構文があるんですね
新しい言語は刺激的です

182:デフォルトの名無しさん
09/01/07 22:54:46
そっからかよw

183:デフォルトの名無しさん
09/01/07 22:55:20
>>178
ちゃんとリンクになってるならMechanizeも楽だけどね。
Mechanizeのメソッドを上書きして、
取得してきたHTML書き換えてリンクにしてからパースさせるという手もできそう。

184:デフォルトの名無しさん
09/01/07 22:58:41
http://で始まって.jpgとか.pngとか.gifとかで終わる文字列探すとかでも
それなりになんとかなりそうなならなそうな

185:初心者
09/01/07 23:07:24
open-uriではStringIOオブジェクトが渡されて・・・
StringIOの中味をダンプ松本したいのですが
printメソッド読んでもなにも表示されないです

186:デフォルトの名無しさん
09/01/07 23:08:36
IOはとりあえずreadだ

187:初心者
09/01/07 23:13:56
>>186
ありがとうございます。
print f.read
でいけました。



188:初心者
09/01/07 23:16:57
処々でみかける p って組み込み関数なんですね。
これはちょっと受け入れがたい衝撃でした。
タイプ量減らすためでしょうかね


189:初心者
09/01/07 23:25:10
ハ・・・ッシュ??

190:デフォルトの名無しさん
09/01/07 23:25:44
p はデバッグ用の出力関数。
タイプ量を減らすためなのは確実。

191:デフォルトの名無しさん
09/01/07 23:31:51
>>189
連想配列のこと。と言えばいいのかな。

192:デフォルトの名無しさん
09/01/07 23:33:18
まとめサイトのurl渡すと画像DLしてzipに固めるってのを以前作ったなぁ

193:デフォルトの名無しさん
09/01/07 23:33:58
根拠がないくせに「確実」だってさwwwwww
開発者がpって打ったとき冷蔵庫にザッハトルテがあることを思い出して食べてたら
うっかり忘れちゃってたのが今でもそのままになってるに決まってるんだぜ

194:デフォルトの名無しさん
09/01/07 23:35:29
だから外部プログラムのwget使え
wgetを使ったこともないような人間はそもそもまともなものを作れない
Webブラウザを使ったことのない人間がWebブラウザを作れるか?

195:デフォルトの名無しさん
09/01/07 23:37:23
最初のwebブラウザを作った人はどうしたんだ

196:初心者
09/01/07 23:38:12
std::map の特殊版みたいなもんですね > ハッシュ

metaにレスポンスヘッダが格納されているはず・・・
でもSet-Cookieが見つからない・・・

197:デフォルトの名無しさん
09/01/07 23:40:31
>>195
通信に必要な仕様を読んだ

他人に聞かないと作れないってことは、仕様の知識がないということ
仕様の知識がないのなら、他人が作ったお着せのプログラムを使い倒すことから始めるべき
それで不満が出てきてから勉強を始めても遅くはない

198:初心者
09/01/07 23:42:12
f.meta.each_key { |key| p key }
でみたら"set-cookie"で入ってました。。。

ブロックつきなんたら構文、便利ですね

199:デフォルトの名無しさん
09/01/07 23:42:36
>>193
根拠がないくせに

「決まってるんだぜ」

          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ    <だっておwww
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /     |r┬-|    | (⌒)/ / / //
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /
 |    |   l||l 从人 l||l      l||l 从人 l||l
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

200:デフォルトの名無しさん
09/01/07 23:48:16
>最初のwebブラウザを作った人
だれだっけ
事務クラーク?

201:初心者
09/01/07 23:48:55
グローバルスコープで変数宣言したいのですが、
cookie
だけだとundefined local variableとか怒られて
cookie = ''
だと通ったのですが、Why?

202:デフォルトの名無しさん
09/01/07 23:49:30
アラン・ケイ

203:デフォルトの名無しさん
09/01/07 23:53:54
>>201
URLリンク(ruby-lang.org)

204:デフォルトの名無しさん
09/01/07 23:54:16
>>200
ティム・バーナーズ・リー氏だと思う。

205:デフォルトの名無しさん
09/01/07 23:55:51
undefined local variableすら読めないのにC++ではプロって
あまりに恥ずかしい
仕事して金もらってれば一応プロではあるが、実力はアマチュア未満じゃないか

206:204
09/01/07 23:56:13
いや、彼はHTTP、URL、HTMLの設計だけかもしれない。。。

207:204
09/01/07 23:58:16
いや、あってた。
# 1990年11月 - ティム・バーナーズ=リーが最初のWebサーバとウェブブラウザを試作する。
# 1991年2月 - バーナーズ=リーが開発したウェブブラウザであるWorldWideWebをインターネットに公開する。
URLリンク(ja.wikipedia.org)

>>205
釣りじゃねーの?

208:初心者
09/01/08 00:11:06
>>205
Rubyでは未初期化での変数定義は許されないんですか?
C/C++では許されるので、そのあたりに疑問を抱いただけですが・・・
ちなみに私の書いたプログラムのユーザは全世界で数千万単位です。

209:初心者
09/01/08 00:19:47
Cookie偽装でむふふ画像のありかをしめすhtmlの取得まで
たどりつけました。
みなさまのご指導のおかげです。
画像取得&Zip化は明日にします。
どうもありがとうございました。

210:デフォルトの名無しさん
09/01/08 00:29:39
>>197
>他人に聞かないと作れないってことは、仕様の知識がないということ
>仕様の知識がないのなら、他人が作ったお着せのプログラムを使い倒すことから始めるべき
>それで不満が出てきてから勉強を始めても遅くはない

仕様の知識がないのはRubyについてで、
wgetとかHTTPの仕様には詳しそうじゃん。
wgetがRubyで実装されてるっていうなら別だが。
てかお前の読解力がなさすぎ

211:デフォルトの名無しさん
09/01/08 00:39:45
他の言語経験があるなら、仕様については人に聞かなくても
ドキュメント読めばいいだけの話じゃん。

仕様を理解するのが面倒だから人に聞いたのかも知れないけど。

212:デフォルトの名無しさん
09/01/08 01:20:21
wgetよりcurlを使ってください

213:デフォルトの名無しさん
09/01/08 01:26:49
そうそう連番jpgを落すならcurlに限る

214:デフォルトの名無しさん
09/01/08 02:33:53
Hpricotでsearchした要素から再度searchするにはどうすればいいでしょうか?

class Blog
def chk_aaa(site)
content = Array.new
site.search("div.AAA").each { |entry|
content << entry.to_s.toutf8
}
return content
end
end
site = Hpricot(open("URLリンク(hogehoge.net)").read)
aaa =Blog.new.chk_aaa(site)

上ので言えばdiv.AAAの中にdiv.BBBという要素があるときに
aaaからsearchするにはどうすればいいでしょうか?

215:デフォルトの名無しさん
09/01/08 02:37:07
>>214
entry.search

216:デフォルトの名無しさん
09/01/08 02:38:23
質問の意図がわからなくなってきた。こっちかも?
site.search("div.AAA").search("div.BBB").each


217:デフォルトの名無しさん
09/01/08 02:48:00
>>215-216

すいません。
やりたいのはaaa.search("div.BBB")なのです。
しかし、aaa.searchするにはaaaはArrayなので
それをまたHpricotに投げないといけないのかなとおもいまして・・・。

218:デフォルトの名無しさん
09/01/08 07:03:39
そんなとこでメソッド分けるなよめんどいからさ

p でいろいろ表示してみるとわかるが、Hpricot の構造は

 ・ parse でパースした最初のHTML … Hpricot::Doc
 ・ 条件などで抽出されたタグ単体 … Hpricot::Elem
 ・ 条件で抽出された複数のタグ … Hpricot::Elememts

になってる。で、search や at は Hpricot::Elem にも Hpricot::Elememts にも定義されてるから、
search や at をし続ける限りにおいて、メソッドチェーンは途切れない。

ということで、「chk_aaa の返り値を Hpricot::Elememts のままにしておく」が正解。
Hpricot のオブジェクトを文字列にするのは検索や抽出操作が完全に終わった最後の最後に行う。
それまでは「○○タグを表すオブジェクト(が複数詰まった配列互換の何か)」として扱うのが楽。

class Blog
def chk_aaa(doc)
return doc.search("div.AAA")
end
def pick_BBB(doc)
return doc.search('div.BBB')
end
end

doc = Hpricot(open("URLリンク(example.com)").read)
aaa =Blog.new.chk_aaa(site)
puts "aaaの最初は #{aaa[0].inner_html} だよー" # ← たとえば画面表示時に文字列にする
bbb = aaa.pick_BBB(aaa)


219:デフォルトの名無しさん
09/01/08 07:08:37
で、aaaが途中でどーしても必要でないのなら、

class Blog
def pick_BBB(doc)
return doc.search('div.AAA').search('div.BBB')
end
end

doc = Hpricot(open("URLリンク(example.com)<)"))
bbb = Blog.new.pick_BBB(doc)

としてしまうのがコンパクトだとは思う。aaa が途中で必要なのなら仕方ないけれど。

220:デフォルトの名無しさん
09/01/08 07:55:32
ああっ、ヒマだから正月中の遣り取り読んでたらなんかヒドいのがっ

>>99
> URI.escapeはURIの中に出てきたらおかしいものだけをエスケープする。
> +はURIの中に入っていても全く問題ないのでエスケープされない。
という妥当な流れから、

> +をエンコードしたいなら、CGI.escapeを使えばおk。
なんでこういう結論になるんだよ。っていうか最初にこれ言い始めた奴誰よ出てこいやオラ

>>95
URI.escape には2番目の引数がある。以下マニュアル
> URI.escape(str[, unsafe])
> URI 文字列をエンコードした文字列を返します。
> unsafe には、URI として指定できない文字を正規表現か文字列で指定します。

ということで

require 'uri'
url = 'URLリンク(www.google.com)'
p URI.escape(url).to_s
p URI.escape(url,'+').to_s

とすると

"URLリンク(www.google.com) "
"URLリンク(www.google.com) "

になる。CGIのエスケープはURIエスケープの代わりにはできないから、これにすべき。

221:デフォルトの名無しさん
09/01/08 08:04:54
御説ごもっともだが、それだと URI::UNSAFE が消えるぞ

irb> puts URI.escape('URLリンク(example.com)ねこだいすき', '+').to_s
URLリンク(example.com)ねこだいすき

irb> puts URI.escape('URLリンク(example.com) だいすき', Regexp.union(URI::UNSAFE, /\+/)).to_s
URLリンク(example.com)

うーん、めんどくさいっすな

222:デフォルトの名無しさん
09/01/08 14:03:24
#!/usr/bin/ruby -Ku
require 'jcode'
s = '平成21年1月1日~平成21年12月31日'
p s.split('~')
s = '平成21年1月1日~平成21年12月31日'
p s.split('~')
なんですが、全角の~では分割できない?
ruby 1.8.6 (2008-03-03 patchlevel 114)です。

223:デフォルトの名無しさん
09/01/08 14:12:30
ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]
["平成21年1月1日", "平成21年12月31日"]
["平成21年1月1日", "平成21年12月31日"]

できたよ。

Unicodeの全角チルダ(FULLWIDTH TILDE)と波ダッシュ(WAVE DASH)の区別が
どーのこーのという問題だろうか。


224:デフォルトの名無しさん
09/01/08 14:22:44
・ スクリプトが UTF-8 ではない
・ 2バイト文字…ああ、Unicode だから2とは限らないのか…の正規表現には u をつける

p s.split(/~/u)

というのはどうだろ

225:222
09/01/08 14:45:13
>>223
>>224
サンクス
p s.split(/~/u)でうまくいった

226:デフォルトの名無しさん
09/01/08 21:28:38
>>218-219

ありがとうございました.
やりたいことはブログタイトルや個々のエントリを構造体に入れて,構造体.エントリ.searchのようにしたかったので
aaaが発生するようになりました.

まず,returnのさいにHpricot::Elementsで返すようにして修正していこうと思います.

227:デフォルトの名無しさん
09/01/08 22:00:20
226がhpricotのこと言ってるからついでに

href内にcat_xxxxx.htmlがあるaの要素をsearchするにはa[*=cat_]だけでOK?
これでやるといらないところまでついてくるんだよな

228:デフォルトの名無しさん
09/01/08 23:30:43
Rubyの調べ方について質問です
例えば

URLリンク(blog.codezine.jp)

を読んでいると

(doc/:h1).each do |h1|

のような表記が出ます
これについて自力で調べたいのですが、Googleは記号類を無視するようで
これが何かわからないと調べることができません

そのようなときに、皆様はどう調べていますか?
この例だと、/:h1って何だとかです
h1はHTMLのタグなのは判りますが、なぜ文字列として""で囲まないのか
また each do |h1|の|h1|は何だとか

これは例ですが、Rubyを最近使い始めてこういうところで困っています
何かいい方法があればご教授下さい

229:デフォルトの名無しさん
09/01/08 23:38:23
Google先生の性癖はよくわからんが、俺だったら

Ruby "/:"

みたいにクォーテーションで括るかな。

230:デフォルトの名無しさん
09/01/08 23:40:51
: はシンボルを表すやつで、
/ は除算演算子をオーバーロードしたものじゃないのか?
/: で一塊じゃないはずだ。

まあ、普通はリファレンスマニュアルの索引で調べるよ。

231:デフォルトの名無しさん
09/01/08 23:44:36
Rubyを始めたばかりでhpricot使っちゃったのが不幸の始まりとしか

232:デフォルトの名無しさん
09/01/08 23:44:40
ここでの/はHpricotのメソッドだね。
searchの別名だ。
最近始めたばかりというならもう少し基礎やる時間を作ればいいと思う。

233:デフォルトの名無しさん
09/01/08 23:44:59
(doc/:h1).each do |h1|
の場合、
doc →Hpricot::Doc のインスタンス
/ →docのインスタンスメソッド(/演算子の多重定義)
:h1 →/ の第2引数であるシンボル
|h1| →eachに与えられたブロックの単なる引数の名前

と、まず構文の要素を正しく認識しなきゃいかんね。


234:デフォルトの名無しさん
09/01/08 23:50:34
>>228はCSSセレクタやXPathをRubyマニュアルで調べるに一票

235:デフォルトの名無しさん
09/01/08 23:51:24
ソース追うのに慣れてなければ
irb 上で実行して, それぞれの変数にどんなオブジェクトが入ってるのか調べるのも大事
p object.class
p object
みたいな感じで

まあわかる人ならソース追うのが一番だけど

236:デフォルトの名無しさん
09/01/08 23:54:22
>>234
うわああああああ説明めんどくさああああ
>>231がそのまんまだな

237:デフォルトの名無しさん
09/01/08 23:55:18
>>228
ぐぐる以前に、そのページのコードの前にある参考ページに全部
書いてあるじゃん。
一般論としてということであれば、やっぱりぐぐる以前にリファレンスなり
入門なりを読むべきでしょう。

238:デフォルトの名無しさん
09/01/09 00:17:42
XP SP3、Ruby 1.8.6、エクセル2003使用者で、WIN32OLEを使ったプログラムを書いてるんですが、
エクセル操作の命令をメソッドの定義内で書いたときにエクセルのメソッド名?に空白が
含まれているものだとエラーが出てうまく動きません。
例:
def hoge
excel.Sheets(2).Select
end
は正しく動くのですが、

def fuga
excel.Sheets(2).Move After = excel.Sheets(1)
end
は"Move After"の"Move"と"After"の間に空白が入っているために
”dynamic constant assignment”というエラーが出てしまいます。
スペースをなくしたりするとこのエラーは消えますが、当然他のエラーが出ます。。

おそらく空白があるために後ろの"After"を定数と認識しているのではないかと思うんですが、どうなのでしょうか?
色々なエクセルのメソッドを自作のメソッドに定義して呼び出して一度に実行、みたいなことをさせたいと思っているんですが
文法上メソッドの定義内でこういったエクセルのメソッドを定義するのは無理なのでしょうか?
何かうまい解決策がありましたらご教授お願いします。

239:デフォルトの名無しさん
09/01/09 00:32:02
>>238
> おそらく空白があるために後ろの"After"を定数と認識しているのではないかと思うんですが、どうなのでしょうか?
その通り

スペース含んでたりしてRubyがメソッド名としてうまくパースしてくれないときは Object#send を使うといい
excel.Sheets(2).send('Move After') = excel.Sheets(1)

ただWIN32OLEでExcel使ったことないから動作確認はしてない

240:デフォルトの名無しさん
09/01/09 00:37:19
おなじくExcelは詳しくなくて申し訳ないが
MoveがメソッドでAfterは引数だって情報が引っ掛かったのよ
()でくくってみるってのはどう?

241:デフォルトの名無しさん
09/01/09 00:39:38
win32oleは使ったことないが多分invoke使うべきだろう
URLリンク(doc.loveruby.net)

242:デフォルトの名無しさん
09/01/09 00:42:06
>>229
でも>>228の該当部分の構文要素を分解すると、
「doc」「/」「:h1」なんだよな……。

243:238
09/01/09 01:07:01
>>239
助言ありがとうございます。
教えていただいた方法を試してみたのですがダメでした・・・
syntax error, unexpected '=', expecting kEND
 excel.Sheets(2).send('Move After') = excel.Sheets(1)

>>240
助言ありがとうございます。
Move(After)ってことですよね。こちらも同様にダメでした。。
syntax error, unexpected '=', expecting kEND
excel.Sheets(2).Move(After) = excel.Sheets(1)

>>241
助言ありがとうございます。
これも同様にダメでした・・・orz
syntax error, unexpected '=', expecting kEND


244:デフォルトの名無しさん
09/01/09 01:10:32
そもそもメソッドの返り値に代入なんかできないからね

245:238
09/01/09 01:13:01
すみません、>>243に書き忘れていましたが、
>>241
excel.invoke('Sheets(2).Move After') =excel.Sheets(1)
excel.Sheets(2).invoke('Move After') =excel.Sheets(1)
excel.Sheets(2).Move.invoke('After') = excel.Sheets(1)
と試してみましたがすべて下記のエラーでした。
 syntax error, unexpected '=', expecting kEND

246:227
09/01/09 01:17:37
わかりにくかったかもしれないから再度。
たとえば
URLリンク(blog.livedoor.jp)
ここのカテゴリの部分の要素を抜き取りたいのです。
div.entry-categoryで抜き出せばいいのですけど、複数あった場合はだめで、
複数あった時の共通するのはURLにcat_xxxxx.htmlとなります。
ので、hrefにcat_があればその要素を抜き出したいのですが・・・

247:227
09/01/09 01:20:36
わかりにくいかもしれませんね。
<a href="URLリンク(example.com)カテゴリ</a>
<a href="URLリンク(example.com)カテゴリ2</a>
のカテゴリ、カテゴリ2を抜き出したいです。


248:デフォルトの名無しさん
09/01/09 01:23:08
あーVBにキーワード引数が有ってそれをそのまま書こうとしてハマってるのか
多分こうだ
excel.Sheets(2).Move("After" => excel.Sheets(1) )

URLリンク(homepage1.nifty.com)


249:初心者
09/01/09 01:28:42
>>247
inner_htmlでおkです

250:227
09/01/09 01:31:10
>>249
inner_textだとカテゴリ,カテゴリ2と抜き出せるのですがね。
URLにcat_を含むaタグのinner_textを抜き出したいのです。

251:238
09/01/09 01:32:54
>>248
出来ました!
ありがとうございます!!
なるほど、そんな書き方があったんですね。
これで他のキーワード引数付きのメソッドも問題なく使えそうです。
本当にありがとうございましたm(_ _)m

252:デフォルトの名無しさん
09/01/09 01:33:11
a要素を全部取ってきてselectすれば?

253:228
09/01/09 01:44:46
みなさま、ありがとうございます

>>229
クオーテーションでくくっても、その場合Rubyのみの検索と同じです
Javaのように、やたら長いAPIだとぐぐると一発で出てくるのですが

>>230
>>232
オーバーロードだったのですね
リファレンスは見てみましたが、該当するものを見つけられませんでした
お手数をおかけしました

>>231
そうかも知れませんが、mechanizeを使うことが結構大きなモチベーションでした

>>233
丁寧にありがとうございます
|h1|はここに限らずよく使う構文ですので何となく判るのですが
一例として、これも調べるのに苦労したことがあります
使うだけなら、黙って書き写せばいいのだけど、欲張ると急に難しくなる

>>234
ありがとうございます、CSSセレクタとかは詳しくはないものの別件で調べてみました

>>235
mechanizeは結構複雑で苦労していますが、よくやっています

>>237
ごもっともですが、こういうとき普通はどう調べるのかなと疑問に感じました
Rubyは便利な機能が多いのですが、他人のコードを見て何をしているのか
今のところ自分の理解を超えているものが多く、読み解くヒントが欲しかったのです

254:デフォルトの名無しさん
09/01/09 02:03:14
>>227
XPathで
//a[contains(@href, "cat_")]
という風に指定すれば意図している要素が得られる

が,HpricotのXPath対応がお粗末だから(少くとも手元のHpricotでは)うまくいかない

そこで,>>252が言うように
search('a').select{|a| /cat_/ =~ a['href']}.map{|a| a.inner_text}
みたいな感じでごまかしとけばいいんじゃない?

まあ,nokogiri使えばXPathでうまくいくかもね

255:デフォルトの名無しさん
09/01/09 02:28:09
ソース見て分からないってのは基礎が出来てないからだと思うから、
詳細な解説付きの本でも読む事を勧める。

いちいちソースの解説求めてたら、答えるほうも大変だし飽きるでしょ。自分で調べて苦労してないからすぐ忘れて何度も同じ事訊くだろうし。

256:227
09/01/09 02:29:12
>>252,>>254
ありがとうございます。
search('a').select{|a| /cat_/ =~ a['href']}.map{|a| a.inner_text}
でやりたいことができました。
XPATHの方はnokogiriいれてやってみます!

257:デフォルトの名無しさん
09/01/09 03:29:21
自分のサイトのアドレスを取得する方法ってりあますか。
直にURL記述している部分があって、サーバ変えた際に色々と書き換えなどめんどうなので、
この部分をプログラムが今動いているサーバ(サイトURL)アドレスを取得して使ってくれるようにしたいのですが。

258:227
09/01/09 04:45:41
何度もすいません。
div.abcかdiv.efgがある場合に抽出するにはsearch("div.abc||div.efg")でよいのでしょうか?
それかsearch("div.abc")がnilになった時にsearch("div.efg")するように分岐させればよいのでしょうか?

いまいち論理演算の使い土器がわからないです。

259:デフォルトの名無しさん
09/01/09 04:49:38
>257
その方法を考える前に「直にURLを記述」するのを1回だけにするのはどうよ。
コードの頭の辺りで定数として入れておいて、後はコード内で補完って感じで。
そうすると書換えの時も1回で済むし、無駄なアクセスも増えないから重くもならないかと。

260:デフォルトの名無しさん
09/01/09 04:54:26
url=URLリンク(yoursite.net)みたいにね。
外部参照(だっけ?)できるようにすればそれ参照すればいいんじゃね?

261:デフォルトの名無しさん
09/01/09 05:53:39
>>257
どんなフレームワーク使ってるかわからんけど
クライアントのリクエスト情報が入ったインスタンスの中を探せばあるだろ
WEBrick::HTTPRequest#hostとかCGI#server_nameとか

262:デフォルトの名無しさん
09/01/09 06:34:16
>>258
search の引数には「CSSセレクタ」か「XPath」が使える(Hpricot独自の拡張も入ってるが)
どちらも「HTMLとかのタグの位置を表記する方法」だ(大雑把)

というわけでCSSセレクタの使い方でも調べとけ
他人にいちいち書き方を聞くことはなくなるだろう

263:デフォルトの名無しさん
09/01/09 06:54:42
>>257
定数ENVの中に何かいいの入ってるかも

さくらインターネットと自前のLANサーバでスクリプトを共有させてたときは
LOGIN_NAMEで初期値変えてたなあ

264:デフォルトの名無しさん
09/01/09 07:25:17
>>257
奥の手
require 'open-uri'
open('URLリンク(forts.jp)').read.strip

265:デフォルトの名無しさん
09/01/09 08:59:47
ruby で argv を書き換える方法ってありますか?

Cだと **argv をいじると、プロセス一覧(ps等)に反映されるのですが ruby でも同じことをやりたいです

266:デフォルトの名無しさん
09/01/09 12:11:12
$0

267:デフォルトの名無しさん
09/01/09 12:41:44
>>257
RackならRequest#urlがある

268:デフォルトの名無しさん
09/01/09 15:46:56
>>259
>>260
>>261
>>263
>>264
>>267
とりあえずファイルに設置サーバのアドレス書き込んで、
それから読み出して使うように処理変えることにしました。

色々とアドバイスありがとうございます。

269:デフォルトの名無しさん
09/01/09 17:03:54
>>265
$0 = 'winny'

OSによっては駄目かもしれない。


270:デフォルトの名無しさん
09/01/09 17:29:53
Mechanizeで教えてください。
ブラウザでサイトに接続。
あるフォームをポストすると,ファイルがダウンロード。
そのページはかわらずそのまま。リンクやボタンをクリック可能。
(あたりまえといえばあたりまえなのですが)
という作業をMechanizeでやろうとしてます。で
agent = WWW::Mechanize.new
agent.get(hogeサイト)
agent.submit(agent.page.form(hogeフォーム))
agent.page.bodyでファイルを取得
なのですが,この段階で,agent.pageのクラスが
WWW::Mechanize::Fileになってしまって,agent.page.backとかもできない。
フォームをsubmitする前のところから,次の作業をするにはどうすればいいでしょうか?
reserve=agent.get(hogeサイト)
みたいにしても,reserveは参照だから,同じでした。

271:デフォルトの名無しさん
09/01/09 17:34:24
transactとかあったような

272:デフォルトの名無しさん
09/01/09 17:36:59
めんどくさいなあ

見た目に簡単なのは、WWW::Mechanize#transact を使うこと
URLリンク(d.hatena.ne.jp)
ブロック開始時の履歴が保存されて、ブロック終了時に書き戻される

agent.get(hoge_uri)
agent.transact{|a|
a.page.form_with(:method => value).click_button.save_as(path_to_save)
}
agent.page # hoge_uriを維持


273:デフォルトの名無しさん
09/01/09 17:45:14
リクツとしてわかりやすいのは、WWW::Mechanize#visited_page
URLリンク(d.hatena.ne.jp)
URL を引数に渡すと、そのURLにアクセスしたときの Page オブジェクトを履歴から探してきて返す

agent.get(hoge_uri)
agent.page.form_with(:method => value).click_button.save_as(path_to_save)

agent.visited_page(hoge_uri).links_with...

agent.page の代わりに agent.visited_page(hoge_uri) を使うことで、いつでも過去の Page オブジェクトを引き出せる
いちいち書くのめんどい場合は
prev_page = agent.visited_page(hoge_uri)
とでもして変数に入れとけ

あ、Mechanize 0.8.5 より前の Mechanize を使ってる場合は form_with(:method => value) や click_button が動かないんで、
代わりに forms.method(value) や submit 使ってくれ

274:デフォルトの名無しさん
09/01/09 17:56:07
transact ってそう使うのか

275:デフォルトの名無しさん
09/01/09 18:01:50
>>274
たぶん、そもそもこういう用途向けに作られたんじゃないかと思われる

トランザクションと銘打っておきながらブロック内で履歴が新規に開始されていない
(ブロック直前のページがブロック内初回アクセスのリファラ候補になってる)あたりが怪しい

276:デフォルトの名無しさん
09/01/09 18:08:08
>>267
Rack(笑)

Rackって使ってる人多くない感じがセンデロルミノソ

277:デフォルトの名無しさん
09/01/09 18:13:10
個々に好きなの使ってる感じは嫌いではない俺

278:デフォルトの名無しさん
09/01/09 18:48:50
プログラミング言語 Ruby
David Flanagan, まつもと ゆきひろ 著 、卜部 昌平 監訳、長尾 高弘 訳
2009年01月24日 発売予定
URLリンク(www.oreilly.co.jp)
> 1章  イントロダクション
> 2章  Rubyプログラムの構造と実行
> 3章  データ型とオブジェクト
> 4章  式と演算子
> 5章  文と制御構造
> 6章  メソッド、proc、lambda、クロージャ
> 7章  クラスとモジュール
> 8章  リフレクションとメタプログラミング
>   8.5 フック
>   8.6 トレーシング
>   8.7 ObjectSpaceとGC
>   8.8 カスタム制御構造
>   8.9 method_missingとconst_missingの活用
>   8.10 メソッドの動的な作成
>   8.11 エリアスチェイン
>   8.12 ドメイン固有言語(DSL)
> 9章  Rubyプラットフォーム
>   9.1 文字列
>   9.2 正規表現
>   9.3 数値と数学
>   9.4 日付と時刻
>   9.5 コレクション
>   9.6 ファイルとディレクトリ
>   9.7 入出力
>   9.8 ネットワーキング
>   9.9 スレッドと並列処理
> 10章  Ruby環境

279:デフォルトの名無しさん
09/01/09 18:52:07
>>278
これもっと早く出すべきだったんじゃね?
なにこのわかった人向けの基本の解説本

280:デフォルトの名無しさん
09/01/09 18:55:58
>>278
> 2.4 プログラムのエンコーディング
> 2.4.1 プログラムのエンコーディングの指定
> 2.4.2 ソースエンコーディングとデフォルト外部/内部エンコーディング
> 3.2 文字列
> 3.2.6 文字列のエンコーディングとマルチバイト文字
お。

281:デフォルトの名無しさん
09/01/09 19:04:33
Matzが直接本を書くのは、1.6ごろの宝石本以来?

282:デフォルトの名無しさん
09/01/09 19:18:29
それとほとんど内容同じ鴨試練

283:デフォルトの名無しさん
09/01/09 19:23:42
今のバージョンに合わせた内容にしてるだけだろうな。
それでも大きな違いはあるだろうけど。

284:デフォルトの名無しさん
09/01/09 19:26:58
良くも悪くも目次が「普通+言語作者周辺が語るディープツッコミ」で終わってるからな

285:デフォルトの名無しさん
09/01/09 20:13:07
本の最初の部分で「他の言語経験がなく、これからRubyでプログラミングを始める人を対象とする。」みたいに
書いてあるが、実際にはまったくのプログラミング初心者には向かないかもしれない。

一番不思議に思ったのは、練習問題。

ふつう、その章に出てくる練習問題は、その章までに学んだことを応用できるような
問題にするべきなのに、Stringクラスの練習問題では、次の章に出てくるハッシュや
正規表現を使わせる問題が出てくる。

これじゃプログラミング初心者はつまずいてしまうのではないだろうか。

なんとなく、プログラミングの感覚を「Ruby」に染めさせるような本に思えてくる。

286:デフォルトの名無しさん
09/01/09 20:15:58
プログラミングPerlもプログラミング初心者が1ページ目から読むようにはできてなかった気がする
(まああれは厚さも問題だが)

287:デフォルトの名無しさん
09/01/09 20:51:12
>>278
100冊カートに入れた。
そしてカートから出した。

288:デフォルトの名無しさん
09/01/09 21:11:27
カートには99冊残ってるわけか

289:デフォルトの名無しさん
09/01/09 21:11:31
いまRubyマニュアルを読めてるような人には有り難味の薄い書物であるように見える

290:デフォルトの名無しさん
09/01/09 21:13:03
>>289
購入者の6割はお布施だと思うよ

291:デフォルトの名無しさん
09/01/09 21:14:15
原著を斜め読みした限りでは、初心者向けの本ではない。
1.9の解説書として考えるのが妥当だと思う。

292:デフォルトの名無しさん
09/01/09 21:18:23
>>288
それは必ず成り立つのですか?

293:デフォルトの名無しさん
09/01/09 21:19:34
詳説Rubyと名付けるのが妥当

294:デフォルトの名無しさん
09/01/09 21:20:49
オライリーの "プログラミング#{言語名}" という本は総じてガチ初心者お断りだから、
間違って買ってしまう人以外は平気だと思う

295:デフォルトの名無しさん
09/01/09 21:22:04
設計者の書いた本は、仕様と同時に言語の思想とかも与えてくれるから
バイブル扱いされやすい気がする
K&R、ラクダ、D&Eみたいに・・・・・本家amazonの評価が異様に良いのも気になる

296:デフォルトの名無しさん
09/01/09 21:23:12
>>293
だよなぁ・・。

なんかこう、プログラミング初心者向けですよ~みたいなこと言っておいて
「プログラミングの世界ってどんなんだろう?」という純粋な初心者が、いつのまにか「Rubyだけの世界」に洗脳されそうだ。
もっとプログラミングの本質にこだわった本かと思ったのに。。

297:デフォルトの名無しさん
09/01/09 21:28:58
プログラミングの本質に触れたいなら特定の言語名を冠した本は違うと思うな。
といってプログラミングの初心者にそれを理解しろってのは酷だけど。

298:デフォルトの名無しさん
09/01/09 21:31:12
>>297
> プログラミングの本質に触れたいなら特定の言語名を冠した本は違うと思う
URLリンク(www.amazon.co.jp)
イエスこの本マジお勧め

299:デフォルトの名無しさん
09/01/09 21:33:12
>>298
それなんでRuby採用したんだろうな

300:デフォルトの名無しさん
09/01/10 01:51:35
> Rubyは変なキツネの漫画を読んだだけなので
www
ホワイの感動的なやつだな

>>205
C++のプロは「C++のプロ」とは自分で言わんだろ。
自称「C++のプロ」と言えばなんとなくニュアンスはわかる

301:デフォルトの名無しさん
09/01/10 02:40:12
>>285
>ふつう、その章に出てくる練習問題は、その章までに学んだことを応用できるような
>問題にするべきなのに、Stringクラスの練習問題では、次の章に出てくるハッシュや
>正規表現を使わせる問題が出てくる。
>これじゃプログラミング初心者はつまずいてしまうのではないだろうか。

それは既にhashや性器表現を知ってるからそう思うだけで教育的効果はあると思うよ
初心者の場合hashや性器表現を使わずにその問題を解こうとして悩むのがいい
そうすれば次の章で出てくるhashや性器表現の意味や必要性を理解しやすい
唐突にhashや性器表現が出てくる方が初心者は混乱する

>なんとなく、プログラミングの感覚を「Ruby」に染めさせるような本に思えてくる。

どの辺が?

302:デフォルトの名無しさん
09/01/10 02:43:11
>>300
大学生のときは上には上がいる、というか、上しかいない状況だったが、
就職してからは、下が果てしない、というか、下しかいない状況だった。
プログラミングで食ってりゃプロなのは間違いないが、それとスキルは直結しない。

303:デフォルトの名無しさん
09/01/10 02:52:58
まつもとゆきひろって2ちゃんねるの管理人だった人?

304:デフォルトの名無しさん
09/01/10 03:33:40
>>301
ネタとわかってても性器表現が気になってしょうがないんだがw

305:デフォルトの名無しさん
09/01/10 07:07:39
>>302
下ばっかり見てると腕落ちますよ

306:デフォルトの名無しさん
09/01/10 09:24:05
rubygemsってどう呼ぶんですかね?
ルビィゲムズ?

307:デフォルトの名無しさん
09/01/10 09:28:57
>>306
gem(ジェム): 宝石。宝玉。
URLリンク(dictionary.www.infoseek.co.jp)


308:デフォルトの名無しさん
09/01/10 09:44:34
>>307


309:デフォルトの名無しさん
09/01/10 13:08:05
>>266
>>269

遅くなりましたがありがとうございます!!
perl と同じなんですね
助かりました!

310:デフォルトの名無しさん
09/01/10 13:10:27
>>301
なるほどね。

311:デフォルトの名無しさん
09/01/10 14:01:03
青空文庫形式のテキストを処理しています。
青空文庫形式では親文字とルビを次のように書いています。

 |親《おや》|文《も》|字《じ》

これを一つにまとめる形で、

 |親文字《おやもじ》

という形に変換(置換処理)したいのですが、どうすれば良いでしょうか。
親文字が幾つあるかは一定していません。
この処理を一行毎に行いたいのです。

312:デフォルトの名無しさん
09/01/10 14:59:15
>>311
irb> s = '|魑《ち》|魅《み》|魍《もう》|魎《りょう》が|跋《ばっ》|扈《こ》する'
irb> 1 while s.gsub!(/|(.*?)《(.*?)》|(.*?)《(.*?)》/, "|¥¥1¥¥3《¥¥2¥¥4》")
=> "|魑魅魍魎《ちみもうりょう》が|跋扈《ばっこ》する"

gsub!は置換が行われればレシーバ(s)を、行われなければnilを返す。
1っていうのはとくに意味はない。後置whileを繰り返すためだけの存在。


313:デフォルトの名無しさん
09/01/10 15:13:57
s.gsub(/(|.+?《.+?》)(?!|)/){"|%s《%s》" % $1.scan(/|(.+?)《(.+?)》/).transpose}

正規表現であまり悩みたくない人向け

>>312
gsub の第 2 引数は使うなとお達しが来てるはずだが

314:デフォルトの名無しさん
09/01/10 15:27:57
初心者スレで transpose と sprintf 使って手抜きしてる人には言われたくないだろうな

s.gsub(/(|.+?《.+?》)(?!|)/){
base = Array.new
ruby = Array.new
$1.scan(/|(.+?)《(.+?)》/){|m|
base.push(m[0])
ruby.push(m[1])
}
# 以下の文字列が gsub(re){str} の str に当たるもの
"|#{base.join('')}《#{ruby.join('')}》"
}

前にも gsub の 2番目の引数使ってた人がいたけど同一人物かね
無駄にエスケープ連打せずにブロック使えという認識になってたと思う




315:デフォルトの名無しさん
09/01/10 15:42:35
>>312
s = "|日《に》|本《ほん》|語《ご》の|漢《かん》|字《じ》"
1 while s.gsub!(/|(.*?)《(.*?)》|(.*?)《(.*?)》/, "|\\1\\3《\\2\\4》")
puts s

|日本語字《にほんご》の|漢《かんじ》


316:デフォルトの名無しさん
09/01/10 15:43:46
> gsub の第 2 引数は使うなとお達しが来てるはずだが
kwsk

317:デフォルトの名無しさん
09/01/10 16:28:35
正規表現で漢字のかんむりやへんやつくりをマッチさせるにはどうするんですか?

318:デフォルトの名無しさん
09/01/10 16:32:31
>>317
無茶言うな

どっかの誰かに「部首と漢字文字との対応表データ」を作ってもらうしかないね
ネット上には適当なデータを作ってる熱心な人がいるから、それをRubyでどうにか使うしか

319:デフォルトの名無しさん
09/01/10 16:37:40
発想としては斬新でけっこう好きだ
その視点を失わずにプログラミングして欲しいなと思う

320:デフォルトの名無しさん
09/01/10 17:11:49
このスレの少し前でRackの話が出てたけど
実際のところ、Rackって日本ではどのくらい使われてるんだろうね
日本語の解説記事もいくつかあるから、少なくともドマイナーって程ではないと思うが

321:デフォルトの名無しさん
09/01/10 17:49:37
流石って
さす+が
さ+すが
どっちになってます?

322:デフォルトの名無しさん
09/01/10 17:56:54
>>321
熟字訓だから「さすが」で分かれない
明日が「あし - た」でも「あ - した」でもないのと同じ

323:デフォルトの名無しさん
09/01/10 19:33:38
(3.2-2.0) == 1.2 がfalseの理由を教えて下さい。

324:デフォルトの名無しさん
09/01/10 19:34:58
>311です。皆さんありがとうございました。

325:デフォルトの名無しさん
09/01/10 19:47:19
>>323
等しくない
たぶん浮動小数点数の誤差のせい

irb(main):024:0> sprintf("%.16f", 3.2 - 2.0)
=> "1.2000000000000002"
irb(main):025:0> sprintf("%.16f", 1.2)
=> "1.2000000000000000"

326:デフォルトの名無しさん
09/01/10 19:51:08
>>323
浮動小数点だから

何かを計算した結果の浮動小数点の値と、
それ以外の数式で何かを計算した(あるいは計算していない)浮動小数点の値が、
全く同じになるというようなことはふつう無い

だから、小数を含んでいる数値は絶対にイコールで比較してはいけない

どうしても比較したい場合は、たとえばその差を誤差並に小さな数 Float::EPSILON と比較する

irb> (3.2 - 2.0) -1.2 < Float::EPSILON
false
irb> (3.2 - 2.0) -1.2 < Float::EPSILON*10
true

10倍や100倍以内なら同じ数値とみなしてよい

327:デフォルトの名無しさん
09/01/10 19:53:11
>>323
なるほど。
てことは、浮動小数点数の比較は安易にするなってことですかね。


328:デフォルトの名無しさん
09/01/10 19:55:18
>>326
ありがとうございます!
そうゆうもんなんですね。
PHPから入った素人なんで、勉強になりました。

329:デフォルトの名無しさん
09/01/10 19:55:38
あ、いかん、絶対値とらないと

((3.2 - 2.0) -1.2).abs < Float::EPSILON*10

こういうのでよろしこ

330:デフォルトの名無しさん
09/01/10 19:55:47
rubyに限らず実数の比較をしないってのは基本
おおむね>>326の通りなんだけど、欲を言えば絶対値を取っておくほうがいい

331:デフォルトの名無しさん
09/01/10 19:57:40
厳密じゃなくていいのなら、文字列にして比較してしまうというのがいいかもしれん
一般的な用途では文字レベルでしか判断しないからな

irb> (3.2-2.0).to_s == 1.2.to_s
true

332:デフォルトの名無しさん
09/01/10 20:29:17
なぜ文字列にして比較を??
数値の比較の話じゃなかったの?

333:デフォルトの名無しさん
09/01/10 20:59:37
>>332
文字列は

てか浮動小数点の指数の基数って
初心者の頃はずっと10なんだと思ってた。
で、なんで誤差が発生するんだとさんざん悩んでみたり
今からしたら俺アホかと





次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch