1 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:21:25 ] プログラミング言語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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
684 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 04:05:24 ] >>654 え、うそ!!!1 RubyGemsが遅いのってmswin32版のせいなの??? くっそー今まで散々苦労してきたのにー 確かにcoLinuxとかだとめっちゃ早いと思ってたわ。 mingw版だと早い?、とか
685 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 06:38:43 ] とりあえずgemはバージョンが古かったら サーバ側でバージョンが古いと怒って欲しい
686 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 07:35:58 ] >>685 おう、そういう機能入れたから、rubygem をアップデートしてくれ というわけで鶏と卵だ
687 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 07:43:14 ] >>682 def initialize @select_quests = Array.new ... end def set_select_quests (0..9).each.do |i| quest_number = rand(10) # @select_quests に quests_number が含まれてなかった場合追加する @select_quests << quest_number if @select_quests.include?(quest_number) end end
688 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 08:06:58 ] >>687 のifはunlessの間違いだと思う冬の朝
689 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 20:25:24 ] rubyはwindowsで動かすとどうして遅いの? ずーと前からみたいだけど直すきないの?
690 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 20:28:45 ] 開発者がアウトオブ眼中だから
691 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 20:29:00 ] >>689 なんでWindozeを使ってるの? LinuxやBSDやSolaris使えばいいだけじゃないの? 文句言ってるだけで何も行動しようとしないのはなんでなの?
692 名前:682 mailto:sage [2010/01/15(金) 20:46:00 ] ありがとうございました うまくいきました
693 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 20:46:26 ] >>689 めんどくさいから いやマジで 誰にでも絶対に起こるなら直されると思うんだが実際はそうではない
694 名前:デフォルトの名無しさん [2010/01/15(金) 20:50:00 ] >>689 >>691 みたいな人ばっかりだから
695 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 20:55:02 ] >>693 だよね むしろ嫌がらせっぽい
696 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 21:26:17 ] WindowsOSがやめられないので、ちょっとずつPythonに移行し始めたよ。 既存のクラスにメソッド追加したり、injectとかがちょっと使いづらい以外不満はない。
697 名前:sage [2010/01/15(金) 21:29:39 ] Pythonたんは、純粋なオブジェクト指向じゃないよね。 len() とか気持ち悪い。
698 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 21:37:14 ] >>697 最初はそう思ってたけど慣れればそんなもんかって思えるよ。 あとは、三項演算子やcase文がないのがちょっと残念くらいなもんか。
699 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 21:38:39 ] >純粋なオブジェクト指向 Rubyも「+」とか「end」はオブジェクトじゃないよね
700 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 21:41:20 ] >699 不完全性定理というのがあってだな
701 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 22:19:11 ] 文字列をn文字ずつ&1文字ずつに分割したいのですが x = "ABCDEFGHIJKLMNOPQRSTUVWXY" x = x.scan(/.{5}/) x.collect!{|y|y.scan(/./)} p x =>[["A","B","C","D","E"],["F","G","H","I","J"],["K","L","M","N","O"],["P","Q","R","S","T"],["U","V","W","X","Y"]] みたいに書くと都度、正規表現によるマッチが行われるので遅いです もっと高速に実行する方法があったら教えてください。よろしくお願いします
702 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 22:20:42 ] まあ俺は自分の仕事が片付けばいいだけだから オブジェクト指向の純粋さなんてどうでもいいわ
703 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 22:31:44 ] >>701 x.chars.each_slice(5).to_a とか。 Benchmark.bm で1万回ずつやった時間を比較したら半分弱の時間だった。
704 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 22:37:37 ] >>701 x.split(/.{5}/) x.split(//) がたぶん一番速い これでも遅いという場合はそもそもそんな莫大な配列を文字から作る理由は何というとこから
705 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 23:10:56 ] >>704 そもそも要件を全然満たしてない件
706 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 23:17:57 ] enumeratorと配列の違いって何ですか? なんとなく大体同じもののように思えるんですが
707 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 23:42:36 ] 超巨大な集合から1つずつ取り出そうとしたとき、Enumeratorは全部を 覚えていなくてもいいぞ。 alphabets = %w(a b c d e f g h i j k l m n o p q r s t u v w x y z) alphabets.combination(13).first(5) は造作もないが alphabets.combination(13).to_a.first(5) はたぶんメモリ足りない。
708 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 00:46:48 ] >>706 数えられて、返ってくる順番が保証されないのがEnumerator Enumeratorを継承してるので数えられて、しかも順番情報を保持するようにしたのがArray こう考えるとSetの出番がないんだがまあ誰も覚えてないし誰も使ってないと思うので気にするな
709 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 12:34:07 ] >>701 シングルバイト文字限定でいいのかな? であれば x = "ABCDEFGHIJKLMNOPQRSTUVWXY" res = [[]] x.each_byte do |b| if res[-1] < 5 res[-1] << b.chr else res << [] end end で,どうでしょう?
710 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 14:39:59 ] ruby1.9の正規表現で,\wがマルチバイト文字にヒットしてくれません。 以下のコードはなにか間違っていますでしょうか? # coding: cp932 p "日本語" =~ /\w/s #=> nil 鬼車のドキュメントには\wは多バイト文字にマッチすると書かれているのですが。 ttp://www.geocities.jp/kosako3/oniguruma/HISTORY_5X.txt
711 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 14:44:55 ] \w は Ruby では元々 [0-9A-Za-z_] という意味のメタ文字だったので、 1.9 でもそうなってる。
712 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 14:51:19 ] >>711 Thanksです。 マルチバイト文字を含めた単語構成文字にマッチするナイスな正規表現ってありませんか? あとドキュメントのURLが間違ってました。 ttp://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt
713 名前:710 mailto:sage [2010/01/16(土) 14:58:14 ] 自己レスです # coding: cp932 "日本語" =~ /\p{Word}/s でいけました。
714 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 15:02:56 ] たしか ¥d が漢数字にマッチしてしまって使いにくくなってたので その種のは使い分けるようになったんだっけ?
715 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:22:03 ] >>709 1.9系なら↓でマルチバイトもOK x = 'あいうえおかきくけこさしすせそ' res = [] x.each_char.each_slice(5){|a| res << a}
716 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:29:26 ] これでもできるな x = 'あいうえおかきくけこさしすせそ'.each_char.each_slice(5).map{|a| a}
717 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:32:17 ] Windowsのユニコードのファイル名が扱えるライブラリはありますか?
718 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:33:00 ] >>717 ありません
719 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:38:28 ] いやいやいやいや、直接API呼べば問題ないからさ そういうライブラリがrubygemsあたりにでもないかという話だろう でもこれで困るの日本人とかだからなー
720 名前:701 mailto:sage [2010/01/16(土) 18:50:38 ] レスありがとうございます >>703 の方法が一番早いようなのでこれを使わせてもらいます
721 名前:デフォルトの名無しさん [2010/01/17(日) 10:37:45 ] 皆さんはRubyのコードを何で書いてるのでしょう? やっぱり、Emacs or vim? 補完が効くのが良いのですが・・・・
722 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 10:48:27 ] Emacsが無難ということに一応なってはいる 適当な統合環境が快適に動作する環境なのなら、エディタ部のコード書きの補完機能だけ使うのも悪くはない Emacsを一度も使ったことがなくて基本キー操作から覚えなければならないというのだとすれば尚更 Emacsが好まれてるのはエディタの軽さの範疇を実際上は超えてないというのが大きい もしEclipseやNetBeansが超サクサク動作だったならEmacsは時代遅れ度を2段階くらい上げていたはず
723 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 11:02:32 ] Emacsは現代的なIDEが提供するところの補完機能を厳密にはもってない …まあ、実用上はそれほど困らないが
724 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 11:35:27 ] 拙者は秀丸でござる。 感謝の意を込めてちゃんと送金したでござる。
725 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 11:35:48 ] Emacs で指がつったら vim も試してみてね by vim厨
726 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 11:46:52 ] >>721 主にNetBeans使ってる。IDE厨なのでw ただし、NetBeansの最新の6.8はいろいろとバグが・・・
727 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 11:57:45 ] 俺もいわゆるスクリプト程度しか書かないからEmacsで十分だな でもたしかにIDEがエディタ同様に軽ければそっち使うかも
728 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:36:38 ] 通常のエディタでは慣れてくると物足りない(プログラミング初心者は補完のないエディタでやること) IDEはおおむね重いし遅いしプロジェクトとかそんなのが必要な大作ばかり作るわけじゃないから邪魔 というところにすこんと入るのがEmacs 全部できるが余分で煩雑で重い、というものを使うよりは、 やや足りなくて手作業が入るが軽快、のほうを選ぶ人は意外と多い
729 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:17:32 ] emacs自体あんまり使わないんだけど、ショートカットキー一発で 全体を整形&フィリング(emacsではこういうのかな)できる設定ないかしら。
730 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:20:51 ] あるお。 俺はCtrl-x hとかしたあと、Ctrl+Alt+\を押してる。 フィリング?は知らんけど。
731 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:20:54 ] 結局>>717 は無いの?
732 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:21:05 ] class C def hoge とても長いメソッド... local_var = value #<= ここだけを書き換えたい ... end end メソッド定義内のローカル変数たった一行を書き換えたいんです。 とても長いメソッドなので,class_eval{def...無意味なコピペ...end}をしたくありません。 スパッと書き換えることはできませんか? とりあえずSCRIPT_LINES__とripperを使えば20行くらいでできるのですが, もっとストレートな方法があるかもしれないと思い質問しました。 ちなみにbindingを使った実験には失敗しました。 よろしくお願いします。
733 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 14:05:33 ] >>731 本スレ行って聞いてみたら
734 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 14:22:30 ] Emacs が軽快とか隔世の感、とか言うのは多分年寄り。
735 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 14:32:07 ] 今は通信速度が速いから、Emacs も簡単にダウンロードできる。 昔はフロッピーで小分けにして、配布してたな。
736 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 14:36:14 ] >>731 Perlの↓相当がgemにあればいいんだろうけど perl-users.jp/articles/advent-calendar/2009/hacker/20.html いまgemでサーチかけた感じだとなさそう 必要なら↑を参考にしてRubyにportしたら?
737 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 14:46:29 ] >>731 1.9.2で扱えるようになるかも、ってことらしい blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/45826
738 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 14:54:30 ] >>731 >>736-737 あれ、WindowsだとUNICODEファイル名ダメだったのかー gemでモンキパッチみたいに簡単にWindowsのときだけOKにできるのとかあったら便利そうだね。 システムの根底だから難しいのかね
739 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 20:48:07 ] >>736-738 ありがとう。だが初心者にはハードル高すぎ 1.9.2に期待しまつ。いつごろ出るんだろ?今年の春頃?
740 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 20:52:56 ] 一応「もう出てる」レベルではあるんだが、Windowsでは自力でソースからコンパイルしないといかん rubygemsとかも未対応で動作しない可能性も大きい しばらく前の1.9.1状態 来年くらいには使える状態になってるんじゃないかなあ
741 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 21:21:56 ] なんか直接いじればどうにかなりそうな気はするんだけどねえ
742 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 21:54:31 ] すいません、これ↓を使いたいんですが、何から始めればいいのか教えてください。 ttp://gist.github.com/211635
743 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 22:12:49 ] >>730 フィリングってのはこういうの。文章の段落内でESC qでできる。 # ながーーーーーい説明文菜がーーー否がーーー否がーーーーーーーーーーーーーーーーーーーーい ↓ # ながーーーーーい説明文菜がーーー # 否がーーー否がーーーーーーーーー # ーーーーーーーーーーーい んで、ソースコード全体を一発で整形&フィリングしたいのんよ。ruby-modeで。
744 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 22:20:06 ] >>742 見てわからんのならスクリプトがすこし違って詰まったときの対処も自力で全然できないということだから 素直に Ruby の勉強を進めたほうがいいような気がしないでもない 前情報として、Ruby の知識が全然ないのなら使えないよ MySync GoogleContacts でぐぐると唯一出てくるから、 これをしたい場合は Ruby 上でこれを動かすしかないわけだけど、 まったくの一見さんが使えるようなクオリティにはそもそもなってない を踏まえて Ruby を適当にインストール、URL の Download からダウンロードして展開して、 au2gcontact.rb をてきとうなとこにコピー その後、au2gcontact.rb 自身のファイルの文字コードを Shift_JIS というか CP932 に変換 MySync が吐き出したエクスポートの CSV(Shift_JISに変換済)を第 1引数に、 GoogleContacts に食わせたいファイル名を第 2引数にして、 ruby au2gcontact.rb mysync.csv output.csv と実行 output.csv は ShiftJIS(というかCP932)だが、 これがそのまま GoogleContacts にでインポートできるかどうかまでは知らない
745 名前:742 mailto:sage [2010/01/17(日) 22:53:26 ] なんかよくわからんまま試行錯誤したら一応の目的は達しました。ありがとうございました。以下俺メモです。 rubyをインストール。 ソース(っていうのかな?)をメモ帳にコピペ。拡張子を.rbに変える。 au2gcontact.rbとaddress.csv(←LismoPortが吐き出すやつ)とgcontact.csvをC:\Documents and Settingsに置く。 コマンドプロンプトからruby au2gcontact.rb address.csv gcontact.csv 出てきたのをgmailにインポートでおk。 いやーすごいですね。感動しました。ほんとありがとうございました。
746 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 01:19:39 ] >>743 Emacs のスレで聞いたら adaptive-fill-mode の使い方なり filladapt.el の後継なり 何か情報が入るんでない?
747 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 03:41:47 ] 乗り遅れた感あるけど vim+neocomplcacheでやっとります。
748 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 09:32:46 ] > rubyはwindowsで動かすとどうして遅いの? Ruby 1.8.7-p174 の select が遅かった話じゃなくて? www.garbagecollect.jp/~usa/d/200909c.html Ruby 1.8.7-p249 にすれば直るよ。 > たしか \d が漢数字にマッチしてしまって使いにくくなってたので Ruby 1.9.1 の初期はそうだったんだけど、この挙動はバグ扱いされて修正されたので、 Ruby 1.9.1-p378 にすれば直るよ。
749 名前:742 mailto:sage [2010/01/18(月) 09:33:49 ] 追記。適当なソフトでau2gcontact.rbの文字コード変換をshift jisに変換。
750 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 15:18:11 ] puts "日本語".inspect とすると、"¥123¥456" みたいな表示なりますけど、これを "日本語" のままで表示させることはできませんか。
751 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 15:35:00 ] 1.8.7 mswin32の場合 irb(main):001:0> puts "日本語".inspect "\223\372\226{\214\352" => nil irb(main):002:0> $KCODE = "s" => "s" irb(main):003:0> puts "日本語".inspect "日本語" => nil
752 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 15:37:06 ] -Kオプションの方がわかりやすいかもしれないと思い直した >ruby -Ks -e'puts "日本語".inspect' "日本語"
753 名前:739 mailto:sage [2010/01/18(月) 18:25:32 ] 1.9.2 preview1で試してみたけどダメだった
754 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 18:35:12 ] だからそういうふうにそもそも作ってないんだから標準で用意されたメソッドをどう使おうと絶対に駄目だって
755 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 19:39:35 ] 火急的に困ってる人がいないんだろうね 見なかったことにするわけにもいかんと思うんだが、代替手段は何なのだろう そこだけRubyを使わない?
756 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 19:58:33 ] 1.9.2で扱えるようになるかも、ってことらしかったんで
757 名前:デフォルトの名無しさん [2010/01/18(月) 20:21:42 ] #!ruby -Ku require 'win32ole' WIN32OLE.codepage = WIN32OLE::CP_UTF8 fso = WIN32OLE.new('Scripting.FileSystemObject') a = fso.CreateTextFile("♡♥♡♥.txt", true) a.WriteLine("This is a test") a.Close()
758 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 20:35:46 ] 笙。笙・笙。笙・.txt というファイルができました先生
759 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 20:39:55 ] u
760 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 21:01:23 ] 環境とエディタによってはこのへんきちんと動作するように保存するのは微妙に難しいぞ 慣れればどうということもないんだが
761 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 21:11:27 ] おお! できました!! ありがとうございます!!! これどうすればIOやDirで扱えるんですか?
762 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 21:20:06 ] >>761 扱えない 全部 WIN32OLE 内で完結させる必要がある 必要なのは Ruby の知識じゃないね
763 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 21:33:40 ] ですよねー...
764 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 21:35:43 ] 最初と最後にリネーム処理かませば Ruby から扱うのも不可能ではないと思う
765 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 22:55:11 ] 先生質問だよ質問 data = {/key/ => lambda{|m| "<#{m}>"}} … data.each_pair do |re, p| file.gsub!(re){|m| p.call(m)} end p file #=> key が <key> になってる というような、 {正規表現 => キーのマッチ結果を便利に利用した結果の返り値またはただの文字列} というデータを用いた連続置換をしたいのです それで、data は外部から自由に与えたいのです でも、よく考えたら lambda を作った時点では gsub の $1 も \1 もまだ無いから利用できないわけで なにかうまい方法ないですか eval ならなんとかなると思ったんだけど普通の置換後に使いたいだけの文字列も eval してしまいます
766 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 23:47:16 ] >>765 m = Regexp.last_match puts m[0] とかでできないかな? あと data.each_pair do |re, p| file.gsub!(re, &p) end でいいような気がするけど試してはいない。
767 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 23:55:48 ] こういうことだろうか。 to = data.each_pair.inject(from) {|result, pair| result.gsub(pair[0], &pair[1]) }
768 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 23:59:30 ] これではどう? a = 'abc def' data = [['(\w+)', '<\1>'], ['(> <)', '> < \1 > <']] data.each{|reg, rep| a.gsub!(/#{reg}/, rep)} a => "<abc> < > < > <def>"
769 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 00:09:09 ] >>768 なにそのわかりやすくしようとする気概をぜんぜん感じない例
770 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 00:10:57 ] >>765 766-768が書いているようにgsub!の第2引数で置換パターンを書いたほうが 単なるstringでパターンを渡せるので簡単だと思う 766,767が書いてるパターンの前の '&' って どういう意味?
771 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 00:21:13 ] >>770 ttp://www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html
772 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 00:26:03 ] なるほどProcを渡してるのねthx 俺には768の方がわかりやすいな、例は見づらいが
773 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 00:42:38 ] だって先生が gsub はブロック使えって言ったんだもん言ったんだもん言ったんだもん >>766-768 irb> data = {/k1/ => 'v1', /k(2)/ => 'v\1', /k3/ => lambda{|m| m.sub(/k/,'v')}} irb> str = 'k1, k2, k3' irb> data.each_pair do |re, p| p.kind_of?(Proc) ? str.gsub!(re, &p) : str.gsub!(re, p) end irb> p str "v1, v2, v3" 思ったことに近いことができましたーうおー 助かりましたせんきゅうです
774 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 03:46:28 ] 1byte文字以外をマッチする方法を教えてください s="123123456456" s.gsub!(/〜/){|c| uni_enc(c) } p s => 123%uFF11%uFF12%uFF13456%uFF14%uFF15%uFF16 みたいに1byteじゃない文字だけ変換して置換したいです よろしくお願いします
775 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 06:56:24 ] $KCODE='s' s="123123456456" s.gsub!(/./){ |ch| (ch.length==2) ? "(#{ch})" : ch } puts s;
776 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 07:36:20 ] 1バイトじゃない文字だって言ってるのにわざわざ2バイトをチェックするとはこれいかに
777 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 14:27:57 ] # coding: sjis # Ruby1.9以降か正規表現エンジンに鬼車を使用 s="123123456456" s.gsub!(/[^\p{ASCII}]/){|c| "%u"+c.encode('utf-8').ord.to_s(16) } p s
778 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:08:32 ] test = {"うし"=>5, "うま"=>3, "うし"=>1, "うし"=>2, "うま"=>4} test.each{|key, val| } これを実行したら最後二つの"うし"=>2と"うま"=>4しか処理が実行されないんですが キーの要素が一緒だと前にある奴は消されてしまうんですか? またこれをハッシュの数分だけ実行させることはできないんでしょうか?
779 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:22:15 ] >778 ハッシュの意味を勉強してこい
780 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:30:11 ] 配列の配列を使う方法 test = [ ["うし", 5], ["うま", 3], ["うし", 1], ["うし", 2], ["うま", 4] ] test.each {|k, v| use(k, v) } 値が配列になったハッシュを使う方法 test = {"うし"=>[5, 1, 2], "うま"=>[3, 4] } test.each {|k, a| a.each {|v| use(k, v) } }
781 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:44:49 ] 文字列 a0-0 a0-1 a0-2 a0-3 a1-0 a1-1 a1-2 a1-3 a2-0 a2-1 a2-2 a2-3 から任意が選ばれた配列a a=["a0-0","a2-2","a2-3"] より、 配列bを作成したいのですが、 なにか良い方法はないのでしょうか? b=[[1,0,0,0],[0,0,0,0],[0,0,1,1]]
782 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:51:33 ] 只今から上位エスパー召喚の儀を執り行う
783 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:54:09 ] "a0-0" → [1, 0, 0, 0] "a2-2" → [0, 0, 0, 0] "a2-3" → [0, 0, 1, 1] という対応があるように見えるのだが、2つめは [0, 0, 1, 0] ではない? どういうルール?
784 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 17:55:50 ] >>782 失敗してるぞw