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

Ruby 初心者スレッド Part 16

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/12/08(土) 22:36:20
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは>>2-10あたりを見てください。Ruby on Railsの質問はWebProg板のRailsスレで。

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

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0153デフォルトの名無しさん2007/12/15(土) 22:37:43
その程度だとRubyだとこんな感じ?

evens = (1..10).select{|n| (n % 2).zero? }

長さはちょい長いぐらい?
0154デフォルトの名無しさん2007/12/15(土) 22:43:16
>>152
正直無理じゃない?アレは結構python独特のものだから、rubyの側で実装してもらわないと。
0155デフォルトの名無しさん2007/12/15(土) 22:49:43
いや、そういう風にかけば等価なのはわかりますけど、
リスト内包は数学っぽくてわかりやすいのです。

S^1 = { x \in R, y \in R | x^2 + y^2 = 1 }

みたいな書き方するじゃないですか。
あと、
[ [ i + j for (i in range(0, 10))] for (j in range(0, 10)]
と書くと直感的に二次元配列が出来て便利〜みたいな。

>>154
そうですか〜
ググって、文字列をevalしてそれっぽいことやってる人がいるのを見かけた
のでそれで我慢することにはしますが。
0156デフォルトの名無しさん2007/12/15(土) 23:08:57
generatorでうまくかけないものだろうかねぇ。
evens = Generator.new {|g| n = 0; loop { g.yield(n); n += 2} }
0157デフォルトの名無しさん2007/12/15(土) 23:25:05
require 'generator'

class NumberSequence
def initialize(first=0, &block)
@pred = block
@gen = Generator.new do |g|
value = first
loop do
g.yield(value) if @pred.call(value)
value += 1
end
end
end
def next
@gen.next
end
end

events = NumberSequence.new {|n| n % 2 == 0 }
10.times do
puts events.next
end

などと書いてみてから、無限である必要がないことに気づいた。
0158デフォルトの名無しさん2007/12/15(土) 23:26:49
なんか手が勝手にtを付け足していたらしい。
eventsじゃなくてevensな。
0159デフォルトの名無しさん2007/12/16(日) 03:20:32
>>155
Ruby に訳すと

(0...10).map{|j| (0...10).map{|i| i + j } }

とか、

Array.new(10){|i| Array.new(10){|j| i + j } }

とかになるな。

RubyのイテレータはPythonのmapやfilter等に比べて
もっとマクロなものだから、Pythonで内包書くところは
Rubyだとイテレータのが合うと思う。

逆にPythonでmapやfilterとか、イテレータオブジェクト使うところは
Rubyだとちょっと悩む。
0160デフォルトの名無しさん2007/12/16(日) 10:14:29
1.9で 0.step(1.0/0.0, 2) ってできなかったっけ?
0161デフォルトの名無しさん2007/12/16(日) 12:02:35
正規表現で、マッチしたらfalseを返して欲しいときに
/hoge/ =~ string ? false : true
こんな事してみたんだけどもっと幸せな方法はありますか?
0162デフォルトの名無しさん2007/12/16(日) 12:06:31
not /hoge/ =~ string
0163デフォルトの名無しさん2007/12/16(日) 12:18:43
/hoge/ !~ string
0164デフォルトの名無しさん2007/12/16(日) 12:58:21
ありがとう
リファレンスの正規表現の頁に書いてくれないとワカンネ・・・
0165デフォルトの名無しさん2007/12/16(日) 19:16:44
Errorがraiseされたときに、
RuntimeError: **ERROR
  from (irb):2:in `g'
  from (irb):1:in `f'
  from (irb):3
  from :0
と表示されるけど、例外をこの形式の文字列に変換してくれる関数ってありますか。
begin .. except .. end でチャッチした例外を、上と同じ形式でログファイルに書きたい。
0166デフォルトの名無しさん2007/12/16(日) 19:28:44
これで同じにはなる。

bt = e.backtrace
puts("#{bt[0]}: #{e.message} (#{e.class.to_s})")
1.upto(bt.length - 1) { |i| puts("\tfrom #{bt[i]}") }
0167デフォルトの名無しさん2007/12/16(日) 19:30:48
って、これは Matz Ruby のメッセージだから、
irb だとまた変わってくるのか。
0168デフォルトの名無しさん2007/12/16(日) 20:09:12
rubyにおけるPy_Initializeはありますか? rubyインタープリンタを自作EXEに組み込みたいです
Py_Initializeはpythonのドキュメントで詳細な説明がなされていて組み込み用途で用いてもよいことが感じ取れる(!?)のですが
ruby_initはググってもRubyソースコード完全解説のページが先頭にでたりして自作EXEの中で呼んでいいのか分かりません
0169デフォルトの名無しさん2007/12/16(日) 22:12:39
a = ["あいうえお","かきくけこ","さしすせそ"]

といったようなArrayの内容をファイルに書き出すために

File.open("temp.txt","w") do |file|
  file.puts "array - " + a.to_s
end

と書くと

array - ["\202\240\202\242\202\244\202\246\202\250", "\202\251\202\253\202\255\202\257\202\261", "\202\263\202\265\202\267\202\271\202\273"]

といったようなUTF-8の表記で出力されてしまいます.

array - あいうえお かきくけこ さしすせそ

という風に日本語で出力するにはどうしたらいいですか?

0170デフォルトの名無しさん2007/12/16(日) 22:18:07
> array - ["\202\240\202\242\202\244\202\246\202\250", "\202\251\202\253\202\255\202\257\202\261", "\202\263\202\265\202\267\202\271\202\273"]

それはありえない
inspectされるはずがない
puts の代わりに p を使ってないか
0171デフォルトの名無しさん2007/12/16(日) 22:24:06
いえ.書いたとおりです.

環境はWindowsXP
バージョンはruby 1.9.0 (2007-07-09 patchlevel 0) [i386-mswin32]
開発にRDE使用
です.
【サンプルコード】
a = ["あいうえお","かきくけこ","さしすせそ"]

File.open("temp.txt","w") do |file|
  file.puts "array - " + a.to_s
end
0172デフォルトの名無しさん2007/12/16(日) 22:28:04
目的は,配列の文字列をすべてファイルに出力することです.
なるべくループで回したりせずに1行で書きたいと思います.

それができればいいので,他の方法があればよろしくお願いします.
0173デフォルトの名無しさん2007/12/16(日) 22:38:38
>>172
Array#join
そういう用途のときには、Array#to_sはあまり当てにしないほうがいい
0174デフォルトの名無しさん2007/12/16(日) 22:42:52
a.to_s は

あいうえおかきくけこさしすせそ

にならなければならないんだが…
まあとりあえず、配列を書き出す際は適当な区切り文字でjoinさせて文字列にするのが普通

irb> puts "array - #{a.join(',')}"
array - あいうえお,かきくけこ,さしすせそ
0175デフォルトの名無しさん2007/12/16(日) 22:43:00
>>168
README.EXTとREADME.EXT.ja
組みこみ例としてはmod_rubyとかvimとかmfiler2とか。
Pythonほどドキュメントが充実してないけどそう難しくない。
0176デフォルトの名無しさん2007/12/16(日) 22:45:24
Array#to_sは1.9から#inspectじゃなかったかな
少なくともうちのruby 1.9.0 (2007-07-09 patchlevel 0) [i386-mswin32]だとそうだ
0177デフォルトの名無しさん2007/12/16(日) 22:49:14
ていうか初心者スレの人間が1.9なんて使うなよ
あれは1.8を理解した人間が使うものだ
0178デフォルトの名無しさん2007/12/16(日) 22:49:20
また1.9か。初心者は1.8使いましょう。
0179デフォルトの名無しさん2007/12/16(日) 22:53:15
>>173-4
joinでうまくいきました.
ありがとうございました.
0180デフォルトの名無しさん2007/12/16(日) 22:58:19
>>179
今すぐ1.9をアンインストールして1.8.6をインストールしろ
今すぐだ

1.9は速いだあ?
お前が使ってるうちはどんなスクリプト言語より処理は遅いよ
0181デフォルトの名無しさん2007/12/16(日) 22:58:58
なんでけんか腰なのかわからんw
0182デフォルトの名無しさん2007/12/16(日) 23:03:57
テンプレに「初心者は開発版を使うな」って書いておくべきだな
0183デフォルトの名無しさん2007/12/16(日) 23:04:34
すくなくとも初心者のスレで1.9の話題はナシだろ。
0184デフォルトの名無しさん2007/12/16(日) 23:05:35
>ていうか初心者スレの人間が1.9なんて使うなよ 
>あれは1.8を理解した人間が使うものだ 

え.そうなんですか?
何も考えず最新版を入れてました.
1.9は言語仕様の変更とかバグとかが多いんですか?
0185デフォルトの名無しさん2007/12/16(日) 23:06:10
どんな手段をもってでも初心者から1.9を遠ざけたいという強い意思の現れだろう


いやわからんけど


っていうかなんでわざわざ1.9入れるんだろう
安定版という響きが悪いのか? 正式版とでも書けばいいのかな
いやまあ確かにttp://www.ruby-lang.org/ja/downloads/から直接FTPディレクトリに飛ぶと
1.8.6の上に1.9.0があるように見えるんだけどさ
ttp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/
unstableとかディレクトリ切ったほうが間違いないのかもしれない
0186デフォルトの名無しさん2007/12/16(日) 23:16:14
>>184
どのサイトを見て最新版を入れたんだ?

>>185
でも普通、初心者はわざわざFTPディレクトリに飛ばないと思うんだが
そうでもないんだろうか
0187デフォルトの名無しさん2007/12/16(日) 23:17:53
1.9は開発版でしたか.
良く覚えてませんが,ftpから適当に数字の大きい最新版を落とした様な気がします.
どうも失礼しました.
0188デフォルトの名無しさん2007/12/16(日) 23:24:20
ところで,
ruby-1.8.6-p111-i386-mswin32.zip
で良いんでしょうか?

ruby-1.8.6-i386-mswin32.zip
ruby-1.8.6-p36-i386-mswin32.zip 
と3つあるみたいなんですが.
pはパッチの意味ですか?
0189デフォルトの名無しさん2007/12/17(月) 00:33:24
>>166
さんくす
0190デフォルトの名無しさん2007/12/17(月) 00:46:01
at_exitを使うと、プログラム終了時に行う処理を登録できますが、
そんな感じで、例外が発生したときにそれをキャッチする処理を登録できますか。
begin - rescue - end で全体を囲めばいいんですが、そうでない方法で例外ハンドラを登録する方法があれば教えてください。

やろうとしているのは、requre 'foobar' としたら自動的に例外ハンドラが登録されることです。
0191デフォルトの名無しさん2007/12/17(月) 06:06:24
>>190
raise+rescue なら rescue ブロックの end 以降に処理が続くけど
登録したハンドラの処理が終了した後はどうなる事を期待してる?

require 'foobar' でどうにかするって事が目的なら
例外を発生させてるメソッドを上書きする方がよくね?
0192デフォルトの名無しさん2007/12/17(月) 07:39:04
>>190
requireだけですべての例外を補足できる方法は、おそらくない
明示的にbegin - rescue - endするしかない

>>191
>require 'foobar' でどうにかするって事が目的なら
>例外を発生させてるメソッドを上書きする方がよくね?
どこで例外が起きた場合でも補足できるように、ってことなんだろう
0193デフォルトの名無しさん2007/12/17(月) 12:09:07
>>188
pの数は新しいほど大きいから、新たにダウンロードするなら
一番大きいruby-1.8.6-p111-i386-mswin32.zipでいいよ

初学者向けで1.9.0の扱いを説明してるページは少ないな
0194デフォルトの名無しさん2007/12/17(月) 12:53:29
誰もが、よもや初心者が 1.9.0 に関心を持つとは思っていなかったからではないかな。
でも、こう立て続けに 1.9.0 ではまる初心者が出てきてるのをみると、最近何かあった?
0195デフォルトの名無しさん2007/12/17(月) 13:18:15
私も初心者ですが、1.9でのパフォーマンス向上に、かなり
魅かれてはいます。

ttp://journal.mycom.co.jp/news/2007/12/03/010/index.html
ttp://www.atmarkit.co.jp/news/200709/07/yarv.html
0196デフォルトの名無しさん2007/12/17(月) 13:22:41
初心者なのにパフォーマンスを気にしてるの?
0197デフォルトの名無しさん2007/12/17(月) 13:37:18
パフォーマンス気にするのは良いけど、代償が大きすぎる。
それでハマってもここに質問しにくるのはやめてほしい。自己責任で頼むよ。
0198デフォルトの名無しさん2007/12/17(月) 13:43:32
遅い遅いと言われ続けてきた反動かな?
マスコミに煽られるとナ‥‥
0199デフォルトの名無しさん2007/12/17(月) 14:04:39
>>196
というか、そういう内容の記事によってRubyの露出が増えていて、
それによってRubyという言語に興味を持つ人間が増えているんだろう。
「パフォーマンスに興味を持つ」のと「パフォーマンスを大々的にアピールする記事の連発を通して
Rubyに興味を持つ」のはまるで別物で、増えているのは後者だと思うよ。

ただ、興味のきっかけが「1.9.0はすごいよ!」っていう記事である以上、まぁ普通そのバージョンを
入手しようと思うわけで、そこんとこでこのような流れが生まれるんだろうね。
「ただし初心者にはおすすめできない」みたいな注釈が、速度絶賛系の記事にあればいいんだけど、
Ruby記事なんて大体が宗教冊子みたいなもんだから、そういうことは書いてあるはずもなく。
0200デフォルトの名無しさん2007/12/17(月) 14:14:12
パフォーマンスが悪い言語なんて誰も興味を持たないからだ
0201デフォルトの名無しさん2007/12/17(月) 14:15:18
まぁ初心者じゃない人が1.9を知らないってだけなんだけどな
0202デフォルトの名無しさん2007/12/17(月) 14:16:14
ここに質問しにくるのはいいんじゃないの?
その分ruby-listのノイズが減るじゃん。

「hogehogeがruby-1.9で使えなくて困ってます(><)」
って言われたら
「そうねえそれは困りましたねえ(・∀・)ニヤニヤ」
って言えばいいんだし。
0203デフォルトの名無しさん2007/12/17(月) 14:30:05
本スレはそれでいいけど、初心者スレでその回答はどうかなぁ。
卒業した学校の部活に、下手糞なアドバイスをしに来る痛い先輩みたいでさ。
0204デフォルトの名無しさん2007/12/17(月) 15:48:14
「1.9はサポートできないから初心者は使うな、使い続けたいならここに来るな」

でよろしいかと
1.9の質問受け付けるのは専用スレがあってもいいくらいのめんどくささだぞ
0205デフォルトの名無しさん2007/12/17(月) 16:33:11
正式版はクリスマスにでるんだっけ?
文字コードにあわせて1文字 not 1byteになるととっつきやすいんだけどなぁ
0206デフォルトの名無しさん2007/12/17(月) 16:37:02
->
記法にははやいとこ死んでほしい。Yarvは歓迎するけど、Ruby2 featureには
要らないものが多いよ。おいらはただ、速いC rubyが欲しいだけなんだ。
0207デフォルトの名無しさん2007/12/17(月) 16:40:09
そういう話は本スレでどうぞ
0208デフォルトの名無しさん2007/12/17(月) 19:12:41
HTMLの実体参照を戻すのに
CGI.unescapeHTML(string)よりいいのありませんか?
♥(ちゃんと見えてるか?)
とかも戻せるのが欲しいです。
0209デフォルトの名無しさん2007/12/17(月) 19:13:11
&heartsでなくて♥です。
0210デフォルトの名無しさん2007/12/18(火) 13:44:29
>>208
cgi.rbのunescapeHTML()をコピって、heartsを追加。
かっこわるいけど。
0211デフォルトの名無しさん2007/12/18(火) 14:09:41
>>208
よく考えたら、どの文字コードに変換するのか指定できないといけないね。
'&' や '<' はASCIIだから文字コード気にしなくていいけど、&hearts;はそうもいかないな。
$KCODEみて変換すればいいのかな。
0212デフォルトの名無しさん2007/12/18(火) 14:17:40
>>211
cgi.rb 見るとそうなってる ($KCODE が UTF-8 のときのみ変換) けど、
本当は $KCODE ではなく出力する対象のドキュメントに合わせるべきだよね。
0213デフォルトの名無しさん2007/12/18(火) 18:40:43
"を単なる文字として扱うにはどうすれば良いでしょうか?
0214デフォルトの名無しさん2007/12/18(火) 18:52:36
前スレ492あたりでCGIフレームワークはないかって話があったけど
こんな記事見つけた

「忘れられたRubyのWebフレームワーク」
http://www.infoq.com/jp/news/2007/11/forgotten-ruby-web-frameworks
0215デフォルトの名無しさん2007/12/18(火) 19:10:34
>>213
'"'
"\""
でいいのかな?
0216デフォルトの名無しさん2007/12/18(火) 19:12:33
シングルクォートな文字列にする
'ダブルクオートは"です'

ダブルクオートの中ならバックスラッシュでエスケープする
"ダブルクオートは\"です"

好きなほう使え

>>215
よいかと
他にもなんとかする方法はある気はするがそんなもん覚えなくてよし
0217デフォルトの名無しさん2007/12/18(火) 19:25:03
ありがとうございます
0218デフォルトの名無しさん2007/12/18(火) 22:36:43
引数の参照渡しってできないんだっけ?
0219デフォルトの名無しさん2007/12/18(火) 22:57:16
できない


と思っていただこうッ!

真似はできるけど肝心なとこで動作が違うからRuby式の別物として理解したほうがよい
0220デフォルトの名無しさん2007/12/18(火) 23:55:20
>>219
え、やっぱそうだったか。

ちょうど参照渡ししたいとこがあったんだけど、別の方法を考えるとするかな。
0221デフォルトの名無しさん2007/12/18(火) 23:59:19
具体的にどういう動作を望んでるのか説明するとアドバイスがあるかも

ないかも
0222デフォルトの名無しさん2007/12/19(水) 00:00:00
>>210,211,212
サンキュー。
とりあえずぶち当たったもんを処理する事にします。
0223デフォルトの名無しさん2007/12/19(水) 05:02:11
>>218 >>220
実際はほとんど全部が参照渡しなんだが、代入した時点で参照が外れる。
だから、参照渡しみたいな動作をさせるなら、

・配列として渡し、配列の要素を変更する。
・オブジェクトとして渡し、値を変更するメソッドを呼び出す。
・そもそもRubyの場合、return a,b,c と複数の値を返せるのでそれほど必須ではない。

とまあ、よく使われる方法はこんなとこかな。
俺的には2番目か3番目の方法をオススメ。
0224デフォルトの名無しさん2007/12/19(水) 05:09:22
適当なこと言わないように
0225デフォルトの名無しさん2007/12/19(水) 05:17:24
遠慮せず訂正してもいいんだよ
0226デフォルトの名無しさん2007/12/19(水) 11:04:15
配列などに、「もし何か入っていたら」を記述するとき、
if ! obj.empty? や unless obj.empty? みたいに、
否定的な表現をしなくちゃいけないのが抵抗あるんですが、
何かうまい記述はありますか?
0227デフォルトの名無しさん2007/12/19(水) 11:09:27
obj.exist?
みたいなの作っちゃえば?
0228デフォルトの名無しさん2007/12/19(水) 11:20:37
うーん、そうですね。ただ、 exist? は名前がいまいち・・・(私も思い付きません)
0229デフォルトの名無しさん2007/12/19(水) 11:28:19
contain?とか
0230デフォルトの名無しさん2007/12/19(水) 11:28:19
irb> puts '何か入ってます' if [].any?

irb> puts '何か入ってます' if [nil, nil, false].any?

irb> puts '何か入ってます' if [''].any?
何か入ってます
0231デフォルトの名無しさん2007/12/19(水) 11:55:26
size > 0 でいいじゃん
0232デフォルトの名無しさん2007/12/19(水) 12:06:25
それは [nil].size が 1 であることを許容できるかどうかにかかってるな

つか、「何か入っている」のではなく「空ではない」と考えるようにしたほうがいい
empty が通常の状態
0233デフォルトの名無しさん2007/12/19(水) 12:42:55
文字列から連続する英字を取りたい

str = "Java1.5と日本語は除外 rubyperl,ruby 1.9ああああpythonいいい"
#なんらかの処理
["Java"、"rubyperl"、"ruby"、"python"]
0234デフォルトの名無しさん2007/12/19(水) 12:52:23
str = "Java1.5と日本語は除外 rubyperl,ruby 1.9ああああpythonいいい"
p str.scan(/[a-z]+/i) #=>["Java", "rubyperl", "ruby", "python"]
0235デフォルトの名無しさん2007/12/19(水) 21:36:52
警告に関して質問させてください

文字列をパースして処理を行う、小さなライブラリを作っているのですが
途中でパースできない行を見つけたときに警告を出したいと思っています
このとき、以下のどの方法を取るべきでしょうか?

1. 常に$stderrに警告
2. 冗長モード($VERBOSE)なら$stderrに警告
3. デバッグモード($DEBUG)なら$stderrに警告
4. 冗長モードかデバッグモードなら$stderrに警告

冗長モードとデバッグモードの使い分けが今ひとつ分からず、悩んでいます
0236デフォルトの名無しさん2007/12/19(水) 21:45:20
3
0237デフォルトの名無しさん2007/12/19(水) 21:48:25
警告の内容にもよるかもしれん
適当な自作の例外を発生させたほうが好ましい場合もあると思う
0238デフォルトの名無しさん2007/12/19(水) 22:09:14
>>235
パーサでは常に例外を発生させる、でいいと思う。
それをmainプログラムでキャッチして、常に$stderrに表示。
パースできないデータなら、そうするべき。
警告を使うなら、警告文を表示するけど処理は継続する場合じゃないかな。
例えば古い書き方を使っていて、今のパージョンではまだサポートするけど将来は廃止する予定だから新しい構文を使ってね、という場合にwarn()で警告する。
パースできないというのは致命的だから処理を継続すべきでなく、よって例外を発生するのが自然。
0239デフォルトの名無しさん2007/12/19(水) 22:12:41
>>235
デバッグモードと冗長モードの使い分け:
* ユーザに表示するデータは冗長モードで出力
* 開発者だけに限定するならデバッグモードでのみ出力

冗長モードはユーザのため、デバッグモードは開発者のため、という理解でいいんじゃね?
0240デフォルトの名無しさん2007/12/19(水) 22:36:44
IO::ioctlの使い方がよくわかりません。

Debian Linux 2.6.18-4, ruby 1.8.5 (2006-08-25)
な環境で

#!/usr/bin/env ruby
require "socket"

SIOCGIFINDEX = 0x8933
s = UDPSocket.open()
puts s.ioctl(SIOCGIFINDEX, "lo")

というスクリプトを実行すると、「0」が帰ってきます。
lo以外の(eth0などの)インターフェイス名を指定しても、全て「0」が
帰ってきます。

何か使い方を間違っているのでしょうか。
教えてくださいませ。
0241デフォルトの名無しさん2007/12/20(木) 00:46:11
WindowsのEmacsでinf-ruby使うと、入力がエコーバック
されるのですが、そういうものなのでしょうか?
抑止する方法ってありますか?

---
irb(main):001:0>1+1(return)
1+1
2
irb(main):002:0>
---

コマンドプロンプトからirbを起動した場合は、
エコーバックされません。
UbuntuのEmacs上ではエコーバックされないで
値だけが表示されました。

Ruby 1.8.6
Emacs 22.1
Meadow 3
WinXP SP2
02422352007/12/20(木) 21:08:02
ありがとうございました。
パース失敗が致命的ではなく(エラーは単に読み飛ばすだけ)
エラーの内容を、ユーザーに表示する必要がある処理のため
$VERBOSEで判定することにします。
0243デフォルトの名無しさん2007/12/21(金) 12:34:35
質問です。
windowsでRuby使ってるんですが、コマンドプロンプトで指定したテキストファイルを読み込ませたいです。
f = open("SA.txt")
reviewbody = f.read
reviewbodyは処理対象みたいな
このSAの部分をコマンドラインから入力できるようにしたいんですが、どうすればいいでしょうか?
0244デフォルトの名無しさん2007/12/21(金) 12:53:10
puts 'なにか入力してください'
text=STDIN.gets.chomp
puts "#{text}が入力されました"


なにか入力してください
なにか
なにかが入力されました
0245デフォルトの名無しさん2007/12/21(金) 12:56:49
>>244さま
ファイル名をコマンドプロンプトから指定するという意味です。
0246デフォルトの名無しさん2007/12/21(金) 12:58:03
「ファイル名をコマンドプロンプトから指定する」とはどういう意味?
0247デフォルトの名無しさん2007/12/21(金) 13:03:51
>>245
> cat argv.rb
puts "引数の一つ目は#{ARGV[0]}です"
puts "引数の二つ目は#{ARGV[1]}です"

> ruby ./argv.rb いっこめ ふたつめ
引数の一つ目はいっこめです
引数の二つ目はふたつめです
0248デフォルトの名無しさん2007/12/21(金) 13:16:02
>>245
>>247 のが良いと思うけど、 ARGF を使うという手もある。
0249デフォルトの名無しさん2007/12/21(金) 13:19:33
>>247さま
ちょっとやってみます。
>>246さま
Getsでとってきたら無理だったんですが、要するに
f = open("SA.txt")
reviewbody = f.read

だったらSA.txtをreviewbodyとしてyahooの形態素解析にかけてるんですが、そのSA.txtをgetsみたいにとってこれたらなぁって思ってます。
指定できないといちいちソースにファイル名書き込んだりして変更しなきゃいけないので・・・
それを何とかしたいワケです。
0250デフォルトの名無しさん2007/12/21(金) 14:37:33
これは何度でも言うが、そういうのは試してから書き込め
0251デフォルトの名無しさん2007/12/21(金) 14:41:05
Mac OS X 10.5 Leopard (ruby 1.86 (OSに標準添付) )に
mysql-ruby 2.7.4 をインストールしたいのですがうまくいきません。
ちなみにMySQLは、5.0.45 (Mac OS X 10.4 (x86) package format )です。

ruby extconf.rb --with-mysql-include=/usr/local/mysql/include/
--with-mysql-lib=/usr/local/mysql/lib/ --with-mysql-config
checking for mysql_ssl_set()... no
checking for mysql.h... yes
creating Makefile

ここまではうまくいってる??みたいですが、次のMakeで
0252デフォルトの名無しさん2007/12/21(金) 14:41:40


make
gcc -I. -I. -I/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin9.0
-I. -DHAVE_MYSQL_H -I/usr/local/mysql/include -Os -arch i386
-fno-common -fno-common -arch ppc -arch i386 -Os -pipe -fno-common -c
mysql.c
cc -arch ppc -arch i386 -pipe -bundle -o mysql.bundle mysql.o -L"."
-L"/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib" -L.
-arch ppc -arch i386 -lruby -L/usr/local/mysql/lib -lmysqlclient
-lz -lm -lpthread -ldl -lm
ld: warning in /usr/local/mysql/lib/libmysqlclient.dylib, file is not
of required architecture
Undefined symbols for architecture ppc:
〜〜〜〜〜〜〜〜〜〜〜〜〜((中略))〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
d: symbol(s) not found for architecture ppc
collect2: ld returned 1 exit status
lipo: can't open input file:
/var/folders/Zl/ZloNZj5oH0WIO5VZfrwj2k+++TI/-Tmp-//ccQ3tHRa.out (No
such file or directory)
make: *** [mysql.bundle] Error 1

となってしまいます。いろいろググってみたのですが解決方法がわかりません。
どなたかお知恵をお貸ししていただけないでしょうか?
■ このスレッドは過去ログ倉庫に格納されています