1 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 17:31:07 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 ★注意★ Ruby 1.9.1 は初心者には時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。 (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に未対応であるためです。) なお 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 で勉強すれば将来スムーズに 1.9 系に移行できるでしょう。 関連スレやURLは>>2-5 あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
485 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:00:29 ] >>483 do はブロック開始の(予約)文字列 メソッドに引数を渡すときの ( と ) それそのものがメソッドではないのとおおむね同じ理屈 文字列だからたまたま読めるだけで、別に <<<<<< >>>>>> でもよかった
486 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:06:57 ] >>481 eachメソッドがハッシュに対して使われたときは、その引数は |key,value|という形になるわけですね。 >>482 申し訳ないです。 >>483 481の結果からすると、each(すべての要素にたいして)do以下を行えという ことだと思いますが、メソッドでないならdoはなんだろう。
487 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:14:30 ] >>481 実行してみました。 undefined local variable or method `code_words' for main:Object (NameError) というエラーが出ました。code_wordsが定義されていない?
488 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:20:19 ] 初心者が最初にwhyの感動的rubyガイドで勉強するのは 不適切だったりしますか?
489 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:44:46 ] >>488 こっちのが無難 www1.tf.chiba-u.jp/~shin/tutorial/index.rb
490 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:56:55 ] >>486 だから、doは予約語だってば。 ifがメソッドでないのと同じ。
491 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:12:37 ] > >>483 > 481の結果からすると、each(すべての要素にたいして)do以下を行えという > ことだと思いますが、メソッドでないならdoはなんだろう。 そのeachはなんですか? すべての要素にたいして、というおまじないか何かですか? プログラミング言語はそういうふわふわとしたものではないです。
492 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:21:35 ] おまいら、ここは初心者スレだ。 初心者っつーのはとんでもない思い込みや勘違いをしていることも多いんだから あたたかい目でみてください。 >>486 >メソッドでないならdoはなんだろう。 すでに指摘があるように、doは構文を表す予約語のひとつです。 while i < 10 do print i end では、whileやdoやendが予約語です。なおこの場合ならdoは省略可能。 [1, 2, 3].each do |x| puts x end なら、each や puts はメソッド名、do と end は構文を表す予約語。
493 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:39:54 ] do が何だかわかりませんレベルの人には来て欲しくないな 質問するなら最低限、言語の基礎は身に付けておいて欲しい これくらいは自力で学習、調査しておくのが質問する側のマナーだろう
494 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:42:28 ] そもそも、動作としては arr.each(ブロック) なんだよ オブジェクト arr の インスタンスメソッド each に引数でブロックを与えている ただ、便利なブロックがこのままだとたいそう使いにくいので [1,2,3].each(do |e| p e endのブロック、ただし実行できるならこのブロックを要素ごとに実行すること) といちいちテクニカルにする代わりに [1,2,3].each do |e| p e end と平易に書くように Ruby を作ったのだ このへんの動作が気になるなら my_block = lambda do |e| p e end [1,2,3].each(&my_block) とでも書いてみるといい
495 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:58:26 ] >>493 思考過程の筋が見えるなら特に問題はないと思われ まあ、つまりは「勝手に省略せず詳しく書け」ということでしかないわけだが 若干のエスパー能力が要るから万人には勧められない
496 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 19:29:15 ] 理解としては>>486 でまったく問題ないのになんでこんなことになってるんだ
497 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 20:58:03 ] 申し訳ありません。whyのrubyガイドが 最初の方は、とてもわかりやすかったのです。 読み進めていると、コードが出てきて、ruby ファイル.rbと実行しても エラーが出たりするようになり、僕はアホなのだろうかと思って質問しました。 初心者向けとして適当でないようなので、もうすこし文法を押さえながら 読んでみようと思います。ありがとうございました。
498 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:29:17 ] >>493 >do が何だかわかりませんレベルの人には来て欲しくないな おまえは>>1 を声に出して10回よめ。 この程度が我慢できないやつはこのスレくるな。
499 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:41:55 ] でも>>493 程度が我慢できない人は2chに来るべきじゃないよね。
500 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:45:19 ] せめてネタ系のスレで頑張ってもらえるとありがたいんだけど そうもいかないんだろうね
501 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 00:48:12 ] rubyに限らず初心者スレッドは全てを受け入れる糞溜だと思ってる
502 名前:デフォルトの名無しさん [2009/10/02(金) 05:22:34 ] 日本語の文字抽出でうまい方法が分からず困っています。 抽出元のサンプルは下記の通り 11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69 上記サンプルのうち、「この、文字列を抽出したいんdesu.」の部分を抽出したいんです。 抽出対象:日本語、句読点、日本語文字列に付随する半角英数字、半角記号("テスト."等。空白類を挟んだら不要対象とする) 不要対象:半角英数字、半角記号、空白、"○"、"×"等 現在のコードは下記の通り while line=gets if /\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*/ =~ line if $1 != " " print "日本語抽出:", $1, $2, $3,$4,$5,$6,"\n" end end end 実行結果↓ 日本語抽出:○ × ::この&カ字列を抽盾オたいん (続きます)
503 名前:デフォルトの名無しさん [2009/10/02(金) 05:25:20 ] (続き) if文の条件が大変なことになっているのは if /(\W+)/ =~ line としてしまうと最初の"○ ×"のみ抽出して終わってしまうためです。 プログラムとして力技で美しくないのは分かっています。 また、日本語が文字化けしてしまっています・・・文字コードの問題だろうとソース先頭に#!ruby -Ksを足してみましたが、 空白類の扱いが変わった?のと記号以外の文字類が表示されなくなりました。 抽出部分を綺麗にするにはイテレータで回せば良いかなと思っています。 →一文字ずつチェックしようと思いましたが、String#each_byteが全半角を問題なく捌けるのか問題が・・・ 問題をまとめると 1:文字列の中から上記抽出対象のみ抽出したいが、力技で汎用性がないので改善したい 2:文字化けしてしまうが原因、対策が分からない となります。 OSはWindows XP SP3でRubyのバージョンは1.8.6です。 長文乱文で分かりにくい質問となってしまい申し訳ありませんが、よろしくお願いします。
504 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 05:32:32 ] まあrubyはメゾットの様なものが多いのも事実だけどな。 そこらの統一性の無さは、原理追求派よりも教祖信仰派のほうが多いってだけじゃないかと。 メゾットだからこうって寄りも、教祖がこう使う様に教えたから深く考えずに同じ様に使うのほうが、良いruby信者に成れる気がする。
505 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 05:36:40 ] irb> s = "11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69" irb> puts s.split[6] この、文字列を抽出したいんdesu. 空白で区切られた7フィールド目という意味ならこれでいいのでは フィールド内に半角空白が混じっても構わないという条件だととたんに面倒になるが
506 名前:503 [2009/10/02(金) 06:02:35 ] >>505 レスありがとうございます。 すみません、確かにサンプルに限定すればそれで解決ですね。 ただ、やりたいのは日本語部分(日本語文字列に付随する記号類、英数字は抽出対象とする)の抽出なのです。 質問の書き方が悪かったのですが、おっしゃる通り、日本語列の中の空白、記号、英数字、 もしくは日本語列の先頭・末尾の半角英数字、記号類は抽出したいんです。 (日本語列と結合していない日本語以外(英数字、記号、空白類)は除外)
507 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 06:13:51 ] 結合ってなんだ?
508 名前:503 mailto:sage [2009/10/02(金) 06:21:11 ] >>507 付随と同義です。ややこしくてすみません。 文字列の結ご・・・連結ですね。すみません。
509 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 06:46:02 ] >>507 おそらく、セパレータとフィールドという概念がないんだと思う だから、元データを作った人の意図を読むことができないし、説明もできてないから俺らもどうにもできん たとえば、俺らは>>502 を見たときに 「番号、マルバツ、マルバツ、英数字、時分秒、英数字、日本語入り文字列、年月日、時分秒、数字」 という空白で区切られた固定の何らかの意味を持った10項目(または年月日+時分秒の9項目)と読むが、 >>503 にとってはおそらくそうではないのだろう ひょっとしたら例示のために出しためちゃくちゃな文字の集まりなのかもしれない 空白の数には全く意味がなく、 形態素解析のように「空白で区切られた、日本語文字を含む文字の連なり」が欲しいのなら split.find_all{|e| <eがShift_JISの日本語文字を含むということ> } とすればよい Shift_JIS (というかたぶん CP932)の日本語文字を含む条件を表す正確な正規表現はどっかから拾え irb> s = "11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69" irb> puts s.split.find_all{|e| /[\xa1-\xdf]|[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]/n =~ e}.delete_if{|e| /\A[○|×|△]\Z/s =~ e} この、文字列を抽出したいんdesu.
510 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:01:18 ] >>503 >>509 のようにsplitで配列にしてからfind_allでもいいし 文字列に繰り返し正規表現をしたいのならscanてのもある Array,String,Hash,Enumerableあたりのメソッドは軽くリファレンスに目を通しておくといいよ へぇこんなのあるんだっていう程度でも使う時に思い出せる
511 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:02:44 ] -Ksを指定するとShift_jis全角文字も\wでマッチするようになる
512 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:18:29 ] >>511 「も」では駄目だろ 英数字記号だけの場合はマッチしてはいけない irb> /\w/ =~ "あういえ".tosjis nil irb> $KCODE = 's' irb> /\w/ =~ "あういえ".tosjis 0 irb> /\w/ =~ "a" 0 全角文字(と場合によっては半角カタカナ)にのみマッチする正規表現か、 英数字記号だけにマッチして全角区域に誤爆しないという正規表現が必要
513 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:32:08 ] >>512 ああすまん-Ksにして結果が変わった原因ってことで書いただけなんだ
514 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:09:04 ] ruby って、ライブラリやクラスメソッドの使い方を 覚える言語ってことですか?
515 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:10:33 ] オブジェクト指向言語は大体そんなもんだ
516 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:26:59 ] 大抵のプログラミング言語において、文法なんて数時間で全部理解し終えるもんだからなあ。 後は当然ライブラリの使いこなしってことになるだろう。
517 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:32:04 ] クラスメソッドよりもインスタンスメソッドのほうが多いよ! とかそんな話を 別に覚えなくてもいいけど、その場合はライブラリに相当するものを全部自力で作ることになる どっちか気に入ったほう選んでくれ
518 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:13:39 ] Windows版のRubyって、OpenSSLも使えるんでしょうか。 知っている人がいたら教えてください。
519 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:22:50 ] パッケージ次第だった気もするけど、基本的に使える
520 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:24:35 ] >>518 推奨されてるパッケージでインストールする限りは使えるはず 他の人のWindows版でも絶対に使えるとは限らないのは他のOS版のRubyと同じ
521 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:42:25 ] ありがとうございます。 RSAの仕組みを勉強するのにRubyを使うことにします。
522 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 14:40:48 ] rubyでは、値がすべてオブジェクトということは 1という数値や"太陽パクパク"という文字列や、それらを代入した number,sun_eaterといった変数もオブジェクトということですか? number = 1 sun_eater = "太陽パクパク"
523 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 14:59:20 ] >>522 整数とかはさすがに高速処理するように小細工を施してはありますが、 それらも含めオブジェクトは全部クラスのインスタンス(=オブジェクト)です irb> p 1.class Integer irb> p "太陽パクパク".class String 変数はオブジェクトについたラベルです ラベル名 → オブジェクトID というような対応表を Ruby が管理していて、 該当ラベルの変数が呼ばれたときにはその表の対応を参照して該当オブジェクトが使われます 変数というハコが入れ物オブジェクトとして存在するわけではありません irb> p 1.object_id 3 irb> p "太陽パクパク".object_id -605838888
524 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:06:21 ] >>522 >rubyでは、値がすべてオブジェクトということは >1という数値や"太陽パクパク"という文字列や、それらを代入した >number,sun_eaterといった変数もオブジェクトということですか? 数値や文字列もオブジェクト。 ただし、「変数」はそれらオブジェクトを格納するもの(あるいはオブジェクトとひもづけるもの)であって、オブジェクトそのものではない。 そのへんは他の言語でも同じ。
525 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:08:38 ] >>523 変数はオブジェクトじゃなくラベル。 あやうく、間違った認識で通り過ぎるところでした。 ありがとうございます。
526 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:10:25 ] >>524 他の言語でも同じなんですね。ありがとうございます。
527 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:50:19 ] C++、Perlでは宣言された変数自体がオブジェクトの実体であるケースもあるけどね と、話をややこしくしてみる
528 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 17:55:56 ] 他言語がどうであれ、Rubyにおいて変数は箱ではなくラベルなのは間違い無い 沢山あるオブジェクトの中のいくつかに名前を付けるのが変数 1つのオブジェクトに複数の名前があることも珍しくないし 無名のまま役割を終えるオブジェクトも存在する
529 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 17:58:09 ] だいなみっくえいりあしんぐ
530 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:04:25 ] 2chまとめエディターを作っているのですがどうにもこうにもならなくなってしまったのでヒントをください。 やろうとしていることは DATの中身をコピペで入力 ↓ 下ごしらえの置換 アンカー順に並べ替える チェックボッックスによるdivのclassの追加(文字色を変えたり大きくしたりするため) ↓ ソースを出力 というものです。 ひとまずここまでひとりでつくりました。 tomiya.bne.jp/cgi-bin/upup/src/myg_l2344.zip.html やっていることは 簡単な置換とレスに1〜1001までの番号をハッシュとして付ける ことまでです。 教えて欲しいことは アンカー順に並べ替える方法 本文をスキャンして「>>○○」を抽出しハッシュのkeyに代入? チェックしたレスのみ出力する方法 チェックボックスでdivのclassを追加 <div class="res">を<div class="res aka">や<div class="res aka deka">などに置換? です、見当がつきそうな方はどうかご教授ください。
531 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:26:40 ] オブジェクトについて、もうひとつ質問です。 class Gohan def caree print "今日のご飯はラーメンだ\n" end def natto print "朝飯は納豆だ\n" end end yuhan = Gohan.new yuhan.caree asamesi = Gohan.new asamesi.natto この場合、yuhanやasamesiがオブジェクトになるのでしょうか?
532 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:29:10 ] ARGVで漢字のフォルダ名が展開できず困っています。 英字だと >ruby -e "p ARGV" hon/* ["hon/新規テキスト ドキュメント.txt"] となってうまくいきますが、漢字だと >ruby -e "p ARGV" 本/* ["本/*"] となってしまい、フォルダ内の新規テキスト ドキュメント.txtが展開されません。 どうすれば展開できるかご教示ください。 OSはWindows XP SP3です。 >ruby -v ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]
533 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:31:30 ] Ruby標準のCGIクラスって、どれぐらいの大きさのデータを受け取れるのでしょうかね? DBの内容をWeb上からバックアップ(DL)したり、復帰させたり(UP)するシステムを考えてるのですが バックアップするときは、ストリーミングで流せばいいような気がするけど 復帰させるときは、大量のデータが一度メモリに溜め込まれる気がします たとえば、サーバの実メモリを超えるようなデータを受け取ったときに処理できるのか?っていうのが疑問です。 また、なにか回避策が有るのでしたら、教えてください。
534 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:35:45 ] ワイルドカードの展開ってシェルの役割じゃ・・・? と思ったらWinではやってくれないのか
535 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:39:19 ] >>531 >>523
536 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:42:14 ] >>532 ARGV の処理は環境依存 コマンドプロンプトで DIR 本/* とやって、望みの出力が得られなければ ARGV では無理というかコマンドプロンプトの使い方の知識が足りない
537 名前:532 mailto:sage [2009/10/02(金) 18:50:17 ] >>536 それはうまくいきます。/の代わりに\ですが。 >dir 本\* ドライブ D のボリューム ラベルは以下略 >ruby -e "p ARGV" hon\* ["hon/新規テキスト ドキュメント.txt"] 英字は/でも\でもok >ruby -e "p ARGV" 本\* ["本\\*"] 漢字はどっともだめ
538 名前:532 mailto:sage [2009/10/02(金) 18:55:24 ] 書き忘れ >ruby -e "p ARGV" */* ["hon/新規テキスト ドキュメント.txt", "本/新規テキスト ドキュメント.txt"]
539 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:56:09 ] >>530 #!/usr/local/bin/ruby -Ks class Ch2Thread def initialize(file) @dat = file parse end attr_reader :data, :title, :size def [](v); @data[v]; end def parse @data = Array.new arr = @dat.to_a arr.each_with_index do |res, i| @data << parse_res(res, i) end @title, @size = arr[0].split(/<>/)[-1], @data.size end def parse_res(res, resno) e = res.split(/<>/) d = e[2].split return {:no => resno + 1, :name => e[0], :mail => e[1], :date => "#{d[0]} #{d[1]}", :id => d[2], :be => d[3], :res => e[3]} end end sure = Ch2Thread.new(File.open('./sample.dat').read) puts "Title => #{sure.title}" sure[0..3].each do |res| res.each{|k,v| puts "#{k} => #{v}"} end
540 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:59:22 ] >>532 WinXP SP2 + ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] だけど展開してくれた。なんなんだろうね
541 名前:540 mailto:sage [2009/10/02(金) 19:02:24 ] SP3だった・・・ あとコマンドプロンプトから動かしてる? 専用エディタとかから走らせたりしてると挙動が違ってくるかも
542 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:03:55 ] >>532 ren 本 書 ruby -e "p ARGV" 書/* 1.9のglob周りは多バイト文字に関しては腐ってるね。
543 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:04:15 ] 1.9.1リファレンスより >標準のシェルがワイルドカードを展開しない環境 (Win32)では、Ruby インタプリタが自前でワイルドカードを展開して Kernel::ARGV に設定します。 らしいからできるはずだと思うけど うち(Vista コマンドプロンプト)でも 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]だと 本\* 本/* どっちも認識してくれるけど 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]だとできなくなってるな
544 名前:532 mailto:sage [2009/10/02(金) 19:11:36 ] ご確認いただきありがとうございます。 うちも1.8.7はokでした。 1.9.1で通る漢字もありました。 >ruby -e "p ARGV" ホン/* ["ホン/新規テキスト ドキュメント.txt"] >ruby -e "p ARGV" 川/* ["川/新規テキスト ドキュメント.txt"] >ruby -e "p ARGV" 山/* ["山/新規テキスト ドキュメント.txt"]
545 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:14:53 ] Ruby Freaks Lounge 第8回 Windows版Ruby 1.9で培う危機回避スキル(前編) gihyo.jp/dev/serial/01/ruby/0008 Rubyで日本語ファイル名と聞いた瞬間に悪寒がする漏れは正しかった
546 名前:539 mailto:sage [2009/10/02(金) 19:16:56 ] とりあえずレスの全データを扱いやすい形に整えないと見通し的にどうにもならないような気がしたので、 たとえばこんなクラスを作る 動作は超適当 変数名も適当 レス本文のHTMLタグとかを消したい場合は parse_res のとこで適当に追加してくれ クラスでなくてもでっかいハッシュや配列を作るのでもいいんだけど面倒だったのでクラスにした
547 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:19:00 ] 日本語とかマジで廃止しろよ 100年前に廃止してくれてれば今頃こんな苦労することも無かった
548 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:23:46 ] >>547 PC/AT互換機使うのいますぐやめろ 元凶はそれだ ずっとNECなら日本語処理は完璧だったのだ
549 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:24:14 ] たいした苦労もしてないくせに
550 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:25:48 ] 悪いのはシフトJISだよ 日本語は悪くないよ EUCばんざーい
551 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:29:40 ] もはや現実逃避しかないのか・・・・・・w
552 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:35:07 ] 松江市さんは、rubyのドキュメントをしっかりしたものに してください。
553 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:40:25 ] >>533 >たとえば、サーバの実メモリを超えるようなデータを受け取ったときに処理できるのか?っていうのが疑問です。 添付ファイルデータなら、cgi.rb が一時ファイルに書き出してくれるので、実メモリを超えても大丈夫なんじゃないかなあ。 >また、なにか回避策が有るのでしたら、教えてください。 そのような場合は、cgi.rbを使わず、自前で$stdinからPOSTデータを読み出したほうがいいと思います。
554 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:58:15 ] >>548 78JISに拘泥して混乱を広げた元凶だということも知らずに呑気な馬鹿だ。
555 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:01:03 ] >>542 で必要最低限のことは全部触れられていそうだな 「本」をShift_JISとして見ると2バイト目が { なので、rubyのglob特殊文字になる。 というわけで、1.9では、2バイト目がrubyのglob特殊文字になる文字列をコマンドライン引数に与えると危ない、と。
556 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:04:04 ] 文字のエンコードが1種だけなら問題ないという話だろ
557 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:14:38 ] 勉強せずにスラスラ英語の文書読めるプログラマと、毎日英語と奮闘してるプログラマ どれだけ差が開くと思う? つまり日本がこの業界でアメリカに勝てないのは必然だ
558 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:20:16 ] 単なるrubyのバグの話でしょ
559 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:24:39 ] Rubyに限らず 引数の文字コードって どんなふうに判別するものなんだろう?
560 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:35:10 ] 引数の文字列自体はWindows-31Jにしてくれてるぞ
561 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:35:11 ] インターネット時代なんだしJISで統一すれば何もかもうまく逝ってけどな。 いまからならOSもメールもウェブもUTFで統一。
562 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:42:47 ] 文字コードとかごちゃごちゃし過ぎて分からんから指定できるところはとりあえず全てUTF-8にしてる。 特に問題が起きたことはない。
563 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:43:48 ] Win32で1.9.2プレビュー1をビルドしようとしたができんw clにminiprelude.cがないぞゴルァって言われる あるしちゃんとインクルードパスにも入ってるのに・・・
564 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 01:45:15 ] >>546 おお、ありがとうございます。 しかしこれからどうしたらいいのか全然アイディアが浮かばないんです。 どういう方向性でいけばいいのでしょうか。
565 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 02:06:27 ] >>564 わかんねーときは、わかる機能だけで作ってみるといいよ ゴールを遠くに設定しすぎてるから方向わからないんだよ、チェックポイント作りまくれ
566 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 05:59:16 ] いきなり無茶し過ぎなんだろ。小さい所から順々にステップアップしないと。
567 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:37:28 ] とあるフォルダの中のファイル名をずらーっとデータベースに入れたのは良いんですが、 この後ファイルがそのフォルダに追加されるごとにデータベースも更新したいです。 差分を取る方法を教えてください。
568 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:39:12 ] >> [1,2,3]-[1] => [2, 3] ファイルリスト程度ならオンメモリで余裕だろう
569 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:49:58 ] データベース自体は Ruby 以外を使うか、pstore に保存して cron とかで毎回読んでくれ
570 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 15:23:49 ] >>565 >>566 なるほど、そういう考えもありますね。 もうちょっとこつこつやるべきでした、ありがとうございます。
571 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:30:46 ] requireとかを使って外部のファイルを読み込むときですが main.rb class Main def initialize @foo = Array.new require 'sub.rb' end end main = Main.new [EOF] sub.rb @foo.concat ['hoge'] [EOF] みたいな場合にsub.rbからmain.rbの@fooにアクセスするにはどうしたらいいですか? よろしくお願いします
572 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:40:01 ] rquireは、対象コードをその位置に展開するメソッドではない。 中身が何でも気にしないなら eval File.read('sub.rb') とでも。
573 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:43:37 ] >>571 require はトップレベルにファイルを「追加」する ファイルを物理的に大きな1枚のファイルにする効果しかない(いや物理的って変だが) メソッドの「奥深く」で require しても、クラス定義の外で普通に require したのと何も変わらない それと、Ruby では、単純な行単位の切り取りを行うことはできない 現在のクラスにメソッド定義内で機能を追加するには、たとえば module の include を使う メソッド単位でしか追加できないので、そこは要領よく機能を分ける # sub.rb module Sub def add_hoge @foo.concat ['hoge'] end end # main.rb require 'sub.rb' class Main include Sub def initialize @foo = Array.new add_hoge end end p Main.new.instance_variable_get('@foo')
574 名前:571 mailto:sage [2009/10/03(土) 19:57:00 ] >>572 ,573 レスありがとうございます。言葉足らずですいません・・・ sub.rbにはclassも書いてあるのでその場に展開されるとエラーになります・・・ sub.rbに書いてあるクラスをsub.rb内で初期化してそのオブジェクトをmain.rbの 方に持ち帰りたいです(プラグインシステムみたいな感じ) グローバル変数を使えば出来るようですがあまりスマートじゃない感じですので もうちょっとすっきりする方法があればと・・・ よろしくお願いします
575 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:16:58 ] class Main def initialize(plugin_name) @foo = Array.new require plugin_name plugin_mod = Object.const_get(plugin_name.capitalize) extend plugin_mod do_something end end Main.new('plugin1') # plugin1.rb module Plugin1 def do_something @foo.concat('hoge') end end
576 名前:571 mailto:sage [2009/10/04(日) 15:48:48 ] >>575 extendで何とかなりました ありがとうございました
577 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:06:53 ] ちょっとした質問です。 items.each{ |x| x.destroy } というようなこう全部の要素にたいしてメソッドを呼ぶのを もっと簡単に書く方法があったような気がしたのですが、ご存知ありませんでしょうか? Ruby 1.8.7です。
578 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:09:46 ] &:destroy
579 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:11:34 ] >>578 それだ! items.each(&:destroy) でいけましたありがとうございました。
580 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:21:21 ] 1.8.6 では動かないから配布には注意な
581 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 21:11:40 ] 1.8.6 なんてもう使わない方がいいよ
582 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:36:26 ] >>581 なんで?
583 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:49:02 ] >>581 さんがサーバソフトウェアのリプレースを行ってくれるそうです
584 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:38:28 ] 感謝の印におっぱい見せろ
585 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:39:11 ] ごばくった。すまん