Ruby
- rubyのObject#methodsについて
こんにちは、 rubyのmethodsメソッドについてです。 met = Object.method(:method) として、ObjectクラスのmethodメソッドをMethodインスタンスとしたとき met.parametes #=> [[:ref]] とすると、引数の情報を得ることができます。 しかし、 met.methods には、「:parameters」がありません。 クラスごとのメソッドを全て表示させたいのですが、 methodsはすべてのメンバを取り出すメソッドではないのでしょうか。 ご存知の方がいらっしゃいましたらお教えくださいませ。 ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux] Rails 3.1.4 gem 1.8.17 CentOS 5.7
- Rubyでファイルの終わりから?行目を得る方法
Rubyでファイルの再終行から?行目(コマンドのtail的な)の内容を取得しようとした場合、 どのような方法が一番メモリを消費せず、速度が速いのでしょうか? File.openしてループでgetsをしてまず全行取得、取得した内容から最終の?行を得る、のような方法は考えられるのですが、これだと一度ファイルの全てを処理するために、あまり効率が良い感じがしません。 他に何か良い方法は無いでしょうか。
- Mac OSXにgem mysqlが入らない
Mac OSX Lionにgem mysqlが入らなくて困っています。 (MySQL自体は普通にインストールしました) ネット上を探しまわって以下のようなコマンドを試したのですが、 エラーメッセージは同様のものでした。 sudo gem install mysql sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config 以下、エラーメッセージです。 Building native extensions. This could take a while... ERROR: Error installing mysql: ERROR: Failed to build gem native extension. /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/mysql-2.8.1 for inspection. Results logged to /Library/Ruby/Gems/1.8/gems/mysql-2.8.1/ext/mysql_api/gem_make.out 完全に詰まってしまいました。 何かアドバイスをお願いいたします。
- ruby19 -vは○、gem19 -vは×な理由
ruby19 -vは使えるのに、gem19 -vが使えない ▽ruby1.9をcoreserverとmacのホームディレクトリにインストール - Born Neet] http://blog.bornneet.com/Entry/282/ を参考に、レンタルサーバに「ruby-1.9.2-p180」をインストールしようとしています。 「ruby19 -v」と打つと、「ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux]」と表示されるのですが、 「gem19 -v」と打つと、「command not found」となってしまいます。 「gem19 -v」を有効にするには、どうすれば良いでしょうか? <インストールする際に打ったコマンド> /local/src/ruby-1.9.2-p180> ./configure --prefix=$HOME/local --program-suffix=19 <エラーと思われる箇所> make[1]: Leaving directory `/virtual/ユーザー名/local/src/ruby-1.9.2-p180' Generating RDoc documentation ./miniruby -I./lib -I.ext/common -I./- -r./ext/purelib.rb ./tool/runruby.rb --extout=.ext -- "./bin/rdoc" --no-force-update --all --ri --op ".ext/rdoc" "." ./tool/runruby.rb:63: warning: Insecure world writable dir /virtual/ユーザー名/lib/PEAR in PATH, mode 040777 uh-oh! RDoc had a problem: Directory .ext/rdoc already exists, but it looks like it isn't an RDoc directory. Because RDoc doesn't want to risk destroying any of your existing files, you'll need to specify a different output directory name (using the --op <dir> option) 「RDoc」ってドキュメント(?)だから関係ないようにも思うのですが、何か影響しているのでしょうか? .ext/rdoc は既に存在しているけど、「RDoc directory」に見えない、とは、どういうことなのでしょうか?
- ruby 配列の中の正規表現は比較に使える?
数万行あるテキストファイルの中を数百パターンくらいの正規表現で サーチするRubyスクリプトを作成しようとしていますがうまくできません。 どなたかお知恵を拝借させてください。 以下の流れで作ろうとしています。 「 ファイルを一行GETして、その行が事前に定義した配列内の正規表現に合致していればprintする。 次の行をGETして、最初からた正規表現の配列を比較して、合致していればprintする。 テキストファイルが終わるまで、繰り返し 」 何分初心者なもので…、他のやり方があれば教えていただきたいです… ヨロシクお願いしますm(__)m
- ruby 全角ハイフンを半角ハイフンに置換したい
$KCODE='e' require 'jcode' puts 'ー'.tr('ー','-') と書いてみたのですが、 /usr/local/lib/ruby/1.8/jcode.rb:137:in `tr!': premature end of regular expression: /[ー]/ (RegexpError) from /usr/local/lib/ruby/1.8/jcode.rb:148:in `tr' from b.rb:5 と怒られます。なにが悪いんですか? あと、実は全角の()も置換したいので、 $KCODE='e' require 'jcode' puts 'ー()'.tr('ー()','-()') などと書いてみたのですが、今度は -())) と期待した結果と異なるものが出てきました。 何が悪いのでしょうか? 以上、ご指導の程、よろしくお願いいたします。 P.S nkfって奴で、全角記号を半角記号へ変換って出来ないと思って、こんな事してます。
- Cygwin RubyでのIE
Cygwin上でRuby言語でInternetExplorerのプログラムを書いています 現在は 1、win32oleでIEを開く 2、プログラム内でhtmlでHPを作成し、IEで開く 3、2をプログラムを終了させるまで続ける といったものですが、2でURLを習得し、IEで開こうとすると新しい窓(ウィンドウ)が開いてしまいます。新しい窓(ウィンドウ)を開かずに、1で開いたIEを更新させたいです。 または、前に開いたページを閉じて、新たなページを開く。 win32oleやwin32APIなど、Cygwin上のRubyで使える方法ならいいので、ご存知の方いましたらお願いします。
- 初めてのプログラミング 第2版という本を買いました
私はプログラミングというものを全く経験したことがありません。 タイピングも物凄く遅いくらいパソコン初級者です。 パソコン自体、ネット検索や通販くらいしか使いません。 しかし私はゲームを作りたくてRubyという言語を勉強したいです。 それでこの質問のタイトルの本を買いました。(アマゾンで買ったので中身を見ずに買いました。) しかし読みながら3時間ほどパソコンをいじってみましたが、解説に飛躍がありすぎてまだ難しいです。 もっと丁寧に解説された初心者のためのRubyの本はないでしょうか?
- rubyで変数から指定したバイト読むには?
たとえば、 Class Hoge initialize(arg) @data=arg end def read(size) @dataからsize分読んで返す。 end end みたいなクラスを hoge=Hoge.new(aaa) puts hoge.read(1024) puts hoge.read(1024) みたいに使いたいです。 指定したバイト分読むってどうするんですか? ご教授の程、宜しくお願いいたします。
- クラスをシリアライズする(ruby)
質問はクラスのオブジェクトを、シリアライズしてファイルに保存するプログラムを作成したいのと、シリアライズしたデータベースのオブジェクトを、ファイルから読み込んで復元するプログラムを作成したいと思っています。 そこで、下記のプログラムを使って作りたいのですが、どのように作成したらいいか教えて欲しいです。 是非とも、よろしくお願いします。 class AddressFile def initialize(file) @original = file @meibo = {} fo = open("address_list.txt", "r") lines = fo.readlines fo.close for aLine in lines data = aLine.split @meibo[data[0]] = data[1] end end attr_accessor :meibo def search(name) @meibo[name] end def add(name,address) @meibo[name] = address end def update(name, address) @meibo[name] = address end end 動作環境はruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]になります。 よろしく、お願いします
- Rubyによるテキスト変換について
プログラムはあまり判りませんので、内容が不適切な場合には、ご容赦ください。 やりたいことは、複数のテキストを一括でリストに基づいて置換することをやりたいと思っております。 フリーのソフトを使えばっと言われるかも知れませんが、WindowsでもMacintoshでも同じようなことをやりたいと思っています。環境に問わない変換がしたいので。。。 Windowsでのイメージは、 テキストをBATファイルなどにドラッグすると、テキストが置換されるイメージです。 テキストは上書きされずに、同階層に「変換済」のフォルダを作成するか、テキストのファイル名を変更するなどが出来ればベストです。 同様に、Macintoshでも同様に動きが出来ればと思っております。 リストなどは「Windows」「Macintosh」の両方で共用したいので、 サーバに置いておいての運用をしたいと思っております。 変換は「gsub」で記述したいと思っております。 あまり素人的な内容で大変申し訳ないのですが、 何卒、よろしくお願いします。
- Rubyで配列の各要素の中身を書き換えてコピー
Rubyの配列の扱い方についてなのですが、 配列内の各要素(文字列)を更に細かい単位に分割してその中の1部を別の配列へコピーしようと思うのですがどうもうまくいきません。 具体的には array1["http://www.google.co.jp/","http://www.yahoo.co.jp/"] という2つの要素を持つ配列があるとして、 これを.split(/\//)を使用して分割しuriの3番目の要素に当たるhost名を別の配列 array2["www.google.co.jp","www.yahoo.co.jp"] という感じに部分複製したいのですがどのようにすればいいのでしょうか?
- rubyの見えない文字
こんばんは Ruby1.9.2のrails3.1.1を使用しています。 csvファイルをアップロードして、 data = param[:file].read.encode("UTF-8","UTF-8", :invalid => :replace, :undef => :replace, :replace => '').read.encode("UTF-8", :invalid => :replace, :undef => :replace, :replace => '?') のように読み込みまして、最初の1行の最初の要素が"code"でした。そこで、 data[0][0] == "code" としましたところ、falseが出力されました。両方とも文字コードはUTF-8で"code"なのですが、調査したところ data[0][0]length #=> 5 "code".length #=> 4 という違いが見つかりました。 この読み込みデータの見えない文字はなんなんでしょうか。 また、これを取り除く方法は何かありませんでしょうか。よろしくお願いします。 参考 data = param[:file].read.encode("UTF-8", :invalid => :replace, :undef => :replace, :replace => '').read.encode("UTF-8", :invalid => :replace, :undef => :replace, :replace => '?') としたところ、"???code"、長さ7という結果になりました。
- ruby 毎回同じ様なreplace文を書くのイヤ
db = SQLite3::Database.new('hoge.db') で、 db.execute('replace into table01 (a, b, c, d, e, f, g) values(?, ?, ?, ?, ?, ?, ?)',va, vb, vc, vd, ve, vf, vg); とかって書いてるのですが、 これを、 def replace(table,k,v) db.execute('replace into ' + table + '(' + k.join(',') + ') values('+ k.collect {'?'}'.join(’,’) +')' , ここどうかいたら??) end みたいな事を考えたのですが、vって配列でもらった値をばらばらにdb.executeのパラメータに渡したいのですが、 できませんでして、 replace('table',%w(a, b, c, d, e, f, g),[va, vb, vc, vd, ve, vf, vg]) みたいに使いたいです。 引数が可変のパラメータをそのまま、つぎの関数に渡すみたいな。 なんか、ラクする方法ないですか? ご教授の程、宜しくお願いいたします。
- rubyでメソッド内で引数名、値を取得
Rubyでメソッドの引数名をメソッド内部で取得するような事は可能でしょうか? def hoge(a,b,c) # ここでa,b,cの引数名、またその値を取得 # 例えば、{:a=>1, :b=>2, :c=>3}のようにHashの形式で得るなど。 end local_variablesだと、引数も含まれますがその他で定義したものも拾ってしまうため、他の方法を探しています。 わかる方がいれば教えていただけますでしょうか。
- rubyの問題です。 コードを教えてください
同じ年に生まれたnの学生がいる。こ の中には,同じ誕生日を持つ学生と,そうでない学生がいる。前者が何 人いるか数えるアルゴリズムをいくつか考え,その計算量を考えよ。簡 単のために,誕生日は1月1日からの日数(つまり0から364の整数) で表わすことにする。また,学生の誕生日は大きさ冊の配列bに入って いるが,その順序はデタラメだとする。 アルゴリズム1:同じ誕生日を持つ学生の人数を変数mで表わすこと にして,最初は、0にしておく,学生の誕生日を1人ずつとり出 し,配列bのすべての中身と比較して同じ誕生日の学生がいる かどうかを調べ,1人でも同じ誕生日の者がいた場合はmを1 増やす。これをすべての学生について行う。 アルゴリズム2:同じ誕生日を持つ学生の人数を変数皿で表わすこと にして,最初は0にしておく。配列bを併合整列法によって小さ い順に並べる。並べ換えた配列を先頭から順に調べてゆき,同 じ値が連続する区間の長さkを数える。kが2以上の場合の区 間があった場合は,mをkだけ増やす。これを配列の最後まで 行う。 アルゴリズム3:日付ごとの人数を数えるために,大きさ365の配列 cを作り,中身をすべてOにしておく。学生の誕生日dを1人 ずつとり出し,その日付の人数c[d]を1増やす。これをすべて の学生について行う。最後に,cを先頭から調べて2以上になっ ている値の和を求める。
- ruby inject
p [{:a=>'x',:b=>'X'},{:a=>'y',:b=>'Y'},{:a=>'z',:b=>'Z'}].inject(Hash.new(0)){|h,v| h[v[:a]]=v[:b]} 上記以下エラーになります。 test.rb:1:in `[]=': string not matched (IndexError) from test.rb:1 from test.rb:1:in `inject' from test.rb:1:in `each' from test.rb:1:in `inject' from test.rb:1 以下のような、ハッシュを作りたいのですが、 {'x'=>'X',y'=>'Y',z'=>'Z'} 何がダメですか? ご教授の程、お願いいたします。
- テキストファイルを読み込んでランキング付けする方法
タイトルのとおりですが、サーバーに保存してあるテキストファイルを読み込んで、 出現回数の多かったものを表示したいと考えています。 言語はRubyかできればJava scriptでと考えています。 テキストファイルには A B C A D のように一行ずつ語句が保存してあります。 よろしくお願いします。
- Ruby on rails のモデルオブジェクト
Ruby on Rails を勉強しているんですが、細かいところで @member = Member.find(1) という風に作成したモデルオブジェクトについてですが、 @memberとういう変数から、Memberモデルの主キー名を取得することができるでしょうか。 ※または、@memberから、Memberクラスが取得できるか。 @member.reflectionsなど、いろいろためしましたができませんでした。 お分かりの方がいらっしゃいましたら、是非お教え願えないでしょうか。
- アカウントの登録について
rubyでアカウントがない場合に新しくアカウントを作るプログラムを、ハッシュを使って作成しようと思っています。表示としては登録ができたら「アカウントを作成しました。」と、アカウントがすでにある場合には「アカウントはすでにあります。別なアカウント名を使ってください。」と表示させたいと思っています。ハッシュに登録まではできるのですが、そこからどう作成したらいいのかわからないので教えてほしいです!初心者で申し訳ないですがよろしくお願いします。 $KCODE = "e" hash_account = {} fo = open("accountData.txt", "r") i = 0 while(line = fo.gets) ary = line.split hash_account[ary[0]] = ary[1] i = i + 1 end fo.close ちなみに、accountData.txtにはアカウント名,パスワードの順に登録があります。 rubyのバージョンはruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]です。