Ruby 初心者スレッド Part 16
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/12/08(土) 22:36:20関連スレや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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0002デフォルトの名無しさん
2007/12/08(土) 22:40:03Ruby 初心者スレッド Part 15
http://pc11.2ch.net/test/read.cgi/tech/1193298175/
■関連スレ
Rubyについて Part 29
http://pc11.2ch.net/test/read.cgi/tech/1193668038/
RUBYの宿題教えてください。
http://pc11.2ch.net/test/read.cgi/tech/1106572657/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
Ruby on Rails
http://pc11.2ch.net/test/read.cgi/tech/1191381506/
【Ruby】Ruby on Rails Part3
http://pc11.2ch.net/test/read.cgi/php/1170760209/
0003デフォルトの名無しさん
2007/12/08(土) 22:41:35== Rubyを知る
Ruby Home Page
http://www.ruby-lang.org/ja/
== Ruby使用時の調べもの
Rubyリファレンス
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ (英語)
リファレンスのHTMLヘルプ版配布
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
# Windowsで便利
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
Programming Ruby - The Pragmatic Programmer's Guide
http://www.ruby-doc.org/docs/ProgrammingRuby/
# 好評書籍をWebで公開中、ただし英語
逆引きRuby
http://www.namaraii.com/rubytips/
0004デフォルトの名無しさん
2007/12/08(土) 22:42:10RAA - Ruby Application Archive
http://raa.ruby-lang.org/
RubyForge
http://www.rubyforge.org/
# 共にRubyのアプリやライブラリが検索できる
== Ruby関連のニュースや読み物
日本Rubyの会 公式Wiki - 日本Rubyの会Wiki
http://jp.rubyist.net/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
# コードレビューが好評
== いろいろRubyサイト
Matzにっき … Ruby作者の日記
http://www.rubyist.net/〜matz/
Ruby hotlinks 五月雨版 … Ruby関連の日記やblog
http://www.rubyist.net/〜kazu/samidare/
Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2
<rubyXML/>
http://www.rubyxml.com/
Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/
0005デフォルトの名無しさん
2007/12/08(土) 22:43:05ttp://doc.loveruby.net/
ライブラリ一覧
ttp://doc.loveruby.net/refm/api/
RubyExtensionProgrammingGuide
ttp://i.loveruby.net/w/RubyExtensionProgrammingGuide.html
Ruby Hacking Guide
ttp://i.loveruby.net/ja/rhg/
Symbol < Stringも止める。
ttp://www.rubyist.net/~matz/20061107.html#p03
クラスローカルインスタンス変数
ttp://www.rubyist.net/~matz/20061117.html#p02
クラス変数
ttp://www.rubyist.net/~matz/20070104.html#p03
ローカル変数
ttp://www.rubyist.net/~matz/20070112.html#p04
可視性メモ
ttp://www.rubyist.net/~matz/20070208.html#p04
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/30107
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/30275
YARV without 1.9
ttp://www.rubyist.net/~matz/20070215.html#p01
ttp://www.atdot.net/~ko1/diary/200702.html#d22
ttp://i.loveruby.net/d/20070223.html#p01
JSON
ttp://json.rubyforge.org/
ttp://webos-goodies.jp/archives/51019710.html
ttp://webos-goodies.jp/archives/51071565.html
YAML
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=YAML
ttp://jp.rubyist.net/magazine/?0009-YAML
ttp://www.namikilab.tuat.ac.jp/~sasada/prog/yaml.html
0006デフォルトの名無しさん
2007/12/08(土) 22:45:47Ruby 初心者スレッド Hiki
http://starlet.s145.xrea.com/ruby/hiki/
Ruby Portal
http://ruby.morphball.net/portal/
0007デフォルトの名無しさん
2007/12/08(土) 22:48:23テンプレのリンク先とかあんまり吟味してないけど、こんな感じでいい?
前スレ802のMoonwolf Wikiは使われてないようなので外した
0008デフォルトの名無しさん
2007/12/08(土) 22:49:41一からRubyをはじめる初心者向けのRuby入門書は何がお薦めでしょうか?
A: プログラ自体の初心者だったら「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
他の言語経験があるんだったら「プログラミングRuby 第2版 言語編」
0009デフォルトの名無しさん
2007/12/08(土) 22:57:47コマンドプロンプトに日本語を表示させるとエラーが出るのでchcp 65001したのですが、
今度はエラーは出なくなったのですが文字が表示されません。何が悪いのでしょうか?
フォントはMSゴシックにしています。
0010デフォルトの名無しさん
2007/12/08(土) 23:00:23質問の仕方
0011デフォルトの名無しさん
2007/12/08(土) 23:05:21どんなコードを実行したのかがナイトね〜
0012デフォルトの名無しさん
2007/12/08(土) 23:36:48>>7 オッケーイ(AA略
0013デフォルトの名無しさん
2007/12/09(日) 02:48:48乙!
0014デフォルトの名無しさん
2007/12/09(日) 03:26:42ありがとうございます。
24行と25行を以下のように書き換えて、次のif文をこう変えたら良いのでしょうか?
res_and_or = msql.query("select name,price from test_table where price #{zyoken} '#{Mysql::quote f_price}' and name='#{Mysql::quote f_name}'")
if res_and_or.num_rows == 0
serched_out = "見つかりませんでした"
else
gokei = res_and_or.num_rows
serched_out = "#{gokei}件見つかりました"
end
0015デフォルトの名無しさん
2007/12/09(日) 12:11:07すみません。入門のページに良くある
puts '日本語を表示します'
というのからはじめました。ファイル名はja.rb
これの日本語がSJISだと怒られるので
$KCODE = 'UTF8'
require 'kconv'
puts '日本語を表示します'.tosjis
とすれば日本語表示できました。
日本語表示が出来たので、今度はRSpecを使って日本語表示もやってみました。
その後試行錯誤した結果、どうもRSpecでもそれぞれtosjisを使わないとダメみたいでした。
でも記述量が多くてスマートじゃないので他にも方法がありそうだと思いました。
それでコンソールをchcp 65001してutf-8を書き出す方法を試してみることにしました。
ところが全く文字が書き出されないので困ってしまいました。英語の文字列すら書き出してくれません。
それで>>9を書き込みしました。エラーも全く出ていません。表示のみの問題です。
0016デフォルトの名無しさん
2007/12/09(日) 12:50:270017デフォルトの名無しさん
2007/12/09(日) 13:02:23>>11で指摘されてるのにもかかわらず、どういうエラーに
なったのかを書いてないのは、本気でどうかと思うんだけど。
「これの日本語がSJISだと怒られる」とか不明瞭すぎ。
まあソースコードをShijft_JISで記述した場合は
c:\> ruby -Ks ja.rb
0018デフォルトの名無しさん
2007/12/09(日) 15:59:17おすすめのエディタやIDEがあれば教えてください。
以前はEmacs使ってたのですが、windowsに環境も変わりいっそ新しい環境を使おうと思いました。
コード補完機能が使えるような環境があればうれしいです。
0019デフォルトの名無しさん
2007/12/09(日) 16:09:39Windows限定でいいならRDE
0020デフォルトの名無しさん
2007/12/09(日) 16:33:16ありがとうございます。ちょっくら試してきます。
0021デフォルトの名無しさん
2007/12/09(日) 16:35:12使ったことないけど^^;
0022デフォルトの名無しさん
2007/12/09(日) 16:39:36だからエラーは出てないの。
0023デフォルトの名無しさん
2007/12/09(日) 16:44:39Emacs使いならMeadowがいいんじゃないの?emacs-railsとか入れて使うとRDEより便利。
0024デフォルトの名無しさん
2007/12/09(日) 16:44:45Rails関係したエディタ?なんですかね。
RDEと比較して使いやすい方を選ぼうと思います。
0025デフォルトの名無しさん
2007/12/09(日) 16:59:51いやー、meadowも考えてたんですが、一から設定書き直すの面倒だなーと思って、
それならいっそ新しい環境でやろうかなと思ったんです。
ですが、RDEより便利なんだったらそっちのほうがいいかもですね。
ちょっとemacs-railsについて調べてきます。
0026デフォルトの名無しさん
2007/12/09(日) 17:09:04この辺を読んでMeadowに放り込んでみればいいと思う。
emacs-railsのまとめページ
http://www.ark-web.jp/sandbox/wiki/index.php?Ruby%20on%20Rails%2Femacs-rails%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB
ECBのページ
http://ecb.sourceforge.net/
Snippetsについての情報
http://rubyist.g.hatena.ne.jp/yamaz/20060902
sql-modeについて
http://www.sixnine.net/roadside/sqlmode.html
0027デフォルトの名無しさん
2007/12/09(日) 17:20:33http://rubyforge.org/projects/emacs-rails/
0028デフォルトの名無しさん
2007/12/09(日) 17:38:55エラーがでて実行できなくて、半日費やして、2日前に新しいバージョンになったばっかだと知ったむなしさ orz
0029デフォルトの名無しさん
2007/12/09(日) 17:41:46Rspecでgettext使えばいいんでないの
0030デフォルトの名無しさん
2007/12/09(日) 17:41:59どこかで等価演算なんかの値が変わったとは見たけど(すげーマニアックな場所)
実際書いたプログラム見せてみ?
0031デフォルトの名無しさん
2007/12/09(日) 17:49:47railsと混ざってないか?
003230
2007/12/09(日) 17:51:250033デフォルトの名無しさん
2007/12/09(日) 19:24:08思ってます。ParseDateを使う方法で書いているのですが、多量に
変換するので、一々ParseDateを呼び出すよりももっと別のやり方は
ないかとおもってます。(特に "#{hogehoge}"みたいに文字列の中で
できれば、、、)
どなたか、助けてください。
0034デフォルトの名無しさん
2007/12/09(日) 19:34:56#動作確認はしてない
class String
def hoge
return "#{self[0..3]}-#{self[4..5]}-#{self[6..7]}"
end
end
p "20071111".hoge #=> "2007-11-11"
0035デフォルトの名無しさん
2007/12/09(日) 19:36:53input="20071111"
output = "#{input[0,4]}-#{input[4,2]}-#{input[6,2]}"
puts output
0036デフォルトの名無しさん
2007/12/09(日) 19:37:10ただ4文字、2文字、2文字で区切ればいいというわけだ。
0037デフォルトの名無しさん
2007/12/09(日) 20:06:57irb(main):001:0> s="abcdefg"
"abcdefg"
irb(main):002:0> s[:abc]
nil
Hash を期待するとこに間違ってStringを渡してしまったけど、一見普通に動いているように
見えて少しはまりました。
なんか使い道があるんですかこれ?
0038デフォルトの名無しさん
2007/12/09(日) 20:14:16>>35
>>36
ありがとうございました。
勉強になりました。一応35さんのやり方でやってみました。
34さんのやり方も動くことは確認しました。
0039デフォルトの名無しさん
2007/12/09(日) 20:18:48添え字がFixnum、Regexp、String、Range以外の場合は数値化して
から使うようだ。
0040デフォルトの名無しさん
2007/12/09(日) 21:25:54置いてくれてたとしてもURI、場所がわかんねえ…
0041デフォルトの名無しさん
2007/12/09(日) 22:15:17a=Object2.new ってするとどうなりますか?最初のほうは無視されますか?
0042デフォルトの名無しさん
2007/12/09(日) 22:49:03無視というか、「どの変数からも参照されていない」状態になる
0043デフォルトの名無しさん
2007/12/09(日) 23:23:13無視される、というかその記述はプログラマ(=>>41)が無視してるというような意味の
記述になるんじゃね?
>>42が言うようにどっからも参照されてないからじきGCされる。
0044デフォルトの名無しさん
2007/12/10(月) 01:08:400045デフォルトの名無しさん
2007/12/10(月) 01:16:23xyzzyの方がutf-8nで保存できるから便利だヨン。
Meadowのutf-8ではまらないようにね。
0046デフォルトの名無しさん
2007/12/10(月) 01:25:44ディスプレイにどの程度の仕様を求める?
さすがに 5x7 で 16 文字だと Ruby は辛いし (笑)
0047デフォルトの名無しさん
2007/12/10(月) 01:34:58ちょっとした計算なんかを卓上で出来て便利だと思う。
しかし、金がない・・・orz
0048デフォルトの名無しさん
2007/12/10(月) 08:25:02最近の製品しらないけどLinuxザウルスにインストールとか
できるんだろうか?
0049デフォルトの名無しさん
2007/12/10(月) 09:48:31以前 Rails スレで、りなざうで RoR の開発をしてる香具師がいたような。
まありなざうをポケコンと呼べるかはともかくとして。
0050デフォルトの名無しさん
2007/12/10(月) 12:34:23RubyでGUIプログラミングするなら今は何でやるべきですかね。
0051デフォルトの名無しさん
2007/12/10(月) 14:02:31どのように記述すればいいのでしょうか?
0052デフォルトの名無しさん
2007/12/10(月) 14:20:500053デフォルトの名無しさん
2007/12/10(月) 14:25:22Rails版へ。とりあえず2chに聞くのはどうかと思うよ。
0054デフォルトの名無しさん
2007/12/10(月) 14:26:55すいません どうしても分からないもので。
Rails板で聞いてみます。
0055デフォルトの名無しさん
2007/12/10(月) 14:39:43Klass = Class.new
Klass.instance_eval{
@other_class = String
}
0056デフォルトの名無しさん
2007/12/10(月) 15:53:30ERROR: While executing gem ... (OpenURI::HTTPError)
404 Not Found
0057デフォルトの名無しさん
2007/12/10(月) 22:24:28とした後にaのインスタンス変数をいじって、また
a=b.clone
ってすると、どうなりますか?
aは最初にa=b.cloneとしたときと同じ状態ですか?それとも、いじった後と同じですか?
0058デフォルトの名無しさん
2007/12/10(月) 22:27:00其処まで書いてなんで試さないの?
0059デフォルトの名無しさん
2007/12/10(月) 22:30:460060デフォルトの名無しさん
2007/12/10(月) 22:34:25同じものを指している。
0061デフォルトの名無しさん
2007/12/10(月) 22:51:23b───>[インスタンス1]←生成
a = b.clone # インスタンス1のクローン1を生成し、インスタンス変数aで参照できるようにする
a───>[インスタンス1のクローン1]←生成
b───>[インスタンス1]
a.foo #インスタンス変数aが参照するインスタンスのメソッドfooを実行する
a───>[インスタンス1のクローン1].foo
b───>[オブジェクト1]
a = b.clone # インスタンス変数bが参照するインスタンスのクローン2を生成して、インスタンス変数aで参照できるようにする
a───>[オブジェクト1のクローン2]←生成
[オブジェクト1のクローン1のfooメソッド実行]←誰からも参照されなくなったのでガベージコレクトされる
b───>[オブジェクト1]
こんな感じ?
0062デフォルトの名無しさん
2007/12/10(月) 23:03:47プリントしてみると理解の助けになるかもね。
0063デフォルトの名無しさん
2007/12/10(月) 23:28:16たとえば、スタックトレースが取れればうれしいです。
0064デフォルトの名無しさん
2007/12/10(月) 23:41:490065デフォルトの名無しさん
2007/12/10(月) 23:44:250066デフォルトの名無しさん
2007/12/10(月) 23:53:590067デフォルトの名無しさん
2007/12/10(月) 23:56:270068デフォルトの名無しさん
2007/12/10(月) 23:57:360069デフォルトの名無しさん
2007/12/11(火) 00:28:17直ってるね。
rubyforgeはちょくちょく不調になるんだよなー。
0070デフォルトの名無しさん
2007/12/11(火) 01:04:08どうやってrubyを使えるようにするのか良く分かりません。
とりあえず、テンプレのほとんどが見れないんですけど、どうすればいいんですか?
OSはXP、rubyのホームページからファイルをダウンロードしたんですが、
それからどうすればいいのか分からない状態です。
0071デフォルトの名無しさん
2007/12/11(火) 01:07:48そのファイルを実行はしたのか?
0072デフォルトの名無しさん
2007/12/11(火) 01:39:41ttp://jp.rubyist.net/magazine/?FirstStepRuby
テンプレ整理したほうがよさそうだね。
0073デフォルトの名無しさん
2007/12/11(火) 02:22:31ttp://www.ruby-lang.org/ja/
のダウンロードの項目から落としました。
>>72
ありがとうございます。
見てみます。
0074デフォルトの名無しさん
2007/12/11(火) 03:53:03Windowsなら>>72に書いてあるActiveScriptRubyがお勧め
http://www.geocities.co.jp/SiliconValley-PaloAlto/9251/ruby/
インストールしてメニューから「ruby console」を実行。
RDEも入れておくと吉
http://homepage2.nifty.com/sakazuki/rde/
0075デフォルトの名無しさん
2007/12/11(火) 06:56:23自分はワンクリックインストーラをお勧めするなぁ
デフォルトのインストール先が好みじゃないし(Windowsの流儀ではここが適当なんだろうけど
専用コンソールを使うってのも嫌だ
One-Click Ruby Installer for Windows
ttp://rubyinstaller.rubyforge.org/wiki/wiki.pl
0076デフォルトの名無しさん
2007/12/11(火) 10:08:37専用コンソールってなに?
ruby console ってのはあるけど、これPATHを通してからコマンド
プロンプト呼んでるだけにしかみえないんだけど。
大仰な言い方するから、思わず調べに行ってしまったじゃないか。
これをどうしても使う必要があるわけでもないし、
一体何が不満なのかさっぱりわからん。
0077デフォルトの名無しさん
2007/12/11(火) 10:16:59俺はmswin32版rubyの手動インストールをお奨めする
http://www.garbagecollect.jp/ruby/mswin32/ja/
0078デフォルトの名無しさん
2007/12/11(火) 13:19:57俺はmingw版の手動インス(ry
0079デフォルトの名無しさん
2007/12/11(火) 14:22:370080デフォルトの名無しさん
2007/12/11(火) 14:47:070081デフォルトの名無しさん
2007/12/11(火) 16:04:31(兎の表紙のやつ)を買ったんですが、なんか読みにくい。。。
コード例にはまだ説明されてない文法がバンバン出てくるし、
「なんか新しい用語(xxxページからの説明を参照)」とかも多い(xxxページはずっと先のページ)
まだページにして3割ぐらいしか読んでないんだけど、コード例の間違いもちらほら見つけた。。。
失敗したかなぁ、、、RubyWayも一緒に買ったんだけどこっち読み進めたほうがいいかな。。。
0082デフォルトの名無しさん
2007/12/11(火) 16:26:010083デフォルトの名無しさん
2007/12/11(火) 17:53:04プログラミングRubyが読みにくいなら
Ruby Wayはもっと理解不能だと思う
0084デフォルトの名無しさん
2007/12/11(火) 18:23:05008581
2007/12/11(火) 18:48:28ですよね。。。後から「プログラミングRuby」が後継の本らしい、と知りました。
表紙かなり違うんだもんなぁ。
>>83-84
すみません、いちおうJavaとPerlが分かるのでRubyWayでもいいかなーと。
先にRubyWayを触りだけ読んでたんですが(兎本は後から届いた)、そんなに悪い気は
しなかったです。情熱的。
とにかく兎本は「これは後で説明する」とか、一切説明してない用法をいきなり使って
断りなし、とか、そんなのが多すぎて疲れました。
先にこのスレで質問すればよかったなぁ…
0086デフォルトの名無しさん
2007/12/11(火) 19:53:31{{attach_view('rde_translation.jpg')}}とか表示してくれえ
wikiでもバージョンアップしたんかなあ
0087デフォルトの名無しさん
2007/12/11(火) 20:01:34確かにRuby Wayの情熱はすごいw
図書館であの本を手に取ったのが、俺のRubyとの出会いだったな
0088デフォルトの名無しさん
2007/12/12(水) 03:02:21以下のスクリプトを実行しました。
$KCODE = 'u'
require 'pp'
class ScrapedItem
def initialize(e)
@name = e[0],
@age = e[1],
@hight = e[2],
@weight = e[3],
@blood = e[4]
end
attr_reader :name, :age, :hight, :weight, :blood
end
class Scraper
def initialize(array)
@a = array
end
def scrape()
row = []
@a.each { |g|
row << ScrapedItem.new(g)
}
return row
end
end
ary = []
ary << ['papa', '50', '175', '65', 'O']
ary << ['mama', '48', '158', '50', 'A']
hoge = Scraper.new(ary).scrape()
pp hoge
008988
2007/12/12(水) 03:03:12#<ScrapedItem:0x7ce98
@age="50",
@blood="O",
@hight="175",
@name="papa”,
@weight="65">,
#<ScrapedItem:0x7cdd0
@age="48",
@blood="A",
@hight="158",
@name="mama",
@weight="50">,
なのですが実際は
#<ScrapedItem:0x7ce98
@age="50",
@blood="O",
@hight="175",
@name=["papa", "50", "175", "65", "O"],
@weight="65">,
#<ScrapedItem:0x7cdd0
@age="48",
@blood="A",
@hight="158",
@name=["mama", "48", "158", "50", "A"],
@weight="50">,
なってしまいます。
009088
2007/12/12(水) 03:04:47ご教授ください。
当方の環境
ruby 1.8.6 (2007-06-07 patchlevel 36) [universal-darwin9.0]
OS mac leopard 10.5.1
0091デフォルトの名無しさん
2007/12/12(水) 03:13:04Javaとの比較なんかがまとめられたページがあるとありがたいんですけど。
0092デフォルトの名無しさん
2007/12/12(水) 03:16:57「java Ruby」でググレば腐るほど出てくるだろ・・・
0093デフォルトの名無しさん
2007/12/12(水) 03:18:48initialize() でインスタンス変数に代入してる箇所の行末のカンマを取ってみれ
0094デフォルトの名無しさん
2007/12/12(水) 03:21:18なかなかまとまったサイトが見つからなかったので、そういうのを集約したサイトがないかと思ったのですが、
もうちょっと根性入れて探してきます。
0095デフォルトの名無しさん
2007/12/12(水) 03:28:06つーかさ、経験者ならrubymanjp.chmで十分じゃね?
0096デフォルトの名無しさん
2007/12/12(水) 03:34:06実はかなり前に一度本を読んでまして、しばらくすれば感覚が掴めると思うんですが、
一からマニュアルや本を読むよりJavaとの差異がまとめてあれば一目瞭然かと思い・・・。
とりあえずマニュアルでも流し読みして思い出すことにします。
0097デフォルトの名無しさん
2007/12/12(水) 03:41:43ttp://onestepback.org/articles/10things/
ttp://jimweirich.tadalist.com/lists/public/14055
どこかに和訳もあるかも
0098デフォルトの名無しさん
2007/12/12(水) 12:48:11自動でX#hogeが実行されるような方法はありますか?
class X
def hoge
・・・・
end
end
class Y < X
def piyo
・・・・
end
end
0099デフォルトの名無しさん
2007/12/12(水) 14:50:18それに基づいて評価させる場合、どんな式を書いたら良いのですか?
0100デフォルトの名無しさん
2007/12/12(水) 15:45:42raddr = "^(\d+)\.(\d+)\.(\d+)\.(\d+)$"
regexp = Regrexp.new(raddr)
if regexp =~ "192.168.0.1"
puts "まっち"
end
リファレンス: google ruby regexp(本家が503エラーの時はキャッシュをみてくれ)
http://www.google.com/search?hl=ja&client=opera&rls=ja&hs=GDL&q=ruby+regexp
標準添付ライブラリ紹介 【第 12 回】 正規表現 (1)
http://jp.rubyist.net/magazine/?0019-BundledLibraries
#以下引用
| Regexp.new("\\n")
| Regexp.new('\n')
| Regexp.new('\\n')
| などです。 この 3 つは文字列リテラルの書き方の違いだけで、
| 「Regexp.new」の引数に渡るオブジェクトの内容は同じです。
0101デフォルトの名無しさん
2007/12/12(水) 16:16:08コード晒すのはいいが、せめてテストしてからにしてくれ。初心者相手ならなおさら。
raddr = "^(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$"
regexp = Regexp.new(raddr)
if regexp =~ "192.168.0.1"
puts "まっち"
end
0102デフォルトの名無しさん
2007/12/12(水) 16:22:14すまんすまん
1行目の文字列はシングルクォートで囲ってちょ
raddr = '^(\d+)\.(\d+)\.(\d+)\.(\d+)$'
p egexp = Regexp.new(raddr)
if regexp =~ "192.168.0.1"
puts "まっち"
end
0103デフォルトの名無しさん
2007/12/12(水) 16:29:48あと正規表現はリテラルで生成するのが普通だし
^ と $ の意味も間違って理解してるように見えるよ
0104デフォルトの名無しさん
2007/12/12(水) 16:41:13>p egexp = Regexp.new(raddr)
これで表示されるわけねえw
だからちゃんと晒す前にテストしろと
>>103
>^ と $ の意味も間違って理解してるように見えるよ
kwsk
0105デフォルトの名無しさん
2007/12/12(水) 17:09:10> あと正規表現はリテラルで生成するのが普通だし
元の >>99 の質問は読んだ?
0106デフォルトの名無しさん
2007/12/12(水) 18:08:32>>101-102
これこそ私が探していたコードです。
正規表現オブジェクトって便利ですね。
>>100-102さんご教授ありがとうございました。
0107デフォルトの名無しさん
2007/12/12(水) 18:22:260108デフォルトの名無しさん
2007/12/12(水) 18:54:540109デフォルトの名無しさん
2007/12/12(水) 19:07:120110デフォルトの名無しさん
2007/12/12(水) 19:22:06109も言ってるが、実際に何がやりたいのかが分からんとなんともいえない
0111デフォルトの名無しさん
2007/12/12(水) 19:59:41Y.module_eval("
alias piyo_old piyo
def piyo()
hoge()
piyo_old()
end
")
y.piyo()
#"HOGE"
#"PIYO"
とでもするのかな。
要するに元のpiyo()に別名を付けて避けておいて
元のpiyo()とhoge()を呼ぶ新しいpiyo()を作る。
011298
2007/12/12(水) 20:55:34piyoを実装する側はそんなことを気にせずに本来の処理だけを実装すればいいようにしたい
0113デフォルトの名無しさん
2007/12/12(水) 21:02:10def hoge
p :hoge
end
end
class Y < X
def piyo
p :piyo
end
end
module PiyoHoge
def piyo(*args)
super(*args)
hoge
end
end
Y.new.extend(PiyoHoge).piyo
0114デフォルトの名無しさん
2007/12/12(水) 21:03:59・・・そんなこと無いかな
0115デフォルトの名無しさん
2007/12/12(水) 21:04:200116デフォルトの名無しさん
2007/12/12(水) 21:11:44聞いた限りでは、本当にそんなテクニックが必要なのかどうか疑問に感じる
素直にpiyoの中でhogeを呼ぶか、superを使った方がいいんじゃない?
そもそも不可能な気もするしな
0117デフォルトの名無しさん
2007/12/12(水) 21:21:57^ 行の先頭
$ 行の末尾
¥A 文字列の先頭
¥z 文字列の末尾
x = <<EOF
GOMI
192.16.0.1
GOMI
EOF
puts '^ .. $ => ' + $1 if x =~ /^(¥d+¥.¥d+¥.¥d+¥.¥d+)$/
puts '¥¥A .. ¥¥z => ' + $1 if x =~ /¥A(¥d+¥.¥d+¥.¥d+¥.¥d+)¥z/
xからIPアドレスを抽出するためなら^ .. $ はアリだが、
x全体がIPアドレスにマッチするかの判定としては不適。
0118デフォルトの名無しさん
2007/12/12(水) 21:29:02class X
def hoge
p :hoge
end
def poyo
hoge;piyo
end
def piyo;end
end
class Y < X
def piyo
p :piyo
end
end
Y.new.poyo
0119デフォルトの名無しさん
2007/12/12(水) 21:54:170122デフォルトの名無しさん
2007/12/12(水) 22:06:230123デフォルトの名無しさん
2007/12/13(木) 00:15:08この挙動が理解できん・・・。
なぜ、X#hogeが呼ばれるのか…?
0124デフォルトの名無しさん
2007/12/13(木) 00:16:32なぜ、って、どう見てもX#poyoの中で呼んでるじゃん。
0125デフォルトの名無しさん
2007/12/13(木) 00:23:32Y.new しているから Yのインスタンスなのに、なぜY#poyo じゃなくて、X#piyo が呼ばれるのか分からん。
0126デフォルトの名無しさん
2007/12/13(木) 00:28:11piyo と poyo のスペルの違いに気がついてなかった。
普通に、hoge, fugaとかfoo, bar, bazにしてくれよ。
0127デフォルトの名無しさん
2007/12/13(木) 00:32:40ごめん、レスしたあとに気が付いたけど、なんかポヨがずっと頭んなかあったもんだからw
0128デフォルトの名無しさん
2007/12/13(木) 00:36:010129デフォルトの名無しさん
2007/12/13(木) 13:24:16iconvはうまくいくようです。
ruby側に問題があるの?
それともnkf側に問題があるの?
require 'iconv'
require 'nkf'
a = "蟲"
NKF.nkf('-s', a) #=> ""
NKF.nkf('-s', a).size #=> 0
Iconv.conv('SJIS', 'UTF-8', a) => "?"
Iconv.conv('SJIS', 'UTF-8', u1).size => 2
UTF-8環境です。
ruby 1.8.6 (2007-03-13 patchlevel 0) [powerpc-darwin8.9.0]
0130デフォルトの名無しさん
2007/12/13(木) 13:29:29一文字とか短い文字列だと NKF の文字コード自動判定がうまく動かないと思うので、
NKF.nkf('-Ws', a) みたいに入力文字列のエンコーディングを明示的に指定します。
0131デフォルトの名無しさん
2007/12/13(木) 13:32:07ソースコードの文字コードを ruby -K? で指定。
nkf -Ws のように変換元の文字コードを nkf に指定。
を確認してみてください。
0132デフォルトの名無しさん
2007/12/13(木) 13:48:58引数1個のNKFを$KCODEとkconvの合わせ技や2引数のiconvと比較するのは酷だ
0133デフォルトの名無しさん
2007/12/13(木) 17:23:46漢字についてはputs "\x82\xa0" #=> あ
しか知らなくて
chars = Array.new
start = 0x83
start.upto(0x99){|num|
chars << "\\x#{num.to_s(16)}\\x5c"
}
p chars
#=>["\\x83\\x5c", "\\x84\\x5c", "\\x85\\x5c", "\\x86\\x5c",
"\\x87\\x5c", "\\x88\\x5c", "\\x89\\x5c", "\\x8a\\x5c", "\\x8b\\x5c",
"\\x8c\\x5c", "\\x8d\\x5c", "\\x8e\\x5c", "\\x8f\\x5c", "\\x90\\x5c", "\\x91\\x5c", "\\x92\\x5c", "\\x93\\x5c", "\\x94\\x5c", "\\x95\\x5c",
"\\x96\\x5c", "\\x97\\x5c", "\\x98\\x5c", "\\x99\\x5c"]
一連の漢字を生成したいのですが,期待した結果を得られません。
期待しているのは
["ソ","噂","浬","欺","圭","構","十","申",....]
です。
アドバイスください。
0134デフォルトの名無しさん
2007/12/13(木) 17:31:45pack を使うと良いかも。
#!/usr/local/bin/ruby -Ks
chars = Array.new
start = 0x83
start.upto(0x99){|num|
chars << [num, 0x5c].pack("CC")
}
p chars
0135デフォルトの名無しさん
2007/12/13(木) 17:48:11ありがとうございました。
(packが実のところよく解ってはいないのですが,
中身は解らなくても,とりあえず結果を得られたので,,,^^)
0136デフォルトの名無しさん
2007/12/13(木) 20:17:34C++で作ったプログラムのテストをC++でやるより楽になるでしょうか。
0137デフォルトの名無しさん
2007/12/14(金) 20:10:37autoexec.batのPATHのところで手間取ってます
頼みにしていたHPが見れなくなっているので困っています
なんて書き加えればうまくいくんでしょうか?
rubyは C:\rubyに解凍してあります
0138デフォルトの名無しさん
2007/12/14(金) 20:16:150139デフォルトの名無しさん
2007/12/14(金) 20:28:36この方法では出来ないみたいです
0140デフォルトの名無しさん
2007/12/14(金) 21:44:07いろいろな意味でOS乗り換えたほうがいい。
0141デフォルトの名無しさん
2007/12/14(金) 21:54:40http://www.ruby-lang.org/ja/install.cgi?cmd=view;name=Windows%A4%C7%A4%CEPATH%A4%CE%C4%CC%A4%B7%CA%FD
0142デフォルトの名無しさん
2007/12/14(金) 23:22:190143デフォルトの名無しさん
2007/12/14(金) 23:40:140144デフォルトの名無しさん
2007/12/15(土) 10:14:16自己解決しました
0145デフォルトの名無しさん
2007/12/15(土) 18:40:340146デフォルトの名無しさん
2007/12/15(土) 18:46:47>> x = 'abcde'
=> "abcde"
>> x.chop!
=> "abcd"
>> x[-1,1]=''
=> "abc"
>> x = x[0..-2]
=> "ab"
いろいろあるよ。
0147デフォルトの名無しさん
2007/12/15(土) 21:05:38chopでうまくいきました.
0148デフォルトの名無しさん
2007/12/15(土) 21:18:16どれも最後の1バイト削ってるだけじゃねーか
0149デフォルトの名無しさん
2007/12/15(土) 21:48:34こうすればいいよ
どれも最後の1バイト削ってるだけじゃねーか
っていう
0150デフォルトの名無しさん
2007/12/15(土) 21:58:25なんとかならないですか
0151デフォルトの名無しさん
2007/12/15(土) 22:05:59リスト内包表記ってどんなんだっけ?
0152デフォルトの名無しさん
2007/12/15(土) 22:21:23evens = [ n in (0..10) if n % 2 ]
=> [0, 2, 4, 6, 8, 10]
0153デフォルトの名無しさん
2007/12/15(土) 22:37:43evens = (1..10).select{|n| (n % 2).zero? }
長さはちょい長いぐらい?
0154デフォルトの名無しさん
2007/12/15(土) 22:43:16正直無理じゃない?アレは結構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:57evens = Generator.new {|g| n = 0; loop { g.yield(n); n += 2} }
0157デフォルトの名無しさん
2007/12/15(土) 23:25:05class 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:49eventsじゃなくてevensな。
0159デフォルトの名無しさん
2007/12/16(日) 03:20:32Ruby に訳すと
(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:290161デフォルトの名無しさん
2007/12/16(日) 12:02:35/hoge/ =~ string ? false : true
こんな事してみたんだけどもっと幸せな方法はありますか?
0162デフォルトの名無しさん
2007/12/16(日) 12:06:310163デフォルトの名無しさん
2007/12/16(日) 12:18:430164デフォルトの名無しさん
2007/12/16(日) 12:58:21リファレンスの正規表現の頁に書いてくれないとワカンネ・・・
0165デフォルトの名無しさん
2007/12/16(日) 19:16:44RuntimeError: **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:44bt = 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:48irb だとまた変わってくるのか。
0168デフォルトの名無しさん
2007/12/16(日) 20:09:12Py_Initializeはpythonのドキュメントで詳細な説明がなされていて組み込み用途で用いてもよいことが感じ取れる(!?)のですが
ruby_initはググってもRubyソースコード完全解説のページが先頭にでたりして自作EXEの中で呼んでいいのか分かりません
0169デフォルトの名無しさん
2007/12/16(日) 22:12:39といったような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それはありえない
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:38Array#join
そういう用途のときには、Array#to_sはあまり当てにしないほうがいい
0174デフォルトの名無しさん
2007/12/16(日) 22:42:52あいうえおかきくけこさしすせそ
にならなければならないんだが…
まあとりあえず、配列を書き出す際は適当な区切り文字でjoinさせて文字列にするのが普通
irb> puts "array - #{a.join(',')}"
array - あいうえお,かきくけこ,さしすせそ
0175デフォルトの名無しさん
2007/12/16(日) 22:43:00README.EXTとREADME.EXT.ja
組みこみ例としてはmod_rubyとかvimとかmfiler2とか。
Pythonほどドキュメントが充実してないけどそう難しくない。
0176デフォルトの名無しさん
2007/12/16(日) 22:45:24少なくともうちのruby 1.9.0 (2007-07-09 patchlevel 0) [i386-mswin32]だとそうだ
0177デフォルトの名無しさん
2007/12/16(日) 22:49:14あれは1.8を理解した人間が使うものだ
0178デフォルトの名無しさん
2007/12/16(日) 22:49:200179デフォルトの名無しさん
2007/12/16(日) 22:53:15joinでうまくいきました.
ありがとうございました.
0180デフォルトの名無しさん
2007/12/16(日) 22:58:19今すぐ1.9をアンインストールして1.8.6をインストールしろ
今すぐだ
1.9は速いだあ?
お前が使ってるうちはどんなスクリプト言語より処理は遅いよ
0181デフォルトの名無しさん
2007/12/16(日) 22:58:580182デフォルトの名無しさん
2007/12/16(日) 23:03:570183デフォルトの名無しさん
2007/12/16(日) 23:04:340184デフォルトの名無しさん
2007/12/16(日) 23:05:35>あれは1.8を理解した人間が使うものだ
え.そうなんですか?
何も考えず最新版を入れてました.
1.9は言語仕様の変更とかバグとかが多いんですか?
0185デフォルトの名無しさん
2007/12/16(日) 23:06:10いやわからんけど
っていうかなんでわざわざ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どのサイトを見て最新版を入れたんだ?
>>185
でも普通、初心者はわざわざFTPディレクトリに飛ばないと思うんだが
そうでもないんだろうか
0187デフォルトの名無しさん
2007/12/16(日) 23:17:53良く覚えてませんが,ftpから適当に数字の大きい最新版を落とした様な気がします.
どうも失礼しました.
0188デフォルトの名無しさん
2007/12/16(日) 23:24:20ruby-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さんくす
0190デフォルトの名無しさん
2007/12/17(月) 00:46:01そんな感じで、例外が発生したときにそれをキャッチする処理を登録できますか。
begin - rescue - end で全体を囲めばいいんですが、そうでない方法で例外ハンドラを登録する方法があれば教えてください。
やろうとしているのは、requre 'foobar' としたら自動的に例外ハンドラが登録されることです。
0191デフォルトの名無しさん
2007/12/17(月) 06:06:24raise+rescue なら rescue ブロックの end 以降に処理が続くけど
登録したハンドラの処理が終了した後はどうなる事を期待してる?
require 'foobar' でどうにかするって事が目的なら
例外を発生させてるメソッドを上書きする方がよくね?
0192デフォルトの名無しさん
2007/12/17(月) 07:39:04requireだけですべての例外を補足できる方法は、おそらくない
明示的にbegin - rescue - endするしかない
>>191
>require 'foobar' でどうにかするって事が目的なら
>例外を発生させてるメソッドを上書きする方がよくね?
どこで例外が起きた場合でも補足できるように、ってことなんだろう
0193デフォルトの名無しさん
2007/12/17(月) 12:09:07pの数は新しいほど大きいから、新たにダウンロードするなら
一番大きいruby-1.8.6-p111-i386-mswin32.zipでいいよ
初学者向けで1.9.0の扱いを説明してるページは少ないな
0194デフォルトの名無しさん
2007/12/17(月) 12:53:29でも、こう立て続けに 1.9.0 ではまる初心者が出てきてるのをみると、最近何かあった?
0195デフォルトの名無しさん
2007/12/17(月) 13:18:15魅かれてはいます。
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:410197デフォルトの名無しさん
2007/12/17(月) 13:37:18それでハマってもここに質問しにくるのはやめてほしい。自己責任で頼むよ。
0198デフォルトの名無しさん
2007/12/17(月) 13:43:32マスコミに煽られるとナ‥‥
0199デフォルトの名無しさん
2007/12/17(月) 14:04:39というか、そういう内容の記事によってRubyの露出が増えていて、
それによってRubyという言語に興味を持つ人間が増えているんだろう。
「パフォーマンスに興味を持つ」のと「パフォーマンスを大々的にアピールする記事の連発を通して
Rubyに興味を持つ」のはまるで別物で、増えているのは後者だと思うよ。
ただ、興味のきっかけが「1.9.0はすごいよ!」っていう記事である以上、まぁ普通そのバージョンを
入手しようと思うわけで、そこんとこでこのような流れが生まれるんだろうね。
「ただし初心者にはおすすめできない」みたいな注釈が、速度絶賛系の記事にあればいいんだけど、
Ruby記事なんて大体が宗教冊子みたいなもんだから、そういうことは書いてあるはずもなく。
0200デフォルトの名無しさん
2007/12/17(月) 14:14:120201デフォルトの名無しさん
2007/12/17(月) 14:15:180202デフォルトの名無しさん
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の質問受け付けるのは専用スレがあってもいいくらいのめんどくささだぞ
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:090208デフォルトの名無しさん
2007/12/17(月) 19:12:41CGI.unescapeHTML(string)よりいいのありませんか?
♥(ちゃんと見えてるか?)
とかも戻せるのが欲しいです。
0209デフォルトの名無しさん
2007/12/17(月) 19:13:110210デフォルトの名無しさん
2007/12/18(火) 13:44:29cgi.rbのunescapeHTML()をコピって、heartsを追加。
かっこわるいけど。
0211デフォルトの名無しさん
2007/12/18(火) 14:09:41よく考えたら、どの文字コードに変換するのか指定できないといけないね。
'&' や '<' はASCIIだから文字コード気にしなくていいけど、♥はそうもいかないな。
$KCODEみて変換すればいいのかな。
0212デフォルトの名無しさん
2007/12/18(火) 14:17:40cgi.rb 見るとそうなってる ($KCODE が UTF-8 のときのみ変換) けど、
本当は $KCODE ではなく出力する対象のドキュメントに合わせるべきだよね。
0213デフォルトの名無しさん
2007/12/18(火) 18:40:430214デフォルトの名無しさん
2007/12/18(火) 18:52:36こんな記事見つけた
「忘れられたRubyのWebフレームワーク」
http://www.infoq.com/jp/news/2007/11/forgotten-ruby-web-frameworks
0215デフォルトの名無しさん
2007/12/18(火) 19:10:34'"'
"\""
でいいのかな?
0216デフォルトの名無しさん
2007/12/18(火) 19:12:33'ダブルクオートは"です'
ダブルクオートの中ならバックスラッシュでエスケープする
"ダブルクオートは\"です"
好きなほう使え
>>215
よいかと
他にもなんとかする方法はある気はするがそんなもん覚えなくてよし
0217デフォルトの名無しさん
2007/12/18(火) 19:25:030218デフォルトの名無しさん
2007/12/18(火) 22:36:430219デフォルトの名無しさん
2007/12/18(火) 22:57:16と思っていただこうッ!
真似はできるけど肝心なとこで動作が違うからRuby式の別物として理解したほうがよい
0220デフォルトの名無しさん
2007/12/18(火) 23:55:20え、やっぱそうだったか。
ちょうど参照渡ししたいとこがあったんだけど、別の方法を考えるとするかな。
0221デフォルトの名無しさん
2007/12/18(火) 23:59:19ないかも
0222デフォルトの名無しさん
2007/12/19(水) 00:00:00サンキュー。
とりあえずぶち当たったもんを処理する事にします。
0223デフォルトの名無しさん
2007/12/19(水) 05:02:11実際はほとんど全部が参照渡しなんだが、代入した時点で参照が外れる。
だから、参照渡しみたいな動作をさせるなら、
・配列として渡し、配列の要素を変更する。
・オブジェクトとして渡し、値を変更するメソッドを呼び出す。
・そもそもRubyの場合、return a,b,c と複数の値を返せるのでそれほど必須ではない。
とまあ、よく使われる方法はこんなとこかな。
俺的には2番目か3番目の方法をオススメ。
0224デフォルトの名無しさん
2007/12/19(水) 05:09:220225デフォルトの名無しさん
2007/12/19(水) 05:17:240226デフォルトの名無しさん
2007/12/19(水) 11:04:15if ! obj.empty? や unless obj.empty? みたいに、
否定的な表現をしなくちゃいけないのが抵抗あるんですが、
何かうまい記述はありますか?
0227デフォルトの名無しさん
2007/12/19(水) 11:09:27みたいなの作っちゃえば?
0228デフォルトの名無しさん
2007/12/19(水) 11:20:370229デフォルトの名無しさん
2007/12/19(水) 11:28:190230デフォルトの名無しさん
2007/12/19(水) 11:28:19irb> puts '何か入ってます' if [nil, nil, false].any?
irb> puts '何か入ってます' if [''].any?
何か入ってます
0231デフォルトの名無しさん
2007/12/19(水) 11:55:260232デフォルトの名無しさん
2007/12/19(水) 12:06:25つか、「何か入っている」のではなく「空ではない」と考えるようにしたほうがいい
empty が通常の状態
0233デフォルトの名無しさん
2007/12/19(水) 12:42:55str = "Java1.5と日本語は除外 rubyperl,ruby 1.9ああああpythonいいい"
#なんらかの処理
["Java"、"rubyperl"、"ruby"、"python"]
0234デフォルトの名無しさん
2007/12/19(水) 12:52:23p 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:200237デフォルトの名無しさん
2007/12/19(水) 21:48:25適当な自作の例外を発生させたほうが好ましい場合もあると思う
0238デフォルトの名無しさん
2007/12/19(水) 22:09:14パーサでは常に例外を発生させる、でいいと思う。
それをmainプログラムでキャッチして、常に$stderrに表示。
パースできないデータなら、そうするべき。
警告を使うなら、警告文を表示するけど処理は継続する場合じゃないかな。
例えば古い書き方を使っていて、今のパージョンではまだサポートするけど将来は廃止する予定だから新しい構文を使ってね、という場合にwarn()で警告する。
パースできないというのは致命的だから処理を継続すべきでなく、よって例外を発生するのが自然。
0239デフォルトの名無しさん
2007/12/19(水) 22:12:41デバッグモードと冗長モードの使い分け:
* ユーザに表示するデータは冗長モードで出力
* 開発者だけに限定するならデバッグモードでのみ出力
冗長モードはユーザのため、デバッグモードは開発者のため、という理解でいいんじゃね?
0240デフォルトの名無しさん
2007/12/19(水) 22:36:44Debian 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されるのですが、そういうものなのでしょうか?
抑止する方法ってありますか?
---
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
0242235
2007/12/20(木) 21:08:02パース失敗が致命的ではなく(エラーは単に読み飛ばすだけ)
エラーの内容を、ユーザーに表示する必要がある処理のため
$VERBOSEで判定することにします。
0243デフォルトの名無しさん
2007/12/21(金) 12:34:35windowsでRuby使ってるんですが、コマンドプロンプトで指定したテキストファイルを読み込ませたいです。
f = open("SA.txt")
reviewbody = f.read
reviewbodyは処理対象みたいな
このSAの部分をコマンドラインから入力できるようにしたいんですが、どうすればいいでしょうか?
0244デフォルトの名無しさん
2007/12/21(金) 12:53:10text=STDIN.gets.chomp
puts "#{text}が入力されました"
なにか入力してください
なにか
なにかが入力されました
0245デフォルトの名無しさん
2007/12/21(金) 12:56:49ファイル名をコマンドプロンプトから指定するという意味です。
0246デフォルトの名無しさん
2007/12/21(金) 12:58:030247デフォルトの名無しさん
2007/12/21(金) 13:03:51> cat argv.rb
puts "引数の一つ目は#{ARGV[0]}です"
puts "引数の二つ目は#{ARGV[1]}です"
> ruby ./argv.rb いっこめ ふたつめ
引数の一つ目はいっこめです
引数の二つ目はふたつめです
0248デフォルトの名無しさん
2007/12/21(金) 13:16:02>>247 のが良いと思うけど、 ARGF を使うという手もある。
0249デフォルトの名無しさん
2007/12/21(金) 13:19:33ちょっとやってみます。
>>246さま
Getsでとってきたら無理だったんですが、要するに
f = open("SA.txt")
reviewbody = f.read
だったらSA.txtをreviewbodyとしてyahooの形態素解析にかけてるんですが、そのSA.txtをgetsみたいにとってこれたらなぁって思ってます。
指定できないといちいちソースにファイル名書き込んだりして変更しなきゃいけないので・・・
それを何とかしたいワケです。
0250デフォルトの名無しさん
2007/12/21(金) 14:37:330251デフォルトの名無しさん
2007/12/21(金) 14:41:05mysql-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:40make
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
となってしまいます。いろいろググってみたのですが解決方法がわかりません。
どなたかお知恵をお貸ししていただけないでしょうか?
0253デフォルトの名無しさん
2007/12/21(金) 18:05:09「lipo: can't open input file:」
でぐぐるといいことあるかも
0254デフォルトの名無しさん
2007/12/21(金) 18:05:220255デフォルトの名無しさん
2007/12/21(金) 18:33:39gem使っても、結局は自分の環境でmakeするんじゃないのか?
それを自動的にやるかどうかの違いだけで
0256デフォルトの名無しさん
2007/12/21(金) 22:43:06スレちがいだったでしょうか? Meadowスレとかのほうがいいかな。
この現象は俺だけ?
0257デフォルトの名無しさん
2007/12/21(金) 22:58:29ARCHFLAGS=-i386
export ARCHFLAGS
してからgemなりmakeなり。
sudo gemだと環境変数を引き継がないので、sudo suとかして。
くわしくは以下にて
http://trac.macosforge.org/projects/ruby/wiki/WhatsNewInLeopard
0258デフォルトの名無しさん
2007/12/21(金) 22:59:13ARCHFLAGS="-arch i386"
が正しい。
0259252
2007/12/21(金) 23:13:45みなさんありがとうございました。
しかしまだサンプルスクリプトは動かず、、、とりあえず一歩前進ということで。
make
cc -arch i386 -pipe -bundle -o mysql.bundle mysql.o -L"." -L"/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib" -L. -arch i386 -lruby -L/usr/local/mysql/lib -lmysqlclient -lz -lm -lpthread -ldl -lm
sudo make install
Password:
/usr/bin/install -c -m 0755 mysql.bundle /Library/Ruby/Site/1.8/universal-darwin9.0
0260252
2007/12/21(金) 23:32:01すいません、見落としていました。
258様のいうとおりにやってみたら、前よりさらによくなったようです。
ARCHFLAGS="-arch i386" 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()... yes
checking for mysql.h... yes
creating Makefile
0261252
2007/12/21(金) 23:32:52gcc -I. -I. -I/System/Library/Frameworks/Ruby.framework/Versions/
1.8/usr/lib/ruby/1.8/universal-darwin9.0 -I. -DHAVE_MYSQL_SSL_SET -DHAVE_MYSQL_H -I/usr/local/mysql/include -Os -arch i386 -fno-common -fno-common -arch i386 -Os -pipe -fno-common -c mysql.c
cc -arch i386 -pipe -bundle -o mysql.bundle mysql.o -L"." -L"/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib" -L. -arch i386 -lruby -L/usr/local/mysql/lib -lmysqlclient -lz -lm -lpthread -ldl -lm
sudo make install
Password:
/usr/bin/install -c -m 0755 mysql.bundle /Library/Ruby/Site/1.8/universal-darwin9.0
0262デフォルトの名無しさん
2007/12/21(金) 23:35:030263デフォルトの名無しさん
2007/12/21(金) 23:36:120264デフォルトの名無しさん
2007/12/22(土) 00:23:520265デフォルトの名無しさん
2007/12/22(土) 00:24:290266デフォルトの名無しさん
2007/12/22(土) 00:25:410267デフォルトの名無しさん
2007/12/22(土) 00:34:08exitでもしない限りdefは常に返り値を返す
0268264
2007/12/22(土) 00:43:520269デフォルトの名無しさん
2007/12/22(土) 01:05:21StringだったときとArrayだった時で処理を分けたいんですが.
0270デフォルトの名無しさん
2007/12/22(土) 01:17:53あるオブジェクトが具体的に何のオブジェクトに属するか調べるメソッドは
マニュアルのObjectオブジェクトのところに載ってたり載ってなかったりすると思う
0271デフォルトの名無しさん
2007/12/22(土) 01:34:100272デフォルトの名無しさん
2007/12/22(土) 04:10:38files = Dir.glob("**/*.{html,htm}")
で,サブディレクトリ内全てにあるHTMLファイルを取得するじゃないですか.
その後に,取得したHTMLファイルのファイル名によって処理を分けたいのですが,
ファイル名の違いを分ける正規表現の書き方,および処理の書き方が分かりません.
どなたか教えてください!
下が具体例です..
files = Dir.glob("**/*.{html,htm}")
によって取得したファイルは,"main1.html","main2.html","sub1.html","sub2.html"
の4つとする.
"main1"と"main2"で同じ処理,"sub1"と"sub2"で同じ処理を行うように分けたい.
ちょっと分かりにくいかもしれませんが,,
つまり"main〜"ファイルと"sub〜"ファイルで処理を分けたいんです!!
各処理内容は要らないんで,ファイル名による識別とif文の分け方を教えてください!!!
0273デフォルトの名無しさん
2007/12/22(土) 04:48:17Dir.glob("**/*.{html,htm}") { |file|
case File::basename file
when /main/
do_main_with file
when /sub/
do_sub_with file
end
}
0274デフォルトの名無しさん
2007/12/22(土) 04:57:36p "test01.html".scan(/[^\d]*/)[0]
こんなの(xx01xx01.xxx)は無い前提なんだよな?
0275デフォルトの名無しさん
2007/12/22(土) 06:45:41と宣言すると
rb80.tmp:1:in `initialize': invalid regular expression; '[' can't be the last character ie. can't
start range at the end of pattern: /\201[/ (RegexpError)
と言われるのですが、このエラーを回避するにはどうしたらいいですか?
「ー」の文字が良くないみたいなんですが。
0276デフォルトの名無しさん
2007/12/22(土) 06:46:560277デフォルトの名無しさん
2007/12/22(土) 07:03:46処理系は SJIS だとよく意味が分からないので
スクリプトファイルは SJIS とかかな
Ruby インタプリタにスクリプトの文字コードが伝わっていないのが原因
Ruby インタプリタに文字コードを教えてやればいい
スクリプトファイルが hoge.rb として
1.実行時に指定
ruby -Ks hoge,.rb
2.インタプリタの起動オプションを書く
スクリプトファイルの先頭に
#!ruby -Ks
と書いて
/hoge.rb
3.
$KCODE="SJIS"
を
obj=Regexp.new("ー")
より前に書く
0278デフォルトの名無しさん
2007/12/22(土) 07:27:36はい。スクリプトファイルがSJISです。
うまくいきました。
ありがとうございました。
0279デフォルトの名無しさん
2007/12/22(土) 10:01:01実引数名と仮引数名って、別にした方がいいの?
0280260
2007/12/22(土) 10:13:19たとえば下のコードでは、ブラウザに表示されるのは'abc'だけです。
うまくいったと思ったんですけどねぇ。
[略]
print 'abc'
require 'mysql'
print 'def'
[略]
0281デフォルトの名無しさん
2007/12/22(土) 10:31:200282270
2007/12/22(土) 10:45:50はい、そうなんです。
せめてエラーコードが出れば、そこから推測もできるかもしれないのですが、、、
0283デフォルトの名無しさん
2007/12/22(土) 10:49:39ローカルで検証コード動かせ
0284282
2007/12/22(土) 10:58:41やってみましたっ!!
uby my.cgi
Content-Type: text/html
/Library/Ruby/Site/1.8/universal-darwin9.0/mysql.bundle: dlopen(/Library/Ruby/Site/1.8/universal-darwin9.0/mysql.bundle, 9): Library not loaded: /usr/local/mysql/lib/mysql/libmysqlclient.15.dylib (LoadError)
Referenced from: /Library/Ruby/Site/1.8/universal-darwin9.0/mysql.bundle
Reason: image not found - /Library/Ruby/Site/1.8/universal-darwin9.0/mysql.bundle from my.cgi:4
libmysqlclient.15.dylibは調べてみたら、/usr/local/mysql/lib/ にありました。
どうやってパスを修正すればよいのでしょう??
mysql.bundleはちゃんと /Library/Ruby/Site/1.8/universal-darwin9.0/ にありました。
ファイル属性を調べてみたら、
ls -l
-rwxr-xr-x 1 root admin 86264 12 21 23:27 mysql.bundle
でした。問題??
0285デフォルトの名無しさん
2007/12/22(土) 11:22:46file /Library/Ruby/Site/1.8/universal-darwin9.0/mysql.bundle
の結果は?
片方がうにばーさるで片方がi386専用と見た。
0286284
2007/12/22(土) 11:34:31えーと、自力でごにょごにょやっておりましたら、
cd /usr/local/mysql/lib/
mkdir mysql
cd mysql/
sudo cp ../libmysqlclient.15.dylib libmysqlclient.15.dylib
で、ついに通りました!!!みなさまのおかげです!!!
どうもありがとうございました!!!!!!!
ちなみに
file /usr/local/mysql/lib/mysql/libmysqlclient.15.dylib
/usr/local/mysql/lib/mysql/libmysqlclient.15.dylib: Mach-O dynamically linked shared library i386
file /Library/Ruby/Site/1.8/universal-darwin9.0/mysql.bundle
/Library/Ruby/Site/1.8/universal-darwin9.0/mysql.bundle: Mach-O bundle i386
でした。
0287デフォルトの名無しさん
2007/12/22(土) 11:49:40mysql/ がもう1つ入ったパスになってるのね。
0288デフォルトの名無しさん
2007/12/22(土) 21:11:47仮引数のスコープは一部の例外(※)を除いて定義されたメソッド内に限定される為、
実引数と仮引数が同名であっても何ら支障は無い(※eval,erb等のbinding)
わざわざ仮引数名調べて違う名前考えるのも面倒だしな
0289デフォルトの名無しさん
2007/12/22(土) 21:19:470290デフォルトの名無しさん
2007/12/22(土) 21:19:580291デフォルトの名無しさん
2007/12/22(土) 21:22:07サンクス
プログラミングの作法として、どうなんだろうって思った。
そのメソッドの内容からみて、ふさわしい仮引数の名前であれば、
それがたまたま実引数と同じであってもいいよね。
0292デフォルトの名無しさん
2007/12/22(土) 22:31:20data = parse_hoge(html)
def parse_hoge(html)
data = Array.new
…
return data
end
というようなことはしょっちゅうですが何か
改造可能で公開するモジュールではこれやると若干恥ずかしいだろうけど
0293デフォルトの名無しさん
2007/12/22(土) 23:43:510294デフォルトの名無しさん
2007/12/23(日) 01:41:40たとえば、引数がStringとArrayで処理を分けたいのですが。
Arrayも1次元と2次元で処理を分けるなど複雑な事をしたいのですが。
0295デフォルトの名無しさん
2007/12/23(日) 01:50:01あるオブジェクトが具体的に何のオブジェクトに属するか調べるメソッドは
マニュアルのObjectオブジェクトのところに載ってたり載ってなかったりすると思う
0296デフォルトの名無しさん
2007/12/23(日) 02:04:07複雑なこと(他人が理解しづらいこと)しなくていいんじゃない?
他人=コーディングした数ヶ月の自分でもある
文字列だけじゃないならどうしようもないけど
0297デフォルトの名無しさん
2007/12/23(日) 02:11:55メソッドオーバーロードはrubyではできない。こんな感じで自分で処理しなさい
def meth(arg)
if arg.kind_of?(String)
puts '文字列'
else
case arg
when Array then puts '配列'
else puts 'その他'
end
end
end
それとrubyの配列(Array)に次元なんて無い。配列が入れ子になってるだけ。
0298294
2007/12/23(日) 04:58:49なるほど。Objectのメソッドですね。
ありがとうございます。
>>296
それも考えて、ループや型変換で今までやってたんですけど、
すっきりスマートに呼び出したいなーという欲望に駆られましてw
>>297
>>>294=269 か?
ちがいますよー。
>メソッドオーバーロードはrubyではできない。こんな感じで自分で処理しなさい
なるほど。
メソッドの中で分岐させればいいわけですね。
考えてみれば、この方がオーバーロードより単純に処理できますね。
ありがとうございました。
>それとrubyの配列(Array)に次元なんて無い。配列が入れ子になってるだけ。
そうなんですか。
2次元のデータを扱おうと思ってて、Cと同じ感じでやろうと思ってるんですが、良くないんでしょうか?
概念が違いますか?
0299240
2007/12/23(日) 05:54:50>>298
概念は全然違う。
2次元配列風に使う分には問題ないと思うが、違いを分かって使わないと細かいことを
し始めたとき引っかかるかも。
例えば(Cでいう)1次元配列と2次元配列とで処理を分けたいのなら、Arrayの要素が
全てArrayであり、そのArray内のArrayの要素数が全て同じであることをあらゆる
配列アクセス時にチェックしないといけない。
arr[5][10]のように使いたい場合、「君の仕様上」間違ってarr[5][11]に代入しても
Rubyではエラーにならないので、真面目に2次元配列として使いたいならばArrayを
継承してそういうチェックを代入時や参照時にするようなメソッドを足す必要がある。
このチェックだけ足せばいいってわけでもないけど、とにかくCの2次元配列とは違う
ものだとわかった上で使わないと、罠にはまるだろうね。
0300デフォルトの名無しさん
2007/12/23(日) 06:56:02このコードはないわ。
>def meth(arg)
> case arg
> when String ; puts '文字列'
> when Array ; puts '配列'
> else ; puts 'その他'
> end
>end
または
>def meth(arg)
> if arg.kind_of?(String)
> puts '文字列'
> elsif arg.kind_of?(Array)
> puts '配列'
> else
> puts 'その他'
> end
>end
0301デフォルトの名無しさん
2007/12/23(日) 07:20:36ioctl(2) は見た?
何をしたいのかは俺にはわからんが、0 が返るのは正常な動作みたいだよ?
0302デフォルトの名無しさん
2007/12/23(日) 07:57:14while...endループの前に一度だけ実行してほしいものは
どのように書けばいいでしょうか。
0303デフォルトの名無しさん
2007/12/23(日) 08:34:55どちらかといえば、引数を見て処理を分けるよりも
違う型の引数をとるメソッドには、それぞれ違う名前を与えるべき
つまりStringを受けるメソッドと、1次元Arrayを受けるメソッド
そして2次元Arrayを受けるメソッド、三種類のメソッドを作る方がいいと思う
実際にどんな処理がやりたいのか分からないから、明確な助言はできないが
0304デフォルトの名無しさん
2007/12/23(日) 09:48:362次元配列(って何?)を1次元配列や文字列と区別せず受け取るメソッドの見当がつかない
もしかしたらメインは2次元配列で、1次元配列や文字列を受け取ったとしても内部的に2次元配列に変換するぜという動作なのかもしれないけど
0305デフォルトの名無しさん
2007/12/23(日) 10:54:32とぶん、>>297は、横着して、ひとつのコードで、それら両方の手段を示したかったんだと思うw
0306デフォルトの名無しさん
2007/12/23(日) 11:58:40ruby -ne 'BEGIN { puts "only once" }' -e 'print $_' < input
0307デフォルトの名無しさん
2007/12/23(日) 12:34:25}
で`foo`の終わりを待たずに順次実行って出来ないの?
0308デフォルトの名無しさん
2007/12/23(日) 12:37:070309デフォルトの名無しさん
2007/12/23(日) 12:51:450310デフォルトの名無しさん
2007/12/23(日) 12:52:09open('foo | tail -f') do |file|
file.each_line do |line|
...
end
end
とか。
探すとFile::Tailってのもあるようだが。これはIOじゃなくFile限定なのかな。
0311310
2007/12/23(日) 12:53:140312デフォルトの名無しさん
2007/12/23(日) 14:13:03splitをはさんでるからじゃね?
`foo`の結果は文字列なんだから
`foo`.each_line do |line| .. end
でいいと思う。
0313デフォルトの名無しさん
2007/12/23(日) 14:14:09ごめん、まちがった。
`foo` が文字列を返すから、fooがすべて終了しないと返ってこないわな。
310のようにI/Oつかうしかないと思う。
0314デフォルトの名無しさん
2007/12/23(日) 14:57:09I/O 使うのはそうだと思うが、 >>310 はダメだろ。
0315デフォルトの名無しさん
2007/12/23(日) 15:57:06http://rubyinstaller.rubyforge.org/wiki/wiki.pl?RubyInstaller
以前、OneClickInstaller で入れたのですが、
同じく OneClickInstaller (1.8.6-26 final)で、アップデートしようとしたら、
一旦、gemとかライブラリなど、丸ごとディレクトリを消して、インストールしやがりました。
いや、インストーラーが、消しますかって言ってたし、
ディレクトリのバックアップは取ってあるからよいのですけど。
※ちなみに、要望で、OneClickUpdater が希望されてますけど、スルーされてる orz
この場合どうやって、アップデートするのがよいでしょうか?
・ActiveScriptRuby で上書き(できれば)
・mswin32 で上書きコピー
というか、バイナリ的には、変わらないのかな?
0316デフォルトの名無しさん
2007/12/23(日) 16:25:42>どちらかといえば、引数を見て処理を分けるよりも
>違う型の引数をとるメソッドには、それぞれ違う名前を与えるべき
ええ。まぁ。
自分の好みの形で変数の内容をファイルに書き出したいだけなので。
取り出すときに一つの命令で出せるとコードがすっきりすると思うので。
joinとかで整形しても良いんですが、何か一つの命令でまとめて、
内部で勝手に判断して書き出してくれると、
本編のループが減ってがすごくすっきりしますから。
0317デフォルトの名無しさん
2007/12/23(日) 16:32:40なるほど。
Cの様に範囲の決まった連続したメモリ構造というより、
リンクやTREE構造という事ですか。
だから、間違った位置に代入するとかそういうヒューマンエラーを
コンパイラがチェックしてくれないので気を付けないといけない訳ですね。
もしかすると、新たにクラスを作って配列みたいに使える機能とかを
組み込んでも良いですねw
なんだか、汎用ライブラリにできそうですが。
型チェックを行うクラスというか。そんな感じの物を。
そうすると、より堅牢な形になりそうですね。
0318315
2007/12/23(日) 17:48:21ActiveScriptRuby
http://arton.hp.infoseek.co.jp/indexj.html
はじめ、ActiveScriptRuby をインストーラーから入れたのですが、
rubyのバージョンを確認しても、アップデートされてなくて、
一旦アンインストールして、もう一度、インストールしたら、アップデートされていました。
ただ、bin/gems などの(.batじゃないやつ) 先頭のrubyのパスが正しくないので、
cygwinなどから使えなかったのですが、
コマンドプロンプトから、gem を update したら直りました。
ありがとうございました。
0319デフォルトの名無しさん
2007/12/23(日) 18:54:48つ NArray
0320デフォルトの名無しさん
2007/12/23(日) 20:39:57Cで同じ事やってるの見付けたんだけど
1: struct ifreq ifr;
2: memset(&ifr, 0, sizeof(ifr));
3: strncpy(ifr.ifr_name, "eth0", IFNAMSIZ);
4: ioctl(pd, SIOCGIFINDEX, &ifr);
5: index = ifr.ifr_ifindex;
これだと5行目で情報を返してもらうための構造体をioctlに渡してる。
240で渡してる"lo"をstruct ifreq相当の何かに変えないといけないんでない?
0321デフォルトの名無しさん
2007/12/23(日) 21:12:21おお、こんなのあったのね。
と思ったが、クソ重いrubyでやる意味あんのかね・・・
0322デフォルトの名無しさん
2007/12/23(日) 21:27:05> 自分の好みの形で変数の内容をファイルに書き出したい
俺なら、まず二次元配列用のクラスを作る。
その上で、書き出したいデータの各クラスに
例えば to_myfile とか共通のメソッドを定義。
ファイルに書き出す時は、書き出すところでクラスを判別するのではなく
引数の各オブジェクトに対して to_myfile した結果を使うようにする。
つまり出力形式はオブジェクト側に任せる。
0323デフォルトの名無しさん
2007/12/23(日) 21:29:21仕方なく判別するけど。
0324デフォルトの名無しさん
2007/12/23(日) 21:58:05なるほど。
そういう考え方もありますね。
オブジェクトごとに違ったファイルに書く場合なんかは便利そうですね。
0325デフォルトの名無しさん
2007/12/23(日) 22:07:40メソッドに任せる意味はある。
0326320
2007/12/23(日) 22:27:03× これだと5行目で
○ これだと4行目で
0327デフォルトの名無しさん
2007/12/24(月) 06:13:580328デフォルトの名無しさん
2007/12/24(月) 06:40:29なさげ
0329デフォルトの名無しさん
2007/12/24(月) 20:51:14arr1=["a","b","c","d"]
value=[],[]
i=0
arr1.each {|s|
value[i].push s
i+=1
}
p value.join("\n")
とすると,
value[i].push s
で
undefined method `push' for nil:NilClass (NoMethodError)
クラスメソッドがないと言われます.
多次元配列のメソッドを呼び出すにはどう表記したら良いんですか?
0330デフォルトの名無しさん
2007/12/24(月) 21:04:10ネストした配列はネストした配列以上のものではない
arr[0][1]はarrの0番目の要素のオブジェクトの[]メソッドに引数として1を渡したものを表現しているに過ぎない
以上を踏まえると、value[i]は配列[]の0番目の要素つまりnilだ
0331デフォルトの名無しさん
2007/12/24(月) 21:17:28というかこれはそれ以前のアレで、arr1 の "c" に対応するべき value[2] が nil だからじゃね
「まず value[i] が [] でないなら each から即抜ける」という処理を入れるのが順当かと
0332デフォルトの名無しさん
2007/12/24(月) 21:18:153行目が少し高度で理解を超えています.
つまり,配列とは,クラスメソッドの中でインスタンス化される新たな
クラスという事なんでしょうか?
つまり,カラのオブジェクトにpushを指定しているのでエラーが出てると言うことですかね?
0333デフォルトの名無しさん
2007/12/24(月) 21:27:08Net::HTTP#headでいいんじゃない?
MechanizeをrequireしたらNet::HTTPもつかえるんだから。
0334デフォルトの名無しさん
2007/12/24(月) 21:27:13つまり、空の配列2つを要素に持つ配列
value[0] : []
value[1] : []
value[2] : nil
> カラのオブジェクトにpushを指定しているのでエラーが出てると言うことですかね?
空のオブジェクトというものでは無く、
エラーメッセージの通りnilがpushを持っていないということ
0335デフォルトの名無しさん
2007/12/24(月) 21:31:01each の中で value を表示させてみる
(inspectはオブジェクトを「pで表示する時の文字列」にするメソッド)
arr1=["a","b","c","d"]
value=[],[]
i=0
arr1.each {|s|
puts "sは#{s}で、value[#{i}]は#{value[i].inspect}です"
value[i].push s
i+=1
}
結果
sはaで、value[0]は[]です
sはbで、value[1]は[]です
sはcで、value[2]はnilです
./value.rb:6: undefined method `push' for nil:NilClass (NoMethodError)
from ./value.rb:4:in `each'
from ./value.rb:4
0336デフォルトの名無しさん
2007/12/24(月) 21:33:20やりたいことは,2次元の配列の2次元目にArrayオブジェクトを入れたいのです.
図ですと
value.0.0 ->a
value.0.1 ->b
value.0.2 ->c
value.0.3 ->d
こんなイメージです.
入れるオブジェクトの量は可変なのでpushなどで押し込めれば簡単ではないか
と考えているのですが,やはりiを使って挿入すべきでしょうか?
考えてみたら,変数のサイズは気にしなくて良いし,iで回しても良いような気もしてきましたが...
0337デフォルトの名無しさん
2007/12/24(月) 21:39:44君が使っているのは普通のメソッド(=インスタンスメソッド)だけだ
で、>>336で言ってる「2次元の配列の2次元目にArrayオブジェクトを入れたい」ってのは
何がしたいのか良く分からないが(Array入れてないし)
たぶんこうなんだろうという予想の元にコードを書くと
CHARS = ['a', 'b', 'c', 'd']
values = [ ]
CHARS.each_with_index do |c, index|
values[index] = [c]
end
p values #=> [["a"], ["b"], ["c"], ["d"]]
0338デフォルトの名無しさん
2007/12/24(月) 21:44:56value = [[], []]
arr1.each {|s|
value[0].push s
}
p value #=> [["a", "b", "c", "d"], []]
0339デフォルトの名無しさん
2007/12/24(月) 21:48:490340デフォルトの名無しさん
2007/12/24(月) 21:52:44「value=[],[]」にしたように見えるんだけどな
どんな結果が欲しいのか >>336 だと良くわからん
>>337-338 の最後の行みたいなの書いてくれ
0341デフォルトの名無しさん
2007/12/24(月) 22:08:06arr1=["a","b","c","d"]
arr2=["A","B","C","D"]
value=[],[],[]
i1=0
i2=0
arr1.each {|s1|
value[i1][i2].push s1
arr2.each {|s2|
value[][i2].push s2
i2+=1
}
i1+=1
}
p value.join(" , ")
0342デフォルトの名無しさん
2007/12/24(月) 22:09:05なので3次元に拡張します.
value.0.0.0 ->a
value.0.1.0 ->A
value.0.1.1 ->B
value.0.1.2 ->C
value.0.1.3 ->D
value.1.0.0 ->b
value.1.1.0 ->A
value.1.1.1 ->B
value.1.1.2 ->C
value.1.1.3 ->D
value.2.0.0 ->c
value.2.1.0 ->A
value.2.1.1 ->B
value.2.1.2 ->C
value.2.1.3 ->D
こんな感じの構造の配列がほしいのですが...
それとも,クラスをつくったほうがいいのかな...
0343デフォルトの名無しさん
2007/12/24(月) 22:11:42もしかしてただの行列なのでは?
0344デフォルトの名無しさん
2007/12/24(月) 22:13:02arr2はループごとに内容が変わります.
意味的には,arr1の要素にarr2の内容が関連する
という様な構造を表現したいのですが.
配列はそのためのもので,配列でなければならないという
訳ではありません.
0345デフォルトの名無しさん
2007/12/24(月) 22:22:21value.0.0.0 ->a
value.0.1.0 ->A
value.0.1.1 ->B
value.0.1.2 ->C
value.0.1.3 ->nil
value.1.0.0 ->b
value.1.1.0 ->A
value.1.1.1 ->B
value.1.1.2 ->nil
value.1.1.3 ->nil
value.2.0.0 ->def
value.2.1.0 ->X
value.2.1.1 ->aaa
value.2.1.2 ->BDTAR
value.2.1.3 ->nil
こんな感じなんですが.
設計がまちがってますかね?
クラス化した方がいろいろとわかりやすいかもとか思い始めてますが,
配列の方が工数が少ないと思うので,配列で済ませちゃおうとか
考えているのですが.
そして,
if value.2.1.1=~ /aa/ then
みたいなこともやろうと思ってるんですが.
0346デフォルトの名無しさん
2007/12/24(月) 22:28:02エスパーが現れて、ズバリなコード書いてもあなたには理解できんと思うよ
0347デフォルトの名無しさん
2007/12/24(月) 22:29:41「変数の内容がどんな風に変わるのか」ではなく
「何をしてくれるプログラムを書きたいのか」を
0348デフォルトの名無しさん
2007/12/24(月) 22:40:461. ある語句があって,その語句と関連する語を纏めた形の
構造を持つ変数,またはオブジェクトが欲しいのです.
たとえば
aに関連する物は[A,B,C,D,E,F]の6つである
とか.
2. そして,この様な条件はすべて違っていて,数千程度あります.
3. そして,ある文字列中に[A,B,C,D,E,F]のいずれかが
含まれている場合, a であると見なす.
と言う風に使いたい.
と言った感じです.
人工知能(無能)風な判定を目指してるんですがw
0349デフォルトの名無しさん
2007/12/24(月) 22:42:01value=Array.new
arr1.each_with_index{|s,i|
value[i] ||= Array.new
value[i][0] = s
}
p value
0350デフォルトの名無しさん
2007/12/24(月) 22:44:400351デフォルトの名無しさん
2007/12/24(月) 22:45:37ええ.まぁ,なんか手に余るなぁと考え始めてますww
同様のプログラムをhspで組んで使ってるんですが,
文字コードの問題や文字の代入制限(32kbyte)や正規表現の有無で
こっちに乗り換える事にしました.
日曜プログラマなので,詳しい語の使い間違いとかはご容赦ください.
0352デフォルトの名無しさん
2007/12/24(月) 22:52:35a => [A,B,C]
b => [A,D,E]
c => [A,F,G]
の時、 文字列 'A' は、a-c のどれになるんだ?全てに一致する?
それとも、関連する語は重複しないのか?
0353デフォルトの名無しさん
2007/12/24(月) 22:59:06私のプログラムではAが重複しにくい分野なのでほとんど問題になりません.
なる場合でも,複数にマッチする場合は処理を分けるとかしようと思ってるんですが.
重みを計算してより近い物を判定するとか(これは判定用のdbを用意したり,
膨大なコストが掛かるので私レベルでは無理ですが)そういうのも有りかと.
0354デフォルトの名無しさん
2007/12/24(月) 23:10:29a : A,B,C,D,E
b : F,G,H,I
EOL
index = Hash.new
input.each{|line|
key,values = line.chomp.split(':')
key = key.strip
values.split(',').each{|item|
index[item.strip] = key
}
}
if "TARGET" =~ /(#{index.keys.join('|')})/
puts index[$1]
end
if "GET" =~ /(#{index.keys.join('|')})/
puts index[$1]
end
0355デフォルトの名無しさん
2007/12/24(月) 23:10:38重複する時は、どちらを選択するか決定する方法を先に考えておかないと何作っても無駄
0356デフォルトの名無しさん
2007/12/24(月) 23:23:192.times {
p defined?(v) # (A)
v = 1 # ここ(宣言開始)から
p v # ここ(ブロックの終り)までが v のスコープ
}
の結果でdefined?(v) の結果が両方nilになるのがわからないです
ブロックが実行されるたびにスコープが初期化(という言い回しでいいの?)わけじゃないよね
0357デフォルトの名無しさん
2007/12/24(月) 23:27:42以下でできました\(^o^)/
arr1=["a","b","c","d"]
arr2=["A","B","C","D"]
arr3=["E","F","G"]
value=Array.new
arr1.each_with_index{|s,i1|
value[i1] ||= Array.new
value[i1][0] ||= Array.new
value[i1][0][0] = s
if (i1 % 2) == 0 then
arr2.each_with_index{|s,i2|
value[i1][1] ||= Array.new
value[i1][1][i2] = arr2[i2]
}
else
arr3.each_with_index{|s,i2|
value[i1][1] ||= Array.new
value[i1][1][i2] = arr2[i2]
}
end
}
p value
どうもありがとうございました.
0358デフォルトの名無しさん
2007/12/24(月) 23:33:02末端まで行ったらvは消去されちゃうじゃん。
0359デフォルトの名無しさん
2007/12/24(月) 23:33:54配列を使うよりは、>>350 >>355で言われてるように
RELATION_TABLE = {}
RELATION_TABLE['a'] = ['A', 'B', 'C', 'D', 'E', 'F']
というように、ハッシュで関連性を定義しておいて
あとはこのハッシュを使って処理するのがベストだろうと思う
多次元配列を使うと、どうしてもコードが複雑になりがち
クラス定義を使えばさらにすっきりする
>>356
ブロックが実行されるたびに、スコープは初期化「されている」
0360デフォルトの名無しさん
2007/12/25(火) 00:02:41ハッシュですか.
呼び出す時にはどう扱えばよいものか...
勉強してみます.
0361デフォルトの名無しさん
2007/12/25(火) 00:23:46了解です
0362デフォルトの名無しさん
2007/12/25(火) 04:04:24たぶんだけど、やりたいことはこれでできるような気がする
arr1 = ["a","b","c","d"]
arr2 = ["A","B","C","D"]
arr3 = ["E","F","G"]
value = []
arr1.each {|s|
arr = i % 2 == 0 ? arr2 : arr3
value << [[s], arr.dup]
}
0363デフォルトの名無しさん
2007/12/25(火) 10:02:44インスタンスメソッド→Hoge#piyo
クラスメソッド→Hoge.foo
なん?
Hoge.piyo, Hoge::piyoじゃなくて
0364デフォルトの名無しさん
2007/12/25(火) 10:19:440365デフォルトの名無しさん
2007/12/25(火) 11:11:02確か何か他の言語でインスタンスメソッドを表すのに # 使ってるんじゃないっけか
0366デフォルトの名無しさん
2007/12/25(火) 19:29:10Process ruby trace/BPT trap
dyld: NSLinkModule() error
dyld: Symbol not found: _rl_filename_completion_function
Referenced from: /usr/lib/ruby/1.8/i686-darwin8.10.1/readline.bundle
Expected in: flat namespace
Process ruby trace/BPT trap
とでて使えません
terminalでirbを動かすことはできてます
どうすればいいでしょうか
0367デフォルトの名無しさん
2007/12/25(火) 19:51:04ttp://homepage.mac.com/matsuan_tamachan/software/ReadLine.html
みれ。あとはAppleにですね、OSX
0368デフォルトの名無しさん
2007/12/25(火) 19:51:440369デフォルトの名無しさん
2007/12/25(火) 22:59:17Mac OS X 10.5(Leopard)のRubyはそれ使ってる。
0370デフォルトの名無しさん
2007/12/25(火) 23:13:36ある任意の定数0<a<1について、
0をaの確率で出して、
1, 2, 3をそれぞれ(1-a)/3
の確率で出すメソッドはどうやって作ればいいでしょうか?
0371デフォルトの名無しさん
2007/12/25(火) 23:25:010372デフォルトの名無しさん
2007/12/25(火) 23:28:10知らなかった。
さんくる
0373デフォルトの名無しさん
2007/12/25(火) 23:31:29以下は疑似コードです。
# druby サーバ (root 権限で動作)
class DrubyServer
def sudo
yield
end
end
# クライアント (一般ユーザ権限で動作)
DRb.start_service
server = DRbObject.new_with_uri( "druby://foobar:1234" )
server.sudo do
system( "id -u" )
end
ここで、クライアントの実行結果は 0 (root) になってほしいんですが、一般ユーザの id (1000) が帰ってきます。
root コマンドを実行してくれるようなサーバを作りたいんですが、どうしたらよいですか?
0374デフォルトの名無しさん
2007/12/26(水) 01:06:51ブロックの評価はローカルで行われるらしい。これじゃダメか?
# サーバ
class DrubyServer
def sudo(cmd) ; `#{cmd}` ; end
end
# クライアント側実行部分
server.sudo('id -u')
0375デフォルトの名無しさん
2007/12/26(水) 01:34:38たとえば
value = { /(www\d?|pc\d?)\.2ch\.net/ => "2ちゃんねる"}
p value['www.2ch.net'] #2ちゃんねる
という感じの事がしたいんですが.
0376デフォルトの名無しさん
2007/12/26(水) 04:03:19一意のキーに対して、オブジェクトが割り当てられるのがハッシュではないんかな?
ハッシュ風に正規表現で、マッチしたのなら、そういうクラスを作るか、
値を返したいのなら、そう組むべきではないかな?
そう組む場合
urls = []
urls << {:reg => /(www\d?|pc\d?)\.2ch\.net/, :value => "2ちゃんねる"}
urls << ・・・
みたいにして、
あとは、
def match_url(url)
urls.each do |item|
return item[:name] if item[:reg] =~ url
end
nil
end
みたいな
0377デフォルトの名無しさん
2007/12/26(水) 05:18:36class Hoge
def initialize(hash)
@table = hash
end
def [](str)
@table.each_pair{|reg, val|
return val if reg =~ str
}
return nil
end
end
foo = Hoge.new({/f.*/ => "Foo", /fo.*/ => "ふ〜", /b.*/ => "Bar"})
p foo["a"]
p foo["b"]
p foo["f"]
p foo["fooooo"] # /f.*/, /fo.*/ でマッチ
複数の hash のキーになってる正規表現の表す範囲は重複しないと仮定。
0378デフォルトの名無しさん
2007/12/26(水) 06:21:44データーベースのクローズって必須じゃないんでしょうか?
理屈としては,トランザクション処理だけ適切にやれば,
明示的クローズなしてもスクリプト終了時にはクローズして
くれそうなんだけども,
SQLite3::Databese.newには,ブロックは渡せないようだし,
本来ならbegin-ensure-endでクローズを保証しなきゃないないよう
な気がするけど,サンプルコードみても,そんなことしてないようだし。
0379デフォルトの名無しさん
2007/12/26(水) 07:53:241. 普通いらない。常識通り。
2. WEBrick の HTTPServlet だったりなんかするとプロセスが終了しないからどこかで閉じないと死ねる。
まあ、ふつう。
0381デフォルトの名無しさん
2007/12/26(水) 14:44:51Ruby1.90 がなにやら大々的にリリースされましたが、開発不安定版である 1.9系列はこのスレでは扱いません
Ruby0.9 は 1.8 を熟知した人だけが違いを認識した上で自己責任でお使いください
現在の最新安定版は 1.86です
1.90 の安定性が上がるのは 1年くらい先といわれていますので頼りにしないでね
0382デフォルトの名無しさん
2007/12/26(水) 15:01:35おちつけw
0383デフォルトの名無しさん
2007/12/26(水) 15:04:55プログラムやってる人は高速タイピングできない人が少なくないとはいえ、
たかが3桁程度の数字をホームポジション付近から手を離してテンキー入力だなんて却って面倒じゃね?
0384デフォルトの名無しさん
2007/12/26(水) 15:10:400385デフォルトの名無しさん
2007/12/26(水) 19:04:39例えば obj.class.ancestors が [Child, Parent, Object, Kernel] のとき、obj.to_s がどのクラスで定義されているのかを知りたい、
またはto_sを定義しているクラスを全て知りたいということです。
singleton methodはとりあえず考えなくて結構です。
0386デフォルトの名無しさん
2007/12/26(水) 19:29:03Module に良さげなメソッドが有るから自分で探しなさい
0387デフォルトの名無しさん
2007/12/26(水) 21:08:48そんな便利なメソッドはないだろ?
0388デフォルトの名無しさん
2007/12/26(水) 21:46:42どれくらい便利なら満足なんだ?
0389デフォルトの名無しさん
2007/12/26(水) 22:01:430390デフォルトの名無しさん
2007/12/26(水) 22:03:370391デフォルトの名無しさん
2007/12/26(水) 22:19:49>むりぽ。
>一意のキーに対して、オブジェクトが割り当てられるのがハッシュではないんかな?
そうですか。
>>377
なるほど。イテレーターで総当たりするのですね。
ありがとうございます。
0392385
2007/12/26(水) 22:46:12>Module に良さげなメソッドが有るから自分で探しなさい
ないと思います。
例えばinstance_methodsは継承したメソッドも含まれるため、求めるものではありません。
Child.instance_methods - Parent.instance_methods だと、親クラスのメソッドを子クラスで上書きしている場合にそれが含まれないため、やはり求めるものではありません。
0393デフォルトの名無しさん
2007/12/26(水) 22:46:22moduleというのがそれっぽいのですが、微妙に違う気もします。
moduleをnamespace代わりに使ってしまってOKですか?
0394デフォルトの名無しさん
2007/12/26(水) 22:50:22その分、文法を簡単にしてる感じ。
0395デフォルトの名無しさん
2007/12/26(水) 22:54:32Python使えばいいだろ
0396デフォルトの名無しさん
2007/12/26(水) 22:59:440397デフォルトの名無しさん
2007/12/26(水) 23:00:350398デフォルトの名無しさん
2007/12/26(水) 23:19:38> to_sを定義しているクラスを全て知りたい
p obj.class.ancestors.select{|klass| klass.instance_methods(false).include?("to_s") }
0399デフォルトの名無しさん
2007/12/26(水) 23:24:01> obj.class.ancestors が [Child, Parent, Object, Kernel] のとき、obj.to_s がどのクラスで定義されているのかを知りたい、
class Object
def my_meth(meth_name)
self.class.ancestors.each{|clas|
puts "class #{clas}"
p clas.method_defined?(meth_name)
}
end
end
foo = []
foo.my_meth(:to_s)
よく探そう。
0402デフォルトの名無しさん
2007/12/27(木) 01:13:00class Parent; def to_s; end end
class Child < Parent; end
obj = Child.new
obj.my_meth(:to_s)
=> [Child, Parent, Object, Kernel]
になるんだが?
0403399
2007/12/27(木) 01:35:29ありゃ、ほんとだ。
(Enumerable module で) false が出てるから調べられてるんだろうと勘違いしてしまった。
お前がよく調べろよって話だね。
すみません。
0404デフォルトの名無しさん
2007/12/27(木) 02:15:51Hashのキーに正規表現(つか、regexp)OKだったのか。
というか、任意のオブジェクトぶちこんでもOk?
勉強不足だな、俺・・・
0405デフォルトの名無しさん
2007/12/27(木) 02:27:14相手がソケットをcloseした状態では、こちらのwrite_nonblock('')が成功します。
相手のプロセスが終了して初めてwrite_nonblockで例外があがるようです。
受信側はread_nonblockで判別できるようですが、データを受信してしまいます。
できればよけいなデータの送受信無しで判別したいのですが。
1当方環境はこの通りです。
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-freebsd7]
windowsでもちょっと試してみましたが、ほぼ同じ挙動のようですね。
0406デフォルトの名無しさん
2007/12/27(木) 02:32:52嵌っています。
OS: XP home
ruby:1.8.6
rails:1.2.5
apach:2.0.61
■aoache error.log
[Thu Dec 27 01:37:32 2007] [error] [client 127.0.0.1] (OS 109)パイプは終了しました。 : FastCGI: comm with server "E:/rails/HelloWorld/public/dispatch.fcgi" aborted: GetOverlappedResult() failed
[Thu Dec 27 01:37:32 2007] [error] [client 127.0.0.1] FastCGI: incomplete headers (0 bytes) received from server "E:/rails/HelloWorld/public/dispatch.fcgi"
[Thu Dec 27 01:37:32 2007] [warn] FastCGI: (dynamic) server "E:/rails/HelloWorld/public/dispatch.fcgi" (pid 2356) terminated with exit with status '0'
■production.log
E:/rails/HelloWorld/public/dispatch.fcgi:24
undefined method `downcase' for nil:NilClass
C:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/request.rb:22:in `method'
C:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/routing.rb:1366:in `extract_request_environment'
・
C:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/fcgi_handler.rb:25:in `process!'
ためしにapacheのホスト設定をそのままに、.htaccess内の定義を変更してCGIで動作させたところ
問題なく動作するのですが、fast_cgiにしようとすると上記エラーが発生してアプリケーションエラーが出てしまいます。
どなたか解決錯誤存知の方いらっしゃいますでしょうか?
0407405
2007/12/27(木) 02:47:06相手がcloseした後に1byteでも送信し(これは常に成功する?)、
再度書き込みしようとしたときに例外があがる、なのかな。
先のプロセス終了云々の発言は忘れてください。
ともかく、送受信無しで接続が持続しているか確認したい、ということです。
0408デフォルトの名無しさん
2007/12/27(木) 03:48:12Rubyに限らず、それは不可能。
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.8
0409デフォルトの名無しさん
2007/12/27(木) 03:58:00なるほど、これは大変参考になりますね。
socketについてまだよく分かっていないので、
じっくり読んでみます。
ありがとうございました。
0410デフォルトの名無しさん
2007/12/27(木) 05:34:44>C:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/request.rb:22:in `method'
request.rbの22行目をみればわかるけど、
22: @env['REQUEST_METHOD'].downcase.to_sym
という部分がエラーになってる。
つまり環境変数REQUEST_METHODがセットされてないから@env['REQUEST_METHOD']がnilになり、それに .downcase しようとしてエラーになっている。
CGIではこの環境変数が設定されて、FastCGIでは設定されないんだろう。
22行目の直前で $stderr.puts @env.inspect とでもすれば確かめられる。
解決策はしらん。
(@env['REQUEST_METHOD'] || 'get').downcase.to_sym
にしたら動くと思うけど、正しい解決策という保証はない。
しかしなんでFastCGI?
0411デフォルトの名無しさん
2007/12/27(木) 12:30:02xcodeをいじれば出来るのかしら…。
0412デフォルトの名無しさん
2007/12/27(木) 13:46:41NetBeans
0413デフォルトの名無しさん
2007/12/27(木) 14:16:250414411
2007/12/27(木) 15:04:000415デフォルトの名無しさん
2007/12/27(木) 22:19:05何か目安でもあれば教えてください。
def kuroji?(income, outgo)
income.to_f > outgo.to_f #ここですべき?
end
if /income: (\d+), outgo: (\d+)/ =~ str
p kuroji?($1.to_f, $2.to_f) #ここですべき?
end
0416デフォルトの名無しさん
2007/12/27(木) 23:31:480417デフォルトの名無しさん
2007/12/27(木) 23:45:32to_sだと他のとこからも使うメソッドかどうかとかちょっと考える
to_aとかは論外
0418デフォルトの名無しさん
2007/12/28(金) 03:14:14正規表現で切り出すまででなく、適切に変換する
のも文字列の解析に含まれると思うので。
0419デフォルトの名無しさん
2007/12/28(金) 04:46:18Fixnum等々を考慮してメソッド内でto_fするってのなら分かるけど
0420デフォルトの名無しさん
2007/12/28(金) 07:54:57あるメソッドの定義のなかで配列と代入を組み合わせると予想外のことが起きます.定義が問題ではなくて,配列と代入の組合せが問題のようです.たとえば
a=[1,2,4]
b=a
p b
b[1]=a[0]
p b
p a
b[0]=a[1]
p b
p a
を実行すると,
[1, 2, 4]
[1, 1, 4]
[1, 2, 4]
[2, 1, 4]
[1, 2, 4]
になると予想しました.b=a はずっと効いているわけではないはずだから.しかし実際は以下のように出ました.
[1, 2, 4]
[1, 1, 4]
[1, 1, 4]
[1, 1, 4]
[1, 1, 4]
a と b が同じものになってしまっているわけです.これはどういう理屈でしょうか.予想したものを出す分かりやすい方法も挙げてもらえると助かります.
ruby 1.8.2 (2004-12-25) [universal-darwin8.0]
0421デフォルトの名無しさん
2007/12/28(金) 08:11:01b=a.dup
0422デフォルトの名無しさん
2007/12/28(金) 08:24:25p a.object_id
b=a
p b.object_id
b[1]=a[0]
p a.object_id,b.object_id
b[0]=a[1]
p a.object_id,b.object_id
538408680
538408680
538408680
538408680
538408680
538408680
同じかどうかはobject_idで調べること
> b=a はずっと効いているわけではない
じゃあ「どこで」「どういう理屈で」切れるん?
0423デフォルトの名無しさん
2007/12/28(金) 08:28:12Thanks! .dup というのを知りませんでした.それを調べれば理由が分かるかなと思います.
回避法としては b=a を以下に変更することを考えていたのですが,教えてくださったやり方が素直ですね.
b=Array.new(3)
b.each do |k|
# b[k]=a[k] if not (k=0 or k=1)
end
0424デフォルトの名無しさん
2007/12/28(金) 08:44:02>同じかどうかはobject_idで調べること
なるほど,代わりに b=a.dup とすれば指すものが変わりますね.
>> b=a はずっと効いているわけではない
>じゃあ「どこで」「どういう理屈で」切れるん?
以下からの誤った類推でした.
x=1
p x.object_id
y=x
p y.object_id
y=3
p x.object_id, y.object_id
最後の id がほかと異なります.
0425デフォルトの名無しさん
2007/12/28(金) 14:30:54変数 = 何か
は、変数そのものが指し示す先を指定する。
配列[添字] = 何か
は、配列に対して []= というメソッドを呼ぶ。
呼ばれた配列は自分の持ってる(添字)番目の要素が
(何か)を指すように書き換える。
0426デフォルトの名無しさん
2007/12/28(金) 16:32:02119844442みたいなのです。
0427デフォルトの名無しさん
2007/12/28(金) 16:50:51irb> p Time.now.to_i
1198828133
UNIX Time とか epoch time とか呼ぶ
マニュアルでは「起算時からの経過秒数」という正確過ぎて目に留まらない表現になってるな
0428デフォルトの名無しさん
2007/12/28(金) 16:50:53http://www.ruby-lang.org/ja/man/?cmd=view;name=Time
に書いてない?
0429デフォルトの名無しさん
2007/12/28(金) 17:27:35ローカルで見れるHTMLとか欲しかったな
0431デフォルトの名無しさん
2007/12/28(金) 18:34:10見られる、な。
とりあえずchmを解凍しろ
0432デフォルトの名無しさん
2007/12/28(金) 19:25:00うおー各ページへのリンクが全部 / から始まる絶対URLだ
0433デフォルトの名無しさん
2007/12/28(金) 21:47:48そこでrubyですよ
0434デフォルトの名無しさん
2007/12/29(土) 02:14:12見やすい。というか、小奇麗。
http://rails2u.com/
これの、1.8.6版がほしい
0435デフォルトの名無しさん
2007/12/29(土) 02:34:520436デフォルトの名無しさん
2007/12/29(土) 08:07:220437デフォルトの名無しさん
2007/12/29(土) 08:23:11ttp://i.loveruby.net/ja/prog/refe.html
0438デフォルトの名無しさん
2007/12/29(土) 08:42:53str = "/"
str.?? => "%EF%BC%8F"
どの変換メソッド使えばいいんじゃろ?
0439デフォルトの名無しさん
2007/12/29(土) 08:58:30URI.escape(str)
もちろん元のエンコーディングで結果は変わる。
%EF%BC%8F だと、もとの全角スラッシュはUTF-8だな。
0440デフォルトの名無しさん
2007/12/29(土) 09:40:33さっそくやったら、
%81%5E
が出てきました。
元のエンコーディングっつうのはどうすれば・・?
0441デフォルトの名無しさん
2007/12/29(土) 10:29:57require 'nkf'
str = '/'
str_u8 = NKF::nkf('-Sw', str) # Shift_JISから(S)、UTF-8へ(w)
のように変換する必要があると桃割れ。
0442デフォルトの名無しさん
2007/12/29(土) 12:08:33段階を踏むことでできました
require 'uri'
require 'nkf'
str = '/'
str_u8 = NKF::nkf('-Sw', str) # Shift_JIS → UTF-8
URI.escape(str_u8) => %EF%BC%8F
0443デフォルトの名無しさん
2007/12/29(土) 12:47:21いちいちモジュール→クラスやクラス→メソッドをリンクにして喜んでるのはオタクっぽいと思った
0444デフォルトの名無しさん
2007/12/29(土) 12:55:30長いページから検索して見つけるってのも方法としてアリなんだよね
どっちのパターンへも切り替えられると便利なんだけどさ
0445デフォルトの名無しさん
2007/12/29(土) 14:08:07どうなってればいいわけ?
そういや、chmの文字列検索って美妙につかえねえw
勝手に、文字分割して検索するwwww
「LOAD_PATH」と入れたら、loadとpathばっかり検索結果に出てきやがる
0446デフォルトの名無しさん
2007/12/29(土) 14:17:100447デフォルトの名無しさん
2007/12/29(土) 16:18:34キタ━━━━━━(゚∀゚)━━━━━━ !!
サンクソ!!
そういうのどこかに載ってますか?
まあ、googleとかで、+つけたり、""だと、全文一致というのは、あったから気付くべきだけど
0448デフォルトの名無しさん
2007/12/29(土) 16:21:440449デフォルトの名無しさん
2007/12/29(土) 17:42:180450デフォルトの名無しさん
2007/12/29(土) 18:42:010451デフォルトの名無しさん
2007/12/29(土) 20:59:28少ないデータを取り出すときには問題なく動くのですが,長時間動かした場合に
コンソールに"強制終了"と出て、止まってしまいます.
何かの例外処理にかかっているのだとは思うのですが,
エラーメッセージが”強制終了”としか出ないのでてづまってしまっています.
原因に心当たりあるかたがいましたら,教えてください.よろしくお願いします.
環境 ruby:ver.1.8 OS:CentOS hpricot: ver.0.60
使用しているライブラリは以下の通りです.
require 'rubygems'
require 'mechanize'
require 'hpricot'
require 'kconv'
require 'open-uri'
0452デフォルトの名無しさん
2007/12/29(土) 21:52:38あれとRWikiのリファレンスで間に合ってるんだけど。
0453デフォルトの名無しさん
2007/12/29(土) 21:57:39何故「みんな使わない」と思ったのかが知りたい。
0454デフォルトの名無しさん
2007/12/30(日) 00:24:29at_exit {
$stderr.puts "#{$!.backtrace[0]}: #{$!.message} (#{$!.class})"
}
とすると、終了時のエラーが表示されるかもしれないけど拡張ライブラリのバグならでないかも。
hpricotかmechanizeのバグだろうね。
0455デフォルトの名無しさん
2007/12/30(日) 00:25:53webアプリをそのままの機能でローカル利用できるってことですか?
0456デフォルトの名無しさん
2007/12/30(日) 00:29:410457デフォルトの名無しさん
2007/12/30(日) 00:31:550458デフォルトの名無しさん
2007/12/30(日) 00:33:19誰でもそのRubyスクリプトをWindowsで実行できるようにできます
0459デフォルトの名無しさん
2007/12/30(日) 00:34:460460デフォルトの名無しさん
2007/12/30(日) 00:38:550461デフォルトの名無しさん
2007/12/30(日) 00:39:12exeは標準出力にだらだら吐き出すだけだろうから、その出力をWebブラウザに渡すことができればHTMLも見れるよ
それはRubyの仕事じゃないけどな
0462デフォルトの名無しさん
2007/12/30(日) 00:41:170463デフォルトの名無しさん
2007/12/30(日) 00:42:060464デフォルトの名無しさん
2007/12/30(日) 00:43:300465デフォルトの名無しさん
2007/12/30(日) 01:01:15メモリ食いすぎて自滅したかOSに殺されてるんじゃないの?
0466デフォルトの名無しさん
2007/12/30(日) 01:07:13}else{
}
という文法だと間違ってると怒られるんですが、
{}を使ってelseを使うことはできないんですか?
0467デフォルトの名無しさん
2007/12/30(日) 01:17:36if はブロックを取らない
勝手に変な書き方すんな
0468デフォルトの名無しさん
2007/12/30(日) 01:39:40制御構文はプログラミング言語の基本中の基本
いくら初心者スレとはいえ、これくらいは自分で何とかしてくれないか
0469デフォルトの名無しさん
2007/12/30(日) 02:46:06お兄さん、全然書き方ちゃうよ
Rubyリファレンスマニュアル - 制御構造
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%C0%A9%B8%E6%B9%BD%C2%A4
オブジェクト指向言語Ruby - チュートリアル: Rubyの基礎
http://www2.ruby-lang.org/ja/20020312.html
これみて、勉強しる
0470デフォルトの名無しさん
2007/12/30(日) 03:50:10def initialize
@h = Hash.new
alist = [[1,["a"]], [2,["b"]], [3,["c"]]]
alist.each {|k,v|
h[k] = v
}
end
def foo
h.each {|k,v|
p k,v
}
end
end
foo = Hoge.new
foo.foo
これを実行すると
6:in `initialize': undefined local variable or method `h' for #<Hoge:0x2940078 @h={}> (NameError)
というエラーが出るんですがどう直したら良いんでしょうか。
スコープの問題なのでしょうか、alist.eachの中でhが呼べない様ですが
回避方法が解りません。
0471デフォルトの名無しさん
2007/12/30(日) 03:56:000472デフォルトの名無しさん
2007/12/30(日) 04:00:38@h と h は別モンだってのはたいていの解説にも書いてあると思うんだが
0473デフォルトの名無しさん
2007/12/30(日) 04:04:30@付けないといけないんですね。
どうもありがとうございました。
0474デフォルトの名無しさん
2007/12/30(日) 10:32:44ttp://www.ruby-lang.org/ja/man/?cmd=view;name=shell#a.a5.b3.a5.de.a5.f3.a5.c9.bc.c2.b9.d4
↑を参考に、
require 'shell'
sh = Shell.new
sh.system("ls")
と、やってみましたが、irbでは問題なく実行できたものの、ファイルに保存して
実行すると、
shell: warn: Process finishing...
wait for Job[/usr/bin/ls:#28045] to finish pipe importing.
You can use Shell#transact or Shell#check_point for more safe execution.
shell: notice: Process finishing...
wait for Job[/usr/bin/ls:#28045] to finish.
You can use Shell#transact or Shell#check_point for more safe execution.
と言われました。
マニュアルのtransactの項目を見ましたが理解できませんでした。
ruby 1.8.6
0475474
2007/12/30(日) 12:15:48すいません、マニュアルを穴があくほど読んだら理解できました。
0476デフォルトの名無しさん
2007/12/30(日) 21:57:260477デフォルトの名無しさん
2007/12/30(日) 22:24:52mvすれば中身ごと移動します。
WindowsだとUNIX系みたく簡単に移動できないのかもしれんが。
0478デフォルトの名無しさん
2007/12/30(日) 22:29:240479デフォルトの名無しさん
2007/12/30(日) 22:55:080480デフォルトの名無しさん
2007/12/30(日) 22:57:12大丈夫
まずは試してみようよ
0481デフォルトの名無しさん
2007/12/30(日) 23:11:37おお.こんな便利なモジュールがあったんですね.
ありがとうございます.
0482デフォルトの名無しさん
2007/12/31(月) 04:58:56解決したら、解決策を書いていくのがせめてもの礼儀というもの
0483451
2007/12/31(月) 16:13:39>>454
今,at_exit{}を入れて確かめてみています.
hpricotやmechanizeのバグだとしたら,初心者の私にはお手上げですね…
>>465
メモリは4G積んでいますし,メモリを余り食わないように改良してもダメだったので
大丈夫だとは思うのですが。。。。
OSに殺されている可能性については,考えていませんでした.
対処するとしたら,一度に動かすのではなく,分割して動かすのが良いんでしょうか?
0484デフォルトの名無しさん
2007/12/31(月) 20:26:37phpみたいな事ってrubyで出来るのですか?
0485デフォルトの名無しさん
2007/12/31(月) 21:10:010486デフォルトの名無しさん
2007/12/31(月) 21:25:07linux には OOM killer なる仕組みがあって、メモリが足りなくなると
プロセスが勝手に殺されるそうな。「強制終了」なるメッセージは
コンソール(bash?)がそれを受けて出力してるんではないかと思う。
まずは実行中に top コマンドとかでメモリ使用量を確認してみたら?
# 調べた結果、メモリが関係なかったらごめんなさい
0487デフォルトの名無しさん
2007/12/31(月) 21:36:20無理です
0488デフォルトの名無しさん
2007/12/31(月) 21:45:25>phpみたいな事ってrubyで出来るのですか?
php みたいに「お手軽」にできるかどうかは、持ってる基礎知識によって違うので
一概に「できる/できない」とは言えない。
php な人が
「Ruby はインストールしてからブラウザに "Hallo, world" を表示するのが大変。
php なら簡単にできるのに!」
というのはときどき聞く。
Ruby は Web に特化した言語じゃないから、下準備は多少手間がかかると思った方が良い。
そこを乗り越えたらできる事は、まあ変わらんのじゃないかな(好みの問題はあるだろうが)。
0489デフォルトの名無しさん
2007/12/31(月) 22:11:220490デフォルトの名無しさん
2007/12/31(月) 22:14:46>>485
>>487
>>488
ありがとー
今rubyインストールしてみた
色々インストール…Hello World表示させてみたけども、phpは手軽だねー
rubyってサーバーにrubyがインストールされていたら使えるのかな?
よくわかんないが、面白そうw
何からやろうかねぇ・・・・・・・・
0491デフォルトの名無しさん
2007/12/31(月) 22:27:41PC売る
0492デフォルトの名無しさん
2007/12/31(月) 23:57:47phpみたいなことするなら、フレームワーク使うと楽。
・まずRuby on Rails。最も人気で、Rubyの代表的なフレームワーク。
日本語の本もある。2chに専用スレあり。
Ruby on Rails
http://www.rubyonrails.org/
・why氏作成のRails似のフレームワーク。
しかし、コアのソースは4kbしかない(コメント除く)
フレームワークの勉強用にもお勧め。
つっても、ActiveRecordとかテンプレートエンジンは、つかってるけどな。
Camping, the Documentation ≫ File: README
http://camping.rubyforge.org/files/README.html
・巨大なフレームワークいらねえ!とりあえず、phpみたいに、
ブラウザにすぐ表示したいんじゃー!!って人は、
Sinatraおすすめ。
Classy web-development dressed in a DSL
http://www.xnot.org/sinatra/
0493デフォルトの名無しさん
2008/01/01(火) 00:00:50・Railsと異なるデザインで作られたMVCフレームワーク Ramaze
home [Ramaze]
http://ramaze.net/
・Railsに最も近い?しかし、Railsより軽量なフレームワーク Merb
Merb | Looking for a better framework?
http://merbivore.com/
・Railsのように縛られたくない!!な人のためのフレームワーク Nitro。
MVCじゃないのも作られる。
Nitro and Og
http://www.nitroproject.org/
ただし、どれもphpほど軽量じゃない。レンサバで動かそうとするとつらい。
てか、Rubyが重いw
あと、ベータレベルのものばかりなので、Rails以外は、要注意。
0494デフォルトの名無しさん
2008/01/01(火) 00:14:21まじでありがと!!!
Railsやってみるよ
まず、rubyの基本覚えなきゃw まだ何もしてねぇ…。
Rubyって重いのか…。
んー… phpのがいいのかねぇ…
でもphp人気すぎなような気がして…。
phpでは送信者部分に文字化けが出るけども、メール送信できる程度のプログラムは出来る・・・。
一応確認画面とかは作れたりする
0495デフォルトの名無しさん
2008/01/01(火) 03:09:26ブラウザに"Hello, world!"だったら
eRuby(HTMLなどのテキストファイルにRubyコードをうめこむ)
がいいんじゃないかな?
たとえば
<html><body>Hello, world</body></html>
あれ?
0496デフォルトの名無しさん
2008/01/01(火) 17:32:46環境:ruby 1.8.6
Matrix.[rows]
rowsを要素とする行列を生成する。ただし、引数rowsはネストした配列(=配列の配列)である。
例 Matrix[[11, 12], [21, 22]]
RubyリファレンスマニュアルのMatrixクラスのインスタンス生成部分に上記のような説明文が
ありますが、引数rowsは配列の配列とあるのですが例えばa=[[11,12],[21,22]]のような配列から
行列を生成するにはどうすればいいのでしょうか。aをそのまま[]内に使用した場合以下のような
実行結果になりました。
irb(main):001:0> require 'matrix'
=> true
irb(main):002:0> a = [[1,2],[1,2]]
=> [[1, 2], [1, 2]]
irb(main):003:0> b = [[1,1],[1,1]]
=> [[1, 1], [1, 1]]
irb(main):004:0> m = Matrix[a]
=> Matrix[[[1, 2], [1, 2]]]
irb(main):005:0> n = Matrix[b]
=> Matrix[[[1, 1], [1, 1]]]
irb(main):006:0> m * n
ExceptionForMatrix::ErrDimensionMismatch: Matrix dimension mismatch
from C:/Program Files/ruby-1.8/lib/ruby/1.8/matrix.rb:467:in `*'
from (irb):6
from :0
0497デフォルトの名無しさん
2008/01/01(火) 18:18:13Matrix.rows(rows, copy = true)
rowsを要素とする行列を生成する。ただし、引数rowsはネストした配列(=配列の配列)である。
(略
irb(main):031:0> m = Matrix.rows(a)
=> Matrix[[1, 2], [1, 2]]
irb(main):032:0> n = Matrix.rows(b)
=> Matrix[[1, 1], [1, 1]]
irb(main):033:0> m*n
=> Matrix[[3, 3], [3, 3]]
0498デフォルトの名無しさん
2008/01/01(火) 18:26:28解決しました、ありがとうございます。
リファレンスよく読まずに質問してすみませんでした。
0499デフォルトの名無しさん
2008/01/01(火) 20:21:22findメソッドを使ってレコードを取りだそうとすると
いつも「#」とだけ表示されてしまいます。
なぜでしょうか?
誰か分かるひと教えてください。
使っているデータベースはSQLite3です。
0500デフォルトの名無しさん
2008/01/01(火) 20:28:41再現コードうp
0501デフォルトの名無しさん
2008/01/01(火) 20:34:13バージョン2.0以前のARは、
そのまんま印字しても #<Hoge:0x111111> とかだから、
HTMLに出力すると#だけになる。
0502499
2008/01/01(火) 22:08:15ごめんなさい。コードないと分かりませんよね。
>501
はい。ActiveRecord使ってます!
、、、でもバージョン確認ってどうすればいいんでしょうか。
ほんと無知でごめんなさい。
コードは\app\controllers\main_controller.rbに
「class MainController < ApplicationController
def index
end
def show
@users = User.find([1])
end
end
で
\app\views\show.rhtmlに
<html><head><title>title</title></head>
<body><h1><%= @users %></hi></body>
</html>
です。
usersっていうのはSQLite3に作成したテーブル名です。idが合った場合は、すべて#がでて
idが存在しないと、エラーが表示されるので、おそらくデータベースにあるデータを読み込んではいるけれど
それを記述する段階で何か問題が起こっているのだと思います。
コード公開するのも恥ずかしいような初学者なので申し訳ないです。。。
0503デフォルトの名無しさん
2008/01/01(火) 22:16:41ARのバージョン確認のしかたは
gem list
で見られるだろ
0504デフォルトの名無しさん
2008/01/01(火) 22:17:18ruby script¥console として、
>> User.find...
を実行してみればいい。
HTMLで確認したければ、
<%= debug(@users) %>
とすれば、見かけはともかく確認できる。
あと、h1要素にするのはやめとこうぜ。
0505499
2008/01/01(火) 22:29:22ありがとうございます!
gem listで確認したところActiveRecordはver2.0.2を使っています。
けれどHTMLでは#としか出力されません。
あとh@usersと記述してみたんですが、これまた上手く行きません。。。
>504
ありがとうございます!
script\consoleでは確認できました!
HTMLで<%= debug(@users) %>と記述し出力してみたところ
一応レコードは取り出されたんですが余計な文字がいろいろ。。。
レコードだけをHTMLで表示させるにはどうしたらいいんでしょう。
質問づくしでごめんなさい。
あとRailsの質問なのに答えていただいて本当申し訳ないです。
0506デフォルトの名無しさん
2008/01/01(火) 22:43:16#<Hoge id: 1, ....>
のようになるだけなので、やっぱり#の後ろは(HTMLのタグと誤認されるため)
表示されないね。
綺麗にレイアウトした表示が欲しいなら
<ul>
<% @users.each do |user| -%>
<li><%= h user.name %></li> ←nameじゃないなら変えて。
<% end -%>
</ul>
などとループ組んで(or 部分テンプレート)HTMLとしてそれなりに整形しないと。
0507499
2008/01/01(火) 22:56:32おーーーできました!ありがとうございます!
ただ表示させるだけじゃなくて、もっと難しいことに応用する段階になったら
問題でてくるかも知れないですが、とりあえずこれでやってみます!
スマソなんてとんでもないです。ありがとうございました
0508デフォルトの名無しさん
2008/01/01(火) 23:18:11開発環境やフレームワークは基礎知識を補助しない
0509499
2008/01/01(火) 23:28:00ごめんなさい。。。
基礎から学びます。
0510デフォルトの名無しさん
2008/01/02(水) 00:05:11つらいだろうな。不特定多数が使うものだからセキュリティも
気をつけないといかんし。
この場合、Viewがホワイトリストになっとけばよかったわけだが
いつなるんだっけ。
0511451
2008/01/02(水) 00:18:37topで確認したら予想以上にメモリを食っていました.
単体では,問題無いようですが,他のプログラムが走ったときに確かにメモリ不足になりそうな感じでした.
#使っているPCが共有マシンなので,他の方も違う計算をさせる可能性があります
一回のキャッシュを少なくして,マシンを占有させてもらって動かしてみたところ今のところ問題なく動いています.
データ収集のの3/4を無事終えたので残りもそのままいけそうです.
ありがとうございました.
0512デフォルトの名無しさん
2008/01/02(水) 02:00:43正規表現で処理する場合に、その中に含まれるある文字列を
単純な文字列のマッチとして扱いたいのですが、
含まれている文字に偶にメタ文字が含まれている場合があるので、
素直に
Regexp.new(a+b+c)
とできないので。
a="abc(^"
b="DEF+?G)H" #ランダムで変わる
c=")defgh
d=Regexp.new(a+b+c)
の様な感じで、bの中のメタ文字を\でリテラルにしたいのです。
0513デフォルトの名無しさん
2008/01/02(水) 02:09:370514デフォルトの名無しさん
2008/01/02(水) 02:21:58エラーログってはかれるんすかね?
dmesgとかで見られるんかな?
0515デフォルトの名無しさん
2008/01/02(水) 02:24:530516デフォルトの名無しさん
2008/01/02(水) 02:47:31細かい話かも知れんが「リテラル」の意味履き違えてないか?
いや、文脈から言いたいことは充分伝わる文章だから
質問自体には文句はないんだが…
0517デフォルトの名無しさん
2008/01/02(水) 03:09:03『級』という漢字のある所で行が飛んだり、読み込みをストップしたり,
動作がおかしくなるんですが、こんな症状が出ている人居ますか
0518デフォルトの名無しさん
2008/01/02(水) 03:15:42英語のリテラルの意味に一語一語のとか文字通りという
意味があるので、便宜的にリテラルという語を使ってしまいました。
ソースに書かれた語などの意味とは違うかもしれません。
こういう場合はなんと言えば良いんでしょうか?
0519デフォルトの名無しさん
2008/01/02(水) 03:22:23文字コード指定してファイル開いてる?
0520デフォルトの名無しさん
2008/01/02(水) 03:40:55自分でも言ってる通りメタ文字でいいと思う。
正確に言いたかったら正規表現の、とか但し書きつければ
0521デフォルトの名無しさん
2008/01/02(水) 04:08:38文字コードを設定してファイルを開くにはどうしたらいいんでしょうか?
0522デフォルトの名無しさん
2008/01/02(水) 07:27:29それRuby1.9の話じゃない?
>>517
行が飛ぶといわれてもなんのことかわからない
まず具体的なコードを見せて
0523デフォルトの名無しさん
2008/01/02(水) 09:15:50Regexp.quote(文字列)
0524523
2008/01/02(水) 09:16:500525デフォルトの名無しさん
2008/01/02(水) 17:30:04【test.rb】
File.open('c:\test.txt') {|file|
p file.read
}
【test.txt(UTF16L)】
1
2
3
4級
5
6
7
8
9
10
このコードを実行すると、4行目までしかtest.txtが読み込まれません。
回避するにはどうしたらいいのでしょうか。
0526デフォルトの名無しさん
2008/01/02(水) 17:59:49522 じゃないが。
リファレンスを見ると、Ruby は euc, sjis, utf-8 でしか日本語を扱えなそうに見えるんだが。
参照
Ruby の起動 コマンドラインオプション -Kc の項
FAQ 日本語の取り扱い
0527デフォルトの名無しさん
2008/01/02(水) 18:02:09test.txt のファイルサイズと読み込んだデータのサイズを比較してみろ。
puts 'filesize : %d'%File.stat('test.txt').size
File.open('test.txt') do |f|
data = f.read
puts 'datasize : %d'%data.length
end
0528デフォルトの名無しさん
2008/01/02(水) 18:47:49filesize : 66
datasize : 22
EOFコードでも含まれてるんでしょうか。
外部ツールを通してUTF-8あたりにコンバートしないとダメですかね?
0529デフォルトの名無しさん
2008/01/02(水) 18:53:340530デフォルトの名無しさん
2008/01/02(水) 19:03:470531デフォルトの名無しさん
2008/01/02(水) 19:53:09ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
です。
0532デフォルトの名無しさん
2008/01/02(水) 19:54:310533デフォルトの名無しさん
2008/01/02(水) 20:27:08ただし、改行がおかしくなりますが・・・
0534デフォルトの名無しさん
2008/01/02(水) 20:57:19ファイルが小さいなら、NKFなり、kconvなりで、一旦、utf-8なり、eucなりに変換するとか
0535デフォルトの名無しさん
2008/01/02(水) 21:31:39require 'kconv.rb'
file='c:\test.txt'
puts 'filesize : %d'%File.stat(file).size
File.open(file,"rb") do |f|
data = f.read.tosjis
puts 'datasize : %d'%data.length
puts data
end
一応、このコードできちんと読めるようにはなったんですが、
改行がおかしくなるバグはまだあります。
d1 = String.new
data.each{|l|
d1 << l.sub("\r\n","\n")
}
puts d1
を組み込むとなんとかなりました。
少々ゴテゴテしてますが、この方法で良いのでしょうか?
0536デフォルトの名無しさん
2008/01/02(水) 21:36:32正月休みを利用してRubyに移植するべぇと張り切っているのですが
正直、処理速度の遅さにびっくりしてます
掛け算2桁万回して、結果をカンマ区切りのテキストに書き出すだけで
VBAと同程度の時間(5秒程度)待たされます
ちと、期待しすぎてたか・・・
0537デフォルトの名無しさん
2008/01/02(水) 21:45:060538デフォルトの名無しさん
2008/01/02(水) 22:02:42ldir = os.listdir( os.getcwd() )
for fn in ldir:
chk = re.match( defFnRule, fn )
if chk != None :
matchList = re.findall( defFnRule, fn )
newName = matchList[0] + "_" + matchList[1]
print "New:>> [%s]" % newName
0539デフォルトの名無しさん
2008/01/02(水) 22:05:050540デフォルトの名無しさん
2008/01/02(水) 22:53:29というエラーが出ます。
どんなことを疑ってみればいいですか?
うpします。
http://www.uploda.org/uporg1185358.zip.html
ruby main.rb
で動かしてエラーが出ます。
0541デフォルトの名無しさん
2008/01/02(水) 22:56:58いや、そもそもRubyは遅いって…
こんなんもあったけど
ttp://devlog.moonwolf.com/20070920.html
0542デフォルトの名無しさん
2008/01/02(水) 23:07:460543デフォルトの名無しさん
2008/01/02(水) 23:07:550544デフォルトの名無しさん
2008/01/02(水) 23:16:11とりあえず落としてみたが main.rb が読めない。圧縮失敗?
それとも main.rb は Ruby インタプリタの脆弱性を狙ったトロイか何かなんだろうか。
0545デフォルトの名無しさん
2008/01/02(水) 23:24:25integerが期待されている場所で、値がnilになっているためにエラーとなっている。
例えば
arr = [10, 20, 30]
i = nil
print arr[i] #=> TypeError: no implicit conversion from nil to integer
エラーには行番号も表示されるはずだから、その行を見ればよい
0546デフォルトの名無しさん
2008/01/02(水) 23:26:061. Ruby/Railsでできて、PHPでできない事……(考え中)……ないね。
2. 会社のみんなはPHPに慣れている:統合のコストを過小評価しないこと!
3. ほしくないものは要らない
4. PHPは小さくて速いよ
5. PHPは私の好みに合っている
6. SQL大好き
7. プログラミング言語はガールフレンドみたいなもの: 新しいほうが良い、なぜなら*貴方*が良くなっているから
http://www.oreillynet.com/ruby/blog/2007/09/7_reasons_i_switched_back_to_p_1.html
0547デフォルトの名無しさん
2008/01/02(水) 23:39:36main.rbは、その名に反して、tar.gzみたいな。
main.rb(.tar.gz)を展開しても、main.rb~とかもろもろ出てくるけど、
肝心のmain.rbは出てこないけど。
0548デフォルトの名無しさん
2008/01/02(水) 23:40:32すいません、main.rbはバグりました。
途中で書き直したので、使われていない変数が入っていたようです。
解決しました。
今、なぜこのような事が起こるのか分からないのですが、
a = [[-4, 5], [3, 2]]
a.sort do |a,b|
b[0] <=> a[0]
end
=> a = [-4, 5]
となりました。
今やらないといけないのは、ネストされた配列で、一番目の要素で降順(大きい順)
に並び替える事です。
どうすればいいのでしょうか?
0549デフォルトの名無しさん
2008/01/02(水) 23:43:30どうもmoveのところにおかしいところがあるらしく、
このロボットはまともに動いてくれません。
0550デフォルトの名無しさん
2008/01/02(水) 23:44:55http://www.uploda.org/uporg1185434.zip.html
0551デフォルトの名無しさん
2008/01/02(水) 23:46:06何でUTF16なの?自分の環境にあった漢字コード使った方が楽だよ
0552デフォルトの名無しさん
2008/01/02(水) 23:47:42a.sort! do |a, b|
b[0] <=> a[0]
end
=> [[3, 2], [-4, 5]]
a
=> [[3, 2], [-4, 5]]
出来てるけど
0553デフォルトの名無しさん
2008/01/02(水) 23:49:010554デフォルトの名無しさん
2008/01/02(水) 23:50:49あとはsortが非破壊メソッドであることがひとつ。
aa = [[-4, 5], [3, 2]]
aa.sort! do |a,b|
b[0] <=> a[0]
end
0555デフォルトの名無しさん
2008/01/02(水) 23:51:18a.sort! do |e1, e2|
にしたら出来ました。どうやら同じ名前を使ってはいけないのかな・・・
0556デフォルトの名無しさん
2008/01/02(水) 23:53:48これ実行してもらえます?
どっちでも
[-4, 5]になる・・・
0557デフォルトの名無しさん
2008/01/02(水) 23:55:50a.sort do |a, b|
b[0] <=> a[0]
end
p a
a = [[-4, 5], [3, 2]]
a.sort! do |a, b|
b[0] <=> a[0]
end
p a
a = [[-4, 5], [3, 2]]
a.sort do |e1, e2|
e2[0] <=> e1[0]
end
p a
a = [[-4, 5], [3, 2]]
a.sort! do |e1, e2|
e2[0] <=> e1[0]
end
p a
最後のしかうまく行きません。
0558デフォルトの名無しさん
2008/01/02(水) 23:56:33YES。ブロック内で、外にあるのと同じ変数名つかうと、そっちを上書きしてしまう
でよいよね?
0559デフォルトの名無しさん
2008/01/02(水) 23:58:30それぞれの違いを理解しましょう。
・a.sortでは、aの値は変わりません。a.sort!を使うと、aが変わります。
・ブロック内(sort do end)では、ブロック外の同名の変数が置き換わります。
0560デフォルトの名無しさん
2008/01/03(木) 00:31:081.9は1.9で大いに問題があるわけで。このスコープだけバックポートされて
こないかなー、無理だろなー
0561デフォルトの名無しさん
2008/01/03(木) 00:31:10だって、お手軽なんだもの・・・自分でも悲しいっすよそりゃ
0562デフォルトの名無しさん
2008/01/03(木) 00:31:490563デフォルトの名無しさん
2008/01/03(木) 01:00:390564デフォルトの名無しさん
2008/01/03(木) 01:16:340565デフォルトの名無しさん
2008/01/03(木) 02:42:46まぁ、そうなんですけど、他のソフトとの連携なのでどうしてもUTF16が必要なんですよ。
読み書きだけできればいいので。内部表現ではSJISにしてますし。
$KCODE="SJIS"
require 'kconv.rb'
class File
def File.open_text(path)
File.open(path,"rb") { |f|
dat = f.read.tosjis
datSjis = String.new
dat.each{|l|
datSjis << l.sub("\r\n","\n")
}
return datSjis
}
end
end
file='c:\test.txt'
puts File.open_text(file)
改良して汎用の読み込みクラスにしてみました。
とりあえず、これでいけそうなので、これでやってみます。
どうもありがとうございました。
0566デフォルトの名無しさん
2008/01/03(木) 04:08:58$KCODE="SJIS"
require 'kconv.rb'
path='c:\test.txt'
arr=["あいうえお","かきくけこ"]
data = arr.to_s.toutf16
data[0] << 0xfffe #BOM追加
File.open(path,"wb") { |f|
f.write(data)
}
の様にしたのですが、上手くUTF16で書き込まれません。
どうしたらいいのでしょうか?
0567536
2008/01/03(木) 04:59:32移植ということでLogicで困るところはなかったものの、
仕事で使うプログラムだったので安心しました
実は実質的にRuby初挑戦だったんですけど、
(正規表現関係で日本語コネるのにちょっと使ったことはあったんですが)
頭の中でのClassの設計に半日
あとは特に書きよどむことなく、すらーっと進みました
とにかく動いてくれるんで、心地よかったですね
まだまだブラッシュアップの余地ありありですけど
速度面でもトータルではさすがにExcel VBAよりは早かったです
うん、久々に心地よい(半)徹夜だったな
0568デフォルトの名無しさん
2008/01/03(木) 05:25:38結局どういう対策をとって早くなったんだよ
質問しておいて勝手に納得されても困る
0569デフォルトの名無しさん
2008/01/03(木) 10:56:58お手軽ならpythonも選択肢に入れてみれば?
0570デフォルトの名無しさん
2008/01/03(木) 12:51:110571デフォルトの名無しさん
2008/01/03(木) 13:02:44ん? どっちでもいいよ。
(´-`).oO(初心者スレだからって、こんな質問ないよなぁ...)
0572デフォルトの名無しさん
2008/01/03(木) 13:02:430573デフォルトの名無しさん
2008/01/03(木) 13:16:210574デフォルトの名無しさん
2008/01/03(木) 13:18:240575デフォルトの名無しさん
2008/01/03(木) 15:46:31対策はしてないです
大量の掛け算は処理のごく一部なんです
処理全体ではRubyの勝ちだったってだけです
計算は特に遅かったりなんてするのでしょうか?
動作テスト・負荷テストにも無事耐えてくれました
ExcelVBAで2分程度かかってた処理が30秒ほどで終わるようになりました
実のところ処理速度がどうのって言うわけではなく
会社がOSをVistaにするとかで、Officeも最新Verになりそうで
動作検証とか面倒だし、なによりちゃんと動いてるので
これから5年でも10年でも使って楽したい一連の処理ってこともあり
移植を経験しておきたかったのです
初心者というより、低スキルな者ですが
とにかく動くものが作れたので楽しかったです
0576デフォルトの名無しさん
2008/01/03(木) 18:43:23end
end
と書いた自分がいて
end #if
end #def
end #class
ってしとけば、わかりやすいじゃないか!
と素で大喜び、いやオレって天才!状態だった
信じてほしい、本当に自分で発見したんだ
・・・オレは何に負けたんだろう
0577デフォルトの名無しさん
2008/01/03(木) 18:52:19end #これは、クラス設定最後の「end」
とまで書いたんだ
これを
end #class
と略した自分に
神が降りた!とまで思ったんだ・・・
0578デフォルトの名無しさん
2008/01/03(木) 18:57:27デスマ脳ではよくあること。
コメント書かなければタイプする量が半分!つまり二倍速くプログラムが書ける!とか思っちゃうのも必ずデスマ初心者が通る道。
0579デフォルトの名無しさん
2008/01/03(木) 19:24:53Matz' というか、CRuby な。
JVMの上で動かしたい積極的な何かがあるのでなければ、
とりあえずCRubyでいいと思われ。
0580デフォルトの名無しさん
2008/01/03(木) 21:49:560581デフォルトの名無しさん
2008/01/03(木) 21:56:390582デフォルトの名無しさん
2008/01/04(金) 00:23:510583デフォルトの名無しさん
2008/01/04(金) 00:27:18ただしifかunlessのときだけ。case〜whenではthenを書かない
0584デフォルトの名無しさん
2008/01/04(金) 00:28:200585デフォルトの名無しさん
2008/01/04(金) 01:05:180586デフォルトの名無しさん
2008/01/04(金) 01:34:180587デフォルトの名無しさん
2008/01/04(金) 05:06:13エラー見て気付く orz
0588デフォルトの名無しさん
2008/01/04(金) 06:15:19ブロックを { } で書くから、さすがにそれはないな。
でも、人のソースを見ると、ワンライナー以外ほとんどが
do end でブロックを書いててちょっと不安。なんか、合理的な理由があるの?
結合強度が違うというのは分かるんだが…
0589デフォルトの名無しさん
2008/01/04(金) 07:04:29殆どのブロック的要素が end で終わるのに
ブロック付き呼出だけブレースってのに違和感がある。
ワンライナっつーか、呼び出した結果
戻り値を使いたい場合はブレース使うけど。
0590デフォルトの名無しさん
2008/01/04(金) 08:21:560591デフォルトの名無しさん
2008/01/04(金) 11:04:13thenをつけると綺麗な気がするな。多様性最高。
0592デフォルトの名無しさん
2008/01/04(金) 11:18:08カーネルのエラーではないので dmesg などには出ないね。
UNIX 系 OS ならプログラムが死ぬときに core ファイル (ruby.core など) が
できる (パーミッションや設定によってはできない) ので、
それを GDB などのデバッガにかけてデバッグする。
0593デフォルトの名無しさん
2008/01/04(金) 22:17:520594デフォルトの名無しさん
2008/01/04(金) 22:19:120595デフォルトの名無しさん
2008/01/04(金) 22:28:320596デフォルトの名無しさん
2008/01/04(金) 23:33:480597デフォルトの名無しさん
2008/01/04(金) 23:53:490598デフォルトの名無しさん
2008/01/05(土) 00:13:030599デフォルトの名無しさん
2008/01/05(土) 00:21:28Stringにモジュール名が入っていて、そのモジュールにアクセスしたいのですがどうしたらいいですか。
module Foo
def f
print "foo\n"
end
ned
module Bar
def f
print "bar\n"
end
end
module_name="Foo"
str_to_module(module_name)::f
module_name="Bar"
str_to_module(module_name)::f
みたいな感じにしたいです。
0600デフォルトの名無しさん
2008/01/05(土) 00:47:49eval(module_name)::f
それにしてもevalみたいな便利メソッドがあるとはRuby恐るべし。
0601デフォルトの名無しさん
2008/01/05(土) 01:25:330602デフォルトの名無しさん
2008/01/05(土) 17:14:12つまり、Ruby遅いとか、VBA並みだと言っていたのは、測らず言っていただけなのな
とりこしぐろうだったわけだな
>>588-590
一行で収まるときは、{}で、複数行の時は、do endにしてる
0603デフォルトの名無しさん
2008/01/05(土) 17:19:130604デフォルトの名無しさん
2008/01/05(土) 18:02:22しかし、evalぐらいで驚愕している600が一番恐ろしい。
0605デフォルトの名無しさん
2008/01/05(土) 18:05:52階級や何年何組のクラスをclassという変数に格納できないのは意外と辛い
startという変数は存在できるのにendという変数が存在できないのも意外とイラつく
あー規則ね
ローワーキャメルケースかアンダースコア区切りかっていうのはどっちかに主流が収束する気配はないので勝手に殴り合いでもして決めろ
arrayとかhashとかstrとかのデータクラスを示す言葉が変数名に入ってたら即射殺
@dataというインスタンス変数をひとつ作るごとに鞭打ち100回
runというメソッドを作ってHoge.new.runの1行だけで実行してたら絞首刑
0606デフォルトの名無しさん
2008/01/05(土) 18:10:49>>604
いちばん最初にevalの機構を知ったときは感動した
elispだったかな
余談だけどGoogleは「elisp」で「Emacs Lisp」を、「clisp」で「Common Lisp」を表記揺れ検索してくれる模様
ttp://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=eval+elisp&num=50
0607デフォルトの名無しさん
2008/01/05(土) 18:16:09File.openとFile.newの違いはなんでしょうか?
それとも違いなんてなくて、ただのエイリアスですか?
知ってる方いたら教えてください。
0608デフォルトの名無しさん
2008/01/05(土) 18:19:35runの便利さは認めるべき
0609デフォルトの名無しさん
2008/01/05(土) 18:23:160610デフォルトの名無しさん
2008/01/05(土) 18:24:07疑問点はまずオンラインマニュアル読んでみれ
わけわからん書き方してる場合も多々あるが、疑問が解決することも多々ある
> File.new(path[, mode [, perm]])
> File.open(path[, mode [, perm]])
> File.open(path[, mode [, perm]]) {|file| ... }
> pathで指定されるファイルをオープンし、ファイルオブジェクトを返します。
>
> open() はブロックを指定することができます。
# openは予想通りに動作する
File.open('hoge.txt'){|f| puts f.read}
# newは警告が出てブロックの中身が無視される
File.new('hoge.txt'){|f| puts f.read}
warning: File::new() does not take block; use File::open() instead
0611607
2008/01/05(土) 18:46:56http://www.ruby-lang.org/ja/man/?cmd=view;name=File
一応オンラインマニュアル読んだんだが
並べて書いてあるから、ただのエイリアスなのか
それとも動作違うから別名にしてあるのか、正直わからんかったスマソ
スレッドセーフなファイルの排他制御しようとおもって
調べてたんだがどうやればいい?
flock(operation)のFile::LOCK_EX じゃスレッドセーフにならんみたいなんだが
File.openでEXCL使ったらスレッドセーフになるかな?
0612607
2008/01/05(土) 19:19:40自己レスですが
rubyの排他制御ってプロセス間の排他制御がなされるだけなので
スレッド関係は自分でなんとかしたほうがよさそうでした。
0613デフォルトの名無しさん
2008/01/05(土) 20:18:06# "We get a = [1,2,3], as expected."
# という文字列を得る,簡単な方法を教えてくださいな.
# 以下は "We get a = 123, as expected." となるからダメ.
puts "We get a = " + a.to_s + ", as expected."
puts "We get a = #{a}, as expected."
# 以下は [1,2,3] のあとに改行が入るからダメ.文を切ってるのも減点.
print "We get a = "
p a
print "as expected"
0614デフォルトの名無しさん
2008/01/05(土) 20:22:310615デフォルトの名無しさん
2008/01/05(土) 20:32:25puts "We get a = " + a.inspect + ", as expected."
puts "We get a = #{a.inspect}, as expected."
# 三番目に近い形はうまく行きませんでした.
0616デフォルトの名無しさん
2008/01/05(土) 21:36:58C++言語をメインにする私には耐えられないものがありましたが、みなさんよくやっておられて感心いたしました
0617デフォルトの名無しさん
2008/01/05(土) 21:47:45Rubyについて(アンチ専用) Part001
http://pc11.2ch.net/test/read.cgi/tech/1190559748/
0618デフォルトの名無しさん
2008/01/05(土) 23:00:171. arrayとかhashとかstrとかのデータクラスを示す言葉が変数名に入ってたら即射殺
2. @dataというインスタンス変数をひとつ作るごとに鞭打ち100回
3. runというメソッドを作ってHoge.new.runの1行だけで実行してたら絞首刑
何で? どれ一つ理由が分からん。
0619デフォルトの名無しさん
2008/01/05(土) 23:38:432. 継承先で困る
3. 外からアクセスされないオブジェクトって…
とかかな。
0620デフォルトの名無しさん
2008/01/05(土) 23:43:381. については、「ラベルにはその内容をこそ書け」ってことじゃあるまいか
例えば
ノートの表紙にいちいち「〜〜〜のノート」と書いてあったり
PCに貼る管理シールに「〜〜デスクトップPC」と書いてあったり
バインダーのラベルに「〜〜バインダー」と書いてあったら
いい加減アフォかと思わんか? ってことじゃなかろーかと
0621デフォルトの名無しさん
2008/01/05(土) 23:45:490622デフォルトの名無しさん
2008/01/05(土) 23:58:12ちゃんと、名前つけろってことかと。
型じゃなくて、その変数の意味をかけと。
arrayとかつけてて、そこにコメントなんか書いてたら、>>605にぶっとばされると思う
> 2
上と同様。dataって、iとかjとかkとかつけるのと変わらん
> 3. runというメソッドを作ってHoge.new.runの1行だけで実行してたら絞首刑
なんでもオブジェクトにすんなってことだろう、たぶん
属性も操作もないのに、関数でいいじゃんていう
俺は、言っている意味はわかるよ
0623618
2008/01/06(日) 00:01:00なるほど。
自分も >621 みたいにメソッドの仮引数はこう書くことが多いんだが
def foo(str, pattern)
str =~ pattern
end
「ラベルにはその内容をこそ書け」という観点なら
問題ないよね?
>619
ああ、それなら分かる。
自分の場合は rdoc を見るだけで使っているインスタンス変数が
分かるように必ず attr_reader とかで宣言してる。
0624デフォルトの名無しさん
2008/01/06(日) 00:39:58>属性も操作もないのに、関数でいいじゃんていう
その主張はカプセル化(隠蔽)の概念を無視している
0625デフォルトの名無しさん
2008/01/06(日) 00:44:56は本当にstrという3文字の変数名ならやっぱ殴られると思われ
=~ の左辺(右辺でも可)がStringなのは当たり前だろと
ナニの文字列からどんな正規表現で文字列を抜き出すのかわかるような変数名にしろと
何のために変数名に大文字小文字数字アンダースコア全部使えるようになってんのかと
まあどれだけ重要なスクリプトなのかにもよるけどな
1日くらいで完成してメンテも1年先に見直すかどうかわからん程度のスクリプトにそんなん求めても疲れるだけだし
でも初心者スレだから最初から悪い癖は抜いといたほうがいいのかもとも思う
str1,str2,str3という変数名しかつけられなくなったプログラマはいないわけではないし
0626デフォルトの名無しさん
2008/01/06(日) 00:47:37いや、その場合、カプセル化の必要ないよね?
0627デフォルトの名無しさん
2008/01/06(日) 00:48:41「ていうかインスタンス作る必要なくね?モジュールでいいじゃん?」
というツッコミが入る定番ネタだな
0628デフォルトの名無しさん
2008/01/06(日) 00:48:54http://pc11.2ch.net/test/read.cgi/tech/1191250784/
0629デフォルトの名無しさん
2008/01/06(日) 00:57:540630デフォルトの名無しさん
2008/01/06(日) 02:26:540631デフォルトの名無しさん
2008/01/06(日) 11:31:34つMutex
> rubyの排他制御ってプロセス間の排他制御がなされるだけなので
そりゃファイル関係のロックは普通プロセス単位だからな。
0632デフォルトの名無しさん
2008/01/06(日) 11:41:14ライブラリとしてもメインスクリプトとしても使えるようにしたいときに
if $0 == __FILE__ の中で使ったりというのは、ときどきやる。
0633デフォルトの名無しさん
2008/01/06(日) 12:21:060634624
2008/01/06(日) 12:44:46クラスにしないとプライベートメソッドが使えないじゃないか!
と思っていたがそれは勘違いだった
関数ですむところをわざわざクラスにする利点は
一度作ったHogeインスタンスを使いまわせることだな
テストのときに便利
0635デフォルトの名無しさん
2008/01/06(日) 14:56:12継承使って、元フォーマットと目的のフォーマットを返すメソッド用意すれば、
勝手に変換できるようなベースクラスを作り、
変換ごとにクラス作って、
どのファイルをどのクラスで処理するかを配列につっこんで、
ループ回してファイルをクラスに渡して処理させたんだ。
そのループの中身が
Hoge.new.run
みたいなもんなんだが、これも駄目か?
0636デフォルトの名無しさん
2008/01/06(日) 14:58:320637デフォルトの名無しさん
2008/01/06(日) 20:04:48なるほど、クラスの機能を使って、拡張したため、そうせざるを得ないというわけか。
まあ、おれなら、みっともないから、関数のラッパー書くがな
0638デフォルトの名無しさん
2008/01/06(日) 20:22:02大きいアプリケーションはあんな感じするようになった。
0639デフォルトの名無しさん
2008/01/06(日) 20:32:51初心者脱却できそうかなあというときに読んでみるといい
0640デフォルトの名無しさん
2008/01/06(日) 20:40:47そういや、前に、Railsのソース読んでて、頭ひっくり返っておもしろかった覚えが
0641デフォルトの名無しさん
2008/01/06(日) 20:41:47DSLってことじゃないよね?
0642デフォルトの名無しさん
2008/01/06(日) 20:50:51その説明だけではよく分からんが
あんまりクラスにする必要はないんじゃないかと思う
0643デフォルトの名無しさん
2008/01/06(日) 23:17:39アプリケーションオブジェクトをキャッシュしてるあたりとか。
あれ多分、マルチスレッドで使われたときにオブジェクトいくつも作らないためだと思うんだけど
自信はない。
あと、自分はアプリ表すクラス作って
Hoge::Application.new(config).run
とかはわりと賛成。
アプリって、たいがい状態と自己同一性を持ってて、外からの呼びかけに反応する
もののような気がするし。
0644デフォルトの名無しさん
2008/01/07(月) 00:01:13入力CSVファイルが25種類、出力CSVファイルが5種類ぐらい
それぞれフィールド入れ替え+文字列変換など。
ヘッダ行があったり無かったり。たまに1個のファイルが複数の出力ファイル。
開いてフォーマット調べて変換方法を切り替えるというのもある。
という感じ。
Rakeみたいな感じで書けるようにする方がいいかなぁ。
0645デフォルトの名無しさん
2008/01/07(月) 00:55:590646デフォルトの名無しさん
2008/01/07(月) 01:55:290647デフォルトの名無しさん
2008/01/07(月) 02:40:110648デフォルトの名無しさん
2008/01/07(月) 09:17:09今まで存在は知ってたけど無用と思ってたけどやらないと。
ああなんで無駄な知識を詰め込まないといけないのか。
0649デフォルトの名無しさん
2008/01/07(月) 09:18:050650デフォルトの名無しさん
2008/01/07(月) 09:24:04やくざに就職できちゃうな。
0651デフォルトの名無しさん
2008/01/08(火) 14:20:16素直に文字列で普通にすればいいのかの論争は今のところどっちが優勢?
str_hash={'name'=>'だれそれ', 'age'=>18, 'sex'=>'週に3回'}
sym_hash={:name =>'だれそれ', :age =>18, :sex =>'週に3回'}
puts sym_hash['sex'.intern]
週に3回
Hashに大量にアクセスする場合は毎回String#internしてるのが面倒だなと思うんだけど
0652デフォルトの名無しさん
2008/01/08(火) 14:27:53シンボルでいいんじゃね。
1.9からは
{ name: 'だれそれ', age: 18, sex: :male }
なんて書き方も出来るようになるわけだしさ。Object#methodsもシンボルを
返すように変更された。
0653デフォルトの名無しさん
2008/01/08(火) 14:28:520654デフォルトの名無しさん
2008/01/08(火) 15:07:14ベンチマーク結果で明らかにシンボルのほうが速いのなら、それはそれで構わないのですが…
0655デフォルトの名無しさん
2008/01/08(火) 15:35:24{'name'=> 'だれそれ', 'age' => 18},
{'name'=> 'なにがし', 'age' => 21}
]
list1.each do |h|
p h.keys.map{|e| e.object_id}
end
list2 = [
{:name => 'だれそれ', :age => 18},
{:name => 'なにがし', :age => 21}
]
list2.each do |h|
p h.keys.map{|e| e.object_id}
end
# 実行結果
[538368178, 538368118]
[538368038, 538367978]
[2629902, 880910]
[2629902, 880910]
HashのキーにやたらSymbol使いたがる大きな理由はこれだろ
Symbolならオブジェクトはひとつだけで済む
仮に配列にHashが1まんこ入ってたとしたら
それだけで1まんこのStringが作られてしまうのが気持ち悪いのだろう
0656デフォルトの名無しさん
2008/01/08(火) 16:12:250657デフォルトの名無しさん
2008/01/08(火) 16:43:36俺はシンボルってのは識別子に近いモノだと思ってる。
だから、フィールド名や名前付き引数(もどきのハッシュ引数)の名前として
Rubyの中で完結した用途で使うのは良いと思うが
Rubyの外とやりとりするようなモノには使わない。
例えば、h = { :name => 'だれそれ', :age => 18, :sex => 'female' } というハッシュの
キーをそのままto_sしてDBのフィールド名やXMLに転用するのは俺的にはNG。
0658デフォルトの名無しさん
2008/01/08(火) 17:02:490659デフォルトの名無しさん
2008/01/08(火) 20:56:51文字列からSymbol探してくる方が時間かかるだろ
そういう場合は素直に文字列をキーにするべき
シンボルは速いなんてのを盲目的に信じると逆に遅くなるぞ
素直に書けるように書け
俺も>>657みたいに内部で完結する場合にだけシンボルを使うな
0660デフォルトの名無しさん
2008/01/08(火) 21:38:10しかもそれは本質的には別個のオブジェクトである意味は全く無い
→ そうだ Symbol、しよう。
というのは思いとしては痛いほどよくわかるんだけどね
0661デフォルトの名無しさん
2008/01/08(火) 22:22:23最初から文字列なモノ(人名=>その人のレコード、とか)ならもちろん話は別。
0662デフォルトの名無しさん
2008/01/08(火) 22:58:31Symbol速いと言われてるから何でもSymbolというのは良くない
Symbolをキーにするハッシュがある場合は
実はStructでいいんじゃないかと考えてみるのもいいかもね
0663デフォルトの名無しさん
2008/01/08(火) 23:27:18abc={"a"=>1,"b"=>2,"c"=>3,"d"=>2,"e"=>1,"f"=>2,"g"=>3,"h"=>2}
のように、abcを定義した時に、この中身の数値(ここでは1,2,3)によって、その数値を持つアルファベットを列挙させることはできますか?
たとえば、2のやつを表示させたかったら、
b
d
f
h
のように。教えてください。お願いします。
0664デフォルトの名無しさん
2008/01/08(火) 23:35:18abc.keys.select {|key| abc[key] == 2}
=> ["b", "d", "f", "h"]
長い別解
abc.select {|key,value| value == 2}.map {|assoc| assoc.first }
=> ["b", "d", "f", "h"]
0665デフォルトの名無しさん
2008/01/08(火) 23:45:41irb> abc = {"a"=>1,"b"=>2,"c"=>3,"d"=>2,"e"=>1,"f"=>2,"g"=>3,"h"=>2}
irb> p abc.dup.reject{|k,v| v != 2}.keys
["b", "d", "f", "h"]
0666デフォルトの名無しさん
2008/01/09(水) 00:01:37こんなコードを書きました。が、要素が多くなると遅いです。
jarray = [”おいお", "おいあ", "いあお"]
jarray.sort! do |a, b|
a.split(//).reverse <=> b.split(//).reverse
end
#jarray => ["おいあ", "いあお", "おいお"]
もっと良い書き方があったら教えてください。
文字コードはUTF-8です。
0667663
2008/01/09(水) 00:02:580668デフォルトの名無しさん
2008/01/09(水) 00:04:05「abcから値が2ではない要素を除いたハッシュを生成しそのキーを列挙」
と読める>>665が真っ当と思われる
だがabcを複製しないとどうにもならんのが難点か
キーの配列作ってabcでの値が2になるものを抜き出す>>664の上が処理上は妥当っぽい気も
0669デフォルトの名無しさん
2008/01/09(水) 00:10:26jarray.replace(jarray.sort_by{|a| a.split(//).reverse})
0670デフォルトの名無しさん
2008/01/09(水) 00:19:04サンクスです。助かります。
sort!よりreplaceとsort_byの組み合わせの方が速いんですね。
0671デフォルトの名無しさん
2008/01/09(水) 00:32:32・sort_byはシュウォーツ変換というアリゴリズムでメモリを代償に早いソート
だったと思う、確か。
特にsort_byは比較だけでなくブロックを呼ぶ回数も少ない…はず。
splitしてreverseとか結構重そうだからそれも響いてくるのかも。
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060825/246409/?ST=oss
ここの第5回その3とか、第13回の2ページ目とかの受け売り。
0672デフォルトの名無しさん
2008/01/09(水) 00:44:21sort_by!が無かったから1行で書くために使っただけ
ソートアルゴリズム以前に日本語文字列をsplitしてreverseする回数が多すぎるんだと思う
0673デフォルトの名無しさん
2008/01/09(水) 00:54:11実際に試さずに言うんだが、先にsplit→reverseを済ませておいてから
sortした方が早くなると思われる
(split→reverseの回数が減るため)
jarray = ["おいお", "おいあ", "いあお"]
jarray.map!{|x| x.split(//).reverse.join}
jarray.sort!
0674デフォルトの名無しさん
2008/01/09(水) 08:23:49まあ、もしかしたら些細な問題かもしれんのだが
irb> arr = ['かきくけこ','あいうえお','さしすせそ']
irb> arr.map!{|x| x.split(//e).reverse.join}
irb> arr.sort!
irb> puts arr
おえういあ
こけくきか
そせすしさ
これからどうすればいい?
0675デフォルトの名無しさん
2008/01/09(水) 08:38:58アレ?
0676デフォルトの名無しさん
2008/01/09(水) 08:42:37sort_byのブロック内の実行回数は要素数と同じだよ
1000個の配列をsort_byした場合は1000回
$ ruby -r profile -e 'Array.new(1000){rand(1000)}.sort_by{|a| a.to_s}'
% cumulative self self total
time seconds seconds calls ms/call ms/call name
47.72 1.88 1.88 1 1880.00 3500.00 Enumerable.sort_by
29.19 3.03 1.15 9280 0.12 0.12 String#<=>
8.12 3.35 0.32 1 320.00 470.00 Array#each
7.11 3.63 0.28 1 280.00 440.00 Array#initialize
4.06 3.79 0.16 1000 0.16 0.16 Kernel.rand
3.81 3.94 0.15 1000 0.15 0.15 Fixnum#to_s
0.00 3.97 0.00 1 0.00 3940.00 #toplevel
0.00 3.97 0.00 1 0.00 0.00 Integer#to_int
0.00 3.97 0.00 1 0.00 440.00 Class#new
こういうのはsortだけで済むように作ったほうが速いな
$ ruby -r profile -e 'Array.new(1000){rand(1000).to_s}.sort'
% cumulative self self total
time seconds seconds calls ms/call ms/call name
59.76 0.49 0.49 1 490.00 810.00 Array#initialize
20.73 0.66 0.17 1000 0.17 0.17 Kernel.rand
18.29 0.81 0.15 1000 0.15 0.15 Fixnum#to_s
1.22 0.86 0.01 1 10.00 10.00 Array#sort
0.00 0.86 0.00 1 0.00 0.00 Integer#to_int
0.00 0.86 0.00 1 0.00 820.00 #toplevel
0.00 0.86 0.00 1 0.00 810.00 Class#new
0677デフォルトの名無しさん
2008/01/09(水) 11:19:23[{'name'=>'山田太郎', 'age'=> 23, 'home'=>'駅前1丁目'},
{'name'=>'田山次郎', 'age'=> 31, 'home'=>'駅前2丁目'},
{'name'=>'山川三郎太', 'age'=> 1024, 'home'=>'駅前3丁目'},
...
]
と
{'name' => ['山田太郎','田山次郎','山川三郎太', ...],
'age' => [23, 31, 1024, ...]
'home' => ['駅前1丁目','駅前2丁目','駅前3丁目', ...]
}
ってどっちがまとも?
0678666
2008/01/09(水) 11:22:26jarray.replace(jarray.sort_by{|a| a.split(//).reverse})
が妥当なところなのでしょうか。
もう一つ質問です。
テキストファイルから特定の行(x行目)だけを取り出す必要があり、
次のようなメソッドを書きました。
def xthline(x, file)
index = 0
file.each do |line|
return line if index == x
index += 1
end
nil
end
当然ですが、巨大なファイルの最後の方の行を取り出す
のにえらく時間がかかります。ベターな方法はあるでしょうか?
(拡張モジュール作成?)
0679デフォルトの名無しさん
2008/01/09(水) 11:33:08まともの定義が分からんが、あとの方の例だと、
マークシート形式の試験にトラウマがある俺にはちょっと不安。
0680デフォルトの名無しさん
2008/01/09(水) 11:39:21def linefetch(text, line)
return text.split[line-1]
end
もし、テキストファイルの内容が不変で行数を取り出す行為が何十回もあるのなら、
俺はtext.split(//e)の結果をインスタンス変数とかに保持しておく。
メモリをやたら食うけど、たぶんそのぶん速い。
特定の行をそこだけうまく抜き出す、という芸はRubyは苦手。
テキストファイルをとりあえず全部メモリに読み込むのが普通と思われ。
数バイトずつ読み込んでうんたらかんたらはやってやれないことはないとは思うんだが。
0681680
2008/01/09(水) 11:40:13誤 : text.split(//e)の結果
正 : text.splitの結果
0682デフォルトの名無しさん
2008/01/09(水) 11:48:10後者は人間にとって非常に不安を引き起こすデータ形式だな…
いや、コンピュータがやるんだから
・ 前者の各要素のハッシュに含まれるペアの数は全て同一
・ 後者のハッシュの値の配列の要素数は全て同一
は同じことのはずなんだが、後者はなぜかとっても不安だな
idを作って数字をキーにして
{ 1 => {'name'=>'山田太郎', 'age'=> 23, 'home'=>'駅前1丁目'},
2 => {'name'=>'田山次郎', 'age'=> 31, 'home'=>'駅前2丁目'},
3 => {'name'=>'山川三郎太', 'age'=> 1024, 'home'=>'駅前3丁目'},
...
}
という格納法も見るね
うっかり氏名でキーを作って同姓同名で破綻したりするのもいい思い出だと思う(そうか?)
0683デフォルトの名無しさん
2008/01/09(水) 12:29:28Ruby だけで収める事にこだわらないのであれば sed がお勧め。
def xthline(x, file)
return %x( sed -n #{x}p "#{file}" )
end
これだけだと改行コード付だったり
x 行目が無い場合は nil じゃなくて空文字列が返るので
採用する場合はもうちょっと工夫が必要。
0684デフォルトの名無しさん
2008/01/09(水) 12:31:58イテレータ回すことを考えると前者が有利
0685デフォルトの名無しさん
2008/01/09(水) 12:48:55jarray.map!{|e| [e, e.split(//).reverse.join]}
jarray.replace(arr.sort_by{|a| a[1]}.map{|e| e[0]})
こっちのほうが速いかも
メモリ使用量は増えてる予感
0686デフォルトの名無しさん
2008/01/09(水) 12:50:28jarray.map!{|e| [e, e.split(//).reverse.join]}
jarray.replace(jarray.sort_by{|a| a[1]}.map{|e| e[0]})
なんでもいいけどjarrayってのは即刻やめたほうがいいと思うぞ
0687デフォルトの名無しさん
2008/01/09(水) 12:59:260688デフォルトの名無しさん
2008/01/09(水) 13:21:03標準添付のライブラリのほうだっけ?
0689デフォルトの名無しさん
2008/01/09(水) 13:38:190690デフォルトの名無しさん
2008/01/09(水) 14:25:48RubyForge: Ruby Collections: Project Info
ttp://rubyforge.org/projects/collections/
0691デフォルトの名無しさん
2008/01/09(水) 14:50:02jarray.replace(jarray.sort_by{|a| a.split(//).reverse.join})
0692デフォルトの名無しさん
2008/01/09(水) 14:57:37配列の比較より文字列の比較のほうがおおむね速い
何かポリシーがあって配列のままにしてるってわけではなさそうだ
0693678
2008/01/09(水) 17:26:45不特定数のファイルを順次処理するので、データを配列化して保持
するのは無理っぽいです。やっぱり遅いのは仕方ないですかね。
行までのバイト数なんかを事前に取得できないかぎりは。
>686, 691, 692
では
jarray.replace(jarray.sort_by{|a| a.split(//).reverse.join})
で行きます。joinするというのは思いつきませんでした。
あえて処理を加えることで速くなるという発想がなかったので。
勉強になります。
0694デフォルトの名無しさん
2008/01/09(水) 17:54:54この問題を解いてもらいたく書き込みました.
(問)「ディレクトリ内に以下のサブディレクトリがあります.
"a" "b" "c" "d" "e"
各サブディレクトリにはHTMLファイルが入っています.
"a.html" "b.html" "c.html" "d.html" "e.html"
各サブディレクトリに含まれるHTMLファイルの<p class="textvalue">に該当する情報だけをテキストファイルに書き込みなさい.
なお,htmlファイル毎にテキストファイルを作成しなさい.」
この問題に対して,サブディレクトリ毎にテキストファイルを作成する点がわかりません!
つまり,サブディレクトリごとに同じ処理を行えば良いのですがそこがわからなくて困ってます.
今の段階では,すべてのファイルの<p class="textvalue">に該当する情報を1つのテキストファイルに書き込むことは出来ました..
以下が現段階でのプログラムです↓
require 'hpricot'
$KCODE = 'SJIS'
require 'jcode'
require 'open-uri'
require 'kconv'
files = Dir.glob("**/*.{html,htm}")
files.each { |file|
p file
html = open(file).read.tosjis
document = Hpricot.parse(html)
names = (document/'p.textvalue').map{|e|e.to_plain_text.strip}
puts names
foo = File.open("foo.txt",'a')
foo.puts names
foo.close
end
}
つまり,サブディレクトリが変わる度に処理を繰り返すやり方を教えてください!!お願いします!!
0695デフォルトの名無しさん
2008/01/09(水) 18:12:22File.dirname(file) であとはごにょごにょ。
0696デフォルトの名無しさん
2008/01/09(水) 18:21:00それくらいできて欲しいなとちょっと思った
0697デフォルトの名無しさん
2008/01/09(水) 18:48:04リファレンスマニュアルのDirのところ全部読め
0698デフォルトの名無しさん
2008/01/09(水) 19:03:26やっぱりDir.globの点が間違っているんですかね?
>>697
読んだんですけどディレクトリ毎に処理を行う点は載ってなかったような...
オレの力不足です,申し訳..
0699デフォルトの名無しさん
2008/01/09(水) 19:18:38めんどくさいから
0700デフォルトの名無しさん
2008/01/09(水) 19:54:25require 'hpricot'
require 'kconv'
savedir = Dir.pwd # テキストファイルを保存するディレクトリ
Dir.glob('*/').each do |dir|
Dir.chdir(dir){
infile = Dir.glob("*.html")[0]
outfile = "#{savedir}/#{File.basename(infile,'.html')}.txt"
html = File.open(infile,'r').read.tosjis
document = Hpricot.parse(html)
names = (document/'p.textvalue').map{|e|e.to_plain_text.strip}
File.open(outfile,'w'){|f| f.puts names}
}
end
Ruby1.8かそれ以上でないと動作しないので注意
0701デフォルトの名無しさん
2008/01/09(水) 22:13:14Dir.chdir(dir){
}
end
のあたりが微妙に無理してるな(w
「ディレクトリごとに何かする」ということを優先
0702デフォルトの名無しさん
2008/01/09(水) 23:02:36ありがとうございます!
これで成功しました!!
あと,もう一つ質問があります!
694
で述べた問題で,各ディレクトリの中にhtmlファイルが,"index.html"と"shop.html"と,2つ入っていたとします.
そのとき,"index.html"では,<p class="textvalue">の情報を取り,
"shop.html"では,<p class="textShopinfo">という情報を取りたいと思っています.
このとき,indexとshopというファイル名で処理を場合分けする場合,
>>700さんが記述してくれたプログラムにどのように拡張すれば良いのでしょうか??
お願いします!!
0703デフォルトの名無しさん
2008/01/09(水) 23:09:16なるほど、>>694で自分で処理を考えて書いた部分はゼロだな
0704デフォルトの名無しさん
2008/01/09(水) 23:15:56っていうかスクリプトを全く読んでなさそうだ
どこがどうなってどう動いてるかとか興味なさげ
0705デフォルトの名無しさん
2008/01/10(木) 02:05:13できるのでしょうか?会社のWEBの処理を自動化したいのですが。
agent = WWW::Mechanize.new
agent.auth('user', 'pass')
page = agent.get('http://intranet/')
だと、.htaccessの認証のは通るのですが、WINDOWS認証は通らないです。
ここ調べろとか教えていただけると非常にありがたいです。
0706デフォルトの名無しさん
2008/01/10(木) 02:31:000707デフォルトの名無しさん
2008/01/10(木) 02:32:26user_agent
0708デフォルトの名無しさん
2008/01/10(木) 04:09:04宿題なら、次からはこっちの方がいいぞ
RUBYの宿題教えてください。
http://pc11.2ch.net/test/read.cgi/tech/1106572657/
0709デフォルトの名無しさん
2008/01/10(木) 09:58:42Kconv.guess(text)
で文字コード判定をしたいのですが、textが数十MBあるような場合、
全部を渡さずに、一部を切り出して渡した方が良いでしょうか?
もしそうなら、最低どれくらいを渡せば確実ですか?
0710デフォルトの名無しさん
2008/01/10(木) 10:16:19最低どれくらいなんてものはないだろ。
オンメモリが無駄に思えるなら一行ずつ読み出してguessしていって
ASCII以外の値が返ったら停止すりゃいいんじゃないの。
0711デフォルトの名無しさん
2008/01/10(木) 10:21:43Kconv.guessって全文nkfに渡してるん?
0713デフォルトの名無しさん
2008/01/10(木) 11:22:03日本語文字は200文字くらいは必要ではないかと
10行くらいどばっとぶち込むのが吉
0714デフォルトの名無しさん
2008/01/10(木) 14:47:17改行コード変換の方法を教えてください!
CR+LF => LF
0715デフォルトの名無しさん
2008/01/10(木) 15:00:510716715
2008/01/10(木) 15:17:12そのCRとやらを消すにはどうしたらよいのでしょう?
line.gsub!("\r\n", "\n)
とやりましたが効果がありません・・・。
0717デフォルトの名無しさん
2008/01/10(木) 15:18:04require 'nkf'
lf_text = NKF.nkf('-d',crlf_text)
0718デフォルトの名無しさん
2008/01/10(木) 15:33:03放っておくとJISになるような
0719714
2008/01/10(木) 15:41:20Shift JIS なら -ds でいけました。ありがとうございました。
前もって改行コードを取得できたらいいのですが、
何やらむずかしそうですね。
0720デフォルトの名無しさん
2008/01/10(木) 15:49:16ruby 1.8が前提なら
a = "hoge\r\n"
b = "fuga\n"
c = "moe\r"
p a.chomp+"\n" # => "hoge\n"
p b.chomp+"\n" # => "fuga\n"
p c.chomp+"\n"" # => "moe\n"
でも,なんで716がうごかないんだろ
0721716
2008/01/10(木) 15:58:50ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]で、
File#getsを使って行を取得しています(改行コードも入るときいたので)。
Windowsだからダメなんでしょうか・・・。
0722デフォルトの名無しさん
2008/01/10(木) 16:14:17binmodeにしないまま書き込めば\nが\r\nに変換されて書き込まれる
0723716
2008/01/10(木) 16:39:40それだ!解決しました。
大変お世話になりました。
0724デフォルトの名無しさん
2008/01/10(木) 23:03:550725デフォルトの名無しさん
2008/01/11(金) 09:48:33話聞いてなかったろ?
0726デフォルトの名無しさん
2008/01/11(金) 14:03:22「既存の大量の画像入りディレクトリの中身と重複したエロい画像を手に入れても削除」
っていう便利スクリプト作ろうと思った。
md5が重複する可能性を危惧して「ファイルの先頭2キロバイトくらいもデータベースに保持しておいて比較」とかしようと思う。
一瞬「えー200個くらい画像を入手するたびにファイルの先頭ガリガリ読み込むのかよ」と思ってげんなりしたけど、
よく考えるまでもなくmd5ハッシュを作る時点でファイル全文読んでるよね。気にしないほうがいいか。
0727デフォルトの名無しさん
2008/01/11(金) 14:26:540728デフォルトの名無しさん
2008/01/11(金) 14:33:44IPHeaderいじたいんだけども。
0729デフォルトの名無しさん
2008/01/11(金) 14:56:22MD5 と SHA1 の二本立てでおけ。
0730デフォルトの名無しさん
2008/01/11(金) 14:57:53そもそも管理しようという気力がなくなる。
チンゴがボトルネックになってしまうんだよな。
0731今日からRUBY
2008/01/11(金) 15:09:58$ruby hoge.rb 1
このように 1 を引数として送ってみましたが「そんなファイルはないよ」というエラーがでました。
0732デフォルトの名無しさん
2008/01/11(金) 15:14:57Cとかで作るのとほぼ同じ。
マニュアルにもあるけど、パラメータが定数で指定できない場合は即値で指定すれば何でもできる。はず...
0733デフォルトの名無しさん
2008/01/11(金) 15:15:10Socketでは不足?
>>731
お前のシステムは日本語で喋るのか?
はいいとしてとりあえずはARGVの使い方調べれ。
スクリプトの引数を空白で区切って配列にしたものが入ってる。
0734デフォルトの名無しさん
2008/01/11(金) 15:17:36Socketで引数にSOCK_RAWが指定できるみたい
>>731
まずは標準入出力など超重要概念を学ぶのが先
たのしいUNIXでも嫁
0735デフォルトの名無しさん
2008/01/11(金) 15:18:10'1' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
こいつ! 日本語で喋るぞ!
0736デフォルトの名無しさん
2008/01/11(金) 15:24:40いやユーザーレベルで適当な入門書少ないけどな
0737今日からRUBY
2008/01/11(金) 15:49:27英語です。
そんなこと書いてあるっぽいってことで、、、下手な役ですみません
ARGV検索してみます!
ありがとうです!
0738デフォルトの名無しさん
2008/01/11(金) 15:53:19> MD5 と SHA1 の二本立てでおけ。
SHA2か256にしない理由は?
0739デフォルトの名無しさん
2008/01/11(金) 16:24:550740デフォルトの名無しさん
2008/01/11(金) 16:33:130741デフォルトの名無しさん
2008/01/11(金) 16:38:47> いや、1000個に1個誤認するとかいうレベルでもかなりヤな感じだと思うんだが
そんなレベルなら今頃衝突しまくってる気がする
0742デフォルトの名無しさん
2008/01/11(金) 16:44:390743デフォルトの名無しさん
2008/01/11(金) 16:45:0010万回に1個ぶつかるくらいになったあたりで警告出して欲しい(w
SHA256はなんか長いから遅いんだろうなと思ったら
メガ未満のファイルを大量に処理するぶんには体感上MD5とほとんど変わらんな
なんで流行らないんだ?
irb>p Digest::SHA256::hexdigest(File.read('img.jpg'))
"4c8cfdb15d48ad839d67c3c485c7905092880cb18feb8ef170c09540adcfa29c"
0744デフォルトの名無しさん
2008/01/11(金) 17:02:41検出間違ったら建物が爆発するとかミサイルが飛ぶとかそういうのでない限りmd5で問題ないもの
画像に至っては「両方の画像を表示して同一画像であることをユーザーに確認させる」とかいうのもあるし
今からハッシュ関数利用してプログラム作るならmd5は捨ててSHA256以上を最初から使っとけって言ってたのは誰だったか
0745今日からRUBY
2008/01/11(金) 17:18:51ディレクトリ内のファイルを1ファイルずつ変数に入れるループ文を書きたいのですがどうすればいいでしょうか?
分からないところは1ファイルずつ取り出すところです
# 以下ではoにすべてのファイルが入ってしまう
o = `dir`
o.each {
|x|
puts x
}
# 上に同じ ∞ループ、、、(;ω;)
while( o = `dir` )
put o
end
0746デフォルトの名無しさん
2008/01/11(金) 17:22:11puts f
}
0747デフォルトの名無しさん
2008/01/11(金) 17:27:37>>3 のリファレンスマニュアルのFileとDirのところ全部読め
0748今日からRUBY
2008/01/11(金) 17:31:12dir = Dir.open('.')
while file = dir.read
print file,"\n"
end
これで、できました!
>>746さん
れすありがとうございます
それも試してみます!
>>747さん
今日はじめたのですがとりあえず動かすのが楽しくて、、
落ち着いたらリファレンス読みます!
あとPHPは投げ捨てます(^^)
0749デフォルトの名無しさん
2008/01/11(金) 17:37:260750デフォルトの名無しさん
2008/01/11(金) 17:42:50後々面倒だから
0751デフォルトの名無しさん
2008/01/11(金) 17:44:0550%の確率で衝突がおこるっぽい。
MD5は128bitだよね?
なら、2171京個のファイルがあれば50%の確率で衝突するはず?
0752デフォルトの名無しさん
2008/01/11(金) 17:50:5040%ならセーフなのか? 違うだろ?
10%だってお話にならんだろ?
リンゴが10個あったら1個ミカンと間違われて捨てられるんだぜ?
1万円を千円札10枚に両替したら1万円札が混じってるんだぜ? どんなドジっこだオラ
0753デフォルトの名無しさん
2008/01/11(金) 17:53:53とりあえずみかんの例は
「このシステムを使って2000京個のりんごを識別すると50パーセントの確率で1個だけみかんが混じってる」
と解釈するべき
50パーセントという数字だけ持ち出すとネタにしかならんぞ
0754今日からRuby
2008/01/11(金) 17:55:53すみません、、(;ω;)
僕はまともに使えるのPHPだけなので貶める意図はないです
少しPHPに飽きていたところだったのでrubyが面白くて
0755デフォルトの名無しさん
2008/01/11(金) 17:59:52間違って1つしかなかった激エロ画像を削除してしまうんじゃないかとビクビクすることなく枕高くして眠れるよ
0756デフォルトの名無しさん
2008/01/11(金) 18:01:460757デフォルトの名無しさん
2008/01/11(金) 18:03:271学級が40人の時、同じ誕生日な生徒がいる確率は約九割です。
しかし九割の生徒が同じ誕生日というわけではありません。
0758デフォルトの名無しさん
2008/01/11(金) 18:03:563.2 ブロック付きメソッドにブロックを渡すにはどうすればいいですか
ブロック付きメソッドにブロックを渡すには、メソッドの後ろにブロックを置く方法の他に、
手続きオブジェクト(を指す変数、定数)の前に&をつけて引数として渡す方法があります。
0759デフォルトの名無しさん
2008/01/11(金) 18:23:17とりあえずファイルサイズが違っていたらfalse
両者のファイルを開いてバッファごとに比較し違っていた時点でfalse
という処理
比較先の画像ファイル自体にいちいちアクセスしたくないならdigestを長くしておくのがよいかと
0760デフォルトの名無しさん
2008/01/11(金) 18:24:24perlを貶めるなということか?
0761デフォルトの名無しさん
2008/01/11(金) 18:29:01その例はまるで違ってるぞ。
0762デフォルトの名無しさん
2008/01/11(金) 18:39:29を使っているのですが、困っています。
このライブラリはWindows上でRubyで実行してもちゃんと”あいう”を”aiu”って変換してくれるのですが、
ruby on railsを用いてサーバ上で処理として組み込むと(サーバ上のrubyに書き込むと)”あいう”を変換させようとすると”あいう”と出力されます。
kana2rom.rb本体はrailsに合わせてutf-8に変換しました。
で、
require "kana2rom"
Kana2Rom::kana2rom(str)
しました。
伝わりますでしょうか?助けてください。よろしくお願いします。
0763デフォルトの名無しさん
2008/01/11(金) 18:46:03パッと見た感じ、入力が EUC-JP と期待しているコードになってるね。
str.split(//e) とか。
kana2rom.rb 自体はそのままで、
入力する文字列を一旦 EUC-JP に変換してから処理するようにする。
それがイヤなら横着せずに *真面目に* UTF-8 に対応するように修正しる。
0764763
2008/01/11(金) 18:49:09ていうか、それどっかで見たことあるなと思ったら、
以前 Ruby 本スレで出てきたやつだね。
そっちのスレにいろいろ対処法が書いてあったからそっち見れ。
0765デフォルトの名無しさん
2008/01/11(金) 18:51:21野良モジュールの面倒まで見てられないが、たぶん、正規表現がeuc対応のままだからだと思う
//e とかを全部 //u に置き換えたら動作しそうな気もする
あとサーバ上でならKAKASIとかあんじゃん
$ echo "あいうえお" | kakasi -Ha -Ka -Ja -Ea -ka
aiueo
$ echo "我輩は猫である" | kakasi -Ha -Ka -Ja -Ea -ka
wagahaihanekodearu
$ echo "我輩は猫である" | kakasi -w | kakasi -Ha -Ka -Ja -Ea -ka
wagahai ha neko dearu
0766デフォルトの名無しさん
2008/01/11(金) 18:57:18というコンセプトであるように見える
0767デフォルトの名無しさん
2008/01/11(金) 19:14:41p = proc {|x| puts x*10 }
[1,2,3].each(&p)
0768デフォルトの名無しさん
2008/01/11(金) 19:32:41なるほど
0769デフォルトの名無しさん
2008/01/11(金) 19:39:20こういう数字のマジックにコロっと騙されちゃう奴って結構いるもんなんだよね。
0770デフォルトの名無しさん
2008/01/11(金) 19:44:23MD5 はセキュリティ上問題がある(意図的に衝突させられる)から
SHA256 を使うべきという話らしいけどね。
0771デフォルトの名無しさん
2008/01/11(金) 20:23:53実はMethodなんかも渡せるのでたまに使う
[1,2,3].each(&method(:p))
あとメソッド定義した時に&で受けて&で渡すとか
def foo(&block)
[1,2,3].each &block
end
0772デフォルトの名無しさん
2008/01/11(金) 20:49:00それらを実例としてFAQに追加しておいてもらえませんか?
0773デフォルトの名無しさん
2008/01/11(金) 20:50:200774デフォルトの名無しさん
2008/01/11(金) 21:08:59マニュアルのメソッド呼び出しのところ読めば詳しく書いてあるよ
でも無ければ無いでなんとかなる機能だしFAQに載せる程かな?
それでも気になるなら自分で追加するといい
0775デフォルトの名無しさん
2008/01/11(金) 21:15:340776デフォルトの名無しさん
2008/01/11(金) 22:09:08あのFAQ集は日本語の文章に変なところが多くて読み辛い。
0777デフォルトの名無しさん
2008/01/12(土) 00:19:140778デフォルトの名無しさん
2008/01/12(土) 00:31:42require 'digest/sha2' で256も512も使える。
0779デフォルトの名無しさん
2008/01/12(土) 11:23:221を01や001などと任意の数の0を左側に付けて
変換するようなメソッドは有りますか?
0780デフォルトの名無しさん
2008/01/12(土) 11:32:440781デフォルトの名無しさん
2008/01/12(土) 11:38:580782デフォルトの名無しさん
2008/01/12(土) 11:50:560783デフォルトの名無しさん
2008/01/12(土) 13:34:29いやー、俺おもうけどさ。
FAQもそうだけど、マニュアルにサンプルコードがあるのってすごく助かるよ
ちょっと載ってるだけで、イメージがつかめる
いやこれは、仕事でMSDN見てて思うんだけど(Microsoftのオンラインヘルプ)、
Javaのリファレンスとか、本当にリファレンスしか載ってないもんな。
いつも、.chmのRubyリファレンス見て不満におもってたけど、
ri使ったら、サンプルコードちゃんと載ってるんだよね。
リファレンスの方にも載せることってできないのかな?
0784デフォルトの名無しさん
2008/01/12(土) 13:35:33> Javaのリファレンスとか、本当にリファレンスしか載ってないもんな。
MSのヘルプは、サンプルや、使い方がよく載っていて、
Javaなんかは、ぜんぜん載ってないっていいたかったのです。
わかりにくかったスマソ
0785デフォルトの名無しさん
2008/01/12(土) 13:47:44マニュアル整備しようぜという話は定期的に出るけど必ず頓挫するね
何がそんなに壁なの? 飽きちゃうの?
あと2chに書き込んだコードはオープンソース云々と相性悪くて取り込めないので注意
0786デフォルトの名無しさん
2008/01/12(土) 14:25:31わかってるって
0787デフォルトの名無しさん
2008/01/12(土) 14:28:38Java のリファレンスは JavaDoc で auto generation
それにサンプル載せるということは
0788デフォルトの名無しさん
2008/01/12(土) 14:31:24JavaはMSと違ってsourceそのものがある
0789デフォルトの名無しさん
2008/01/12(土) 17:04:48そくわらんが、そのsourceには、使い方が書いてあるの?
0790デフォルトの名無しさん
2008/01/12(土) 17:39:23じゃああなたがマニュアル整備してください。
0791デフォルトの名無しさん
2008/01/12(土) 18:08:53マニュアル欲しい人は書くのに十分な知識を持っていない。
0792デフォルトの名無しさん
2008/01/12(土) 18:09:380793デフォルトの名無しさん
2008/01/12(土) 18:14:56今、やりたいのは
http://www.uploda.org/uporg1199589.csv.html
このようなファイルの処理で
これに時間をつける為に
http://www.uploda.org/uporg1199594.txt.html
このファイルを作ったのですが(rbがうp出来なかったのでtxtにしてあります)、
deltaがlocal variableだと言って処理してくれません。
if(file_io.lineno == 4)
で取得したdeltaを下にも使いたいのですが、どうすればいいでしょうか?
0794デフォルトの名無しさん
2008/01/12(土) 18:19:23@deltaに書き換えたら出来てしまった・・・なんでやねん・・・
0795デフォルトの名無しさん
2008/01/12(土) 18:23:44マニュアル整備しようぜという話からるりまができたんじゃね?
あと最近のRubyリファレンスはサーバーエラーが出まくってて
とてもまともに編集できたものじゃない
0796デフォルトの名無しさん
2008/01/12(土) 18:25:19delta = nil
とでもしとけばブロックの中でもそのdeltaを見るようになる。
0797デフォルトの名無しさん
2008/01/12(土) 18:26:18Ruby だとしたらあの 500 エラーはちょっと悲しい
0798デフォルトの名無しさん
2008/01/12(土) 18:31:32503エラーが出るのは、
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/43743
0799デフォルトの名無しさん
2008/01/12(土) 18:33:13情報どうもです
0800デフォルトの名無しさん
2008/01/12(土) 18:35:010801デフォルトの名無しさん
2008/01/12(土) 18:37:15単にサーバーマシンの性能が足りないだけだと思うんだけど
>>793
変数deltaがブロックの中で定義されたために
そのブロック中でのみ有効な変数(ブロックローカル変数)になっている
対策は>>796の助言通り、ブロックの外でdeltaを定義(代入)しておくこと
あとソースコードの中で無闇にマジックナンバー使うのはやめれ
0802デフォルトの名無しさん
2008/01/12(土) 18:44:21マジックナンバーってなんですか?
0803デフォルトの名無しさん
2008/01/12(土) 18:45:59ソフトがリソースを食う。
ハードのリソースが足りない。
の両方を意味するから、あのメールだけではどちらともいえないが、
簡単に解決する方法は、たぶんハード増強のほうだろうな。
0804デフォルトの名無しさん
2008/01/12(土) 18:48:04ifの外に書いてもダメでした。
あと
delta = nilはダメっぽいですよ。Fixnumに直せないって。
単純に
deltaって定義したらいけました。
ローカル変数の方がその外の変数より優先されるんじゃないですか?
どうしてlineno==4のところではローカル変数のdeltaとして認識されないで、グローバルなdeltaとして認識されるんっでyそう+
0805デフォルトの名無しさん
2008/01/12(土) 18:49:58あと、deltaと書くだけではダメで
delta = 0なりnilと書かないとダメみたいです;;
ローカル変数とか良く分からない;;;
0806デフォルトの名無しさん
2008/01/12(土) 18:52:21意味ありげだが値からは意味が分からない数。
4のほうは、Deltaの行の判定のようだが、
見たところDeltaという見出しがある行は1つしかないから、
行番号まで判定する必要がそもそもない。
43のほうは、その43とはどういう意味の43なのか分からない。
0807デフォルトの名無しさん
2008/01/12(土) 18:55:02と単独で書くと、deltaというメソッドの呼び出しと見なされる。
# delta() と書くのと同じってこと。
変数だと教えるために何かを代入する必要がある。
あと、ブロックを作ってるのはifじゃなくてscanの後ろの do 〜 end。
0808デフォルトの名無しさん
2008/01/12(土) 18:56:17このファイルの仕様で(オシロがそう掃き出すらしい)
if lineno==4
としたのは、そこで判別した方が速いと思ったからです。
いちいち正規で判別させると遅いので、
行数でまず捌いた方がいいかと。
これはマジックナンバーですか?
0809デフォルトの名無しさん
2008/01/12(土) 19:01:11ブロックがscan do ~ end
の部分であれば、
なぜこれだとダメなんですか?
どこまで外のdeltaを定義すればいいですか?
コメントアウトされている、ちょうどその上のdelta = nilというのを発動させるとうまくいきますが。
http://www.uploda.net/cgi/uploader4/index.php?file_id=0000025022.udn
0810デフォルトの名無しさん
2008/01/12(土) 19:01:490811デフォルトの名無しさん
2008/01/12(土) 19:07:36マジックナンバーです
>>809
OK、まずRubyのリファレンスマニュアルを熟読だ
もしくはGoogleで適当な初心者向け解説サイトを探せ
0812デフォルトの名無しさん
2008/01/12(土) 19:07:52暇があったらあのオシロ用に完璧なコードも書きたいと思っています。
ゆとりな後輩たちに何か残してやりたくて。
0813デフォルトの名無しさん
2008/01/12(土) 19:09:11本は読んだつもりなんですけど。
たのしいRubyとかピッケル本とか
ローカル変数とかはクラス作ってやるとあんまり関係なくなりますよね。
ローカル変数とかで引っかかった事がないので驚いているだけかと。
ここで教えてもらえば済む事です。
0814デフォルトの名無しさん
2008/01/12(土) 19:12:40とても かっこいい
0815デフォルトの名無しさん
2008/01/12(土) 19:19:17個人でブログやってrubyテクを披露している人いますが、その人たちが
FAQやマニュアルを編集してくれればいいでしょうな。ruby公式FAQと
マニュアル・レファレンスをウィキみたくユーザー参加型にすればよいと思います。
javaと比べてみても、rubyは文章編集とユーザー参加がまだ閉鎖的ですし、
昔のパソコン通信(メーリングとかネットニュース)を思い返しますw
Web 2.0
ところでピッケル本(英語・日本語)の評判はどうでしょうか。
rubyの教科書となりえてますか?
0816デフォルトの名無しさん
2008/01/12(土) 19:19:29自分でやれ
0817デフォルトの名無しさん
2008/01/12(土) 19:33:25Dir.mkdir(TMPDIR) unless FileTest.directory?(TMPDIR)
Dir.glob("*.csv").each{|csv|
infile = File.readlines(csv)
io_out = File.open(TMPDIR + '\\' + csv.downcase, "w")
delta = infile[3].scan(/\ADelta\(second\),(.+?)\Z/).to_s.to_f
time = 0.0
infile[2].scan(/Time\/div,\s?(\d+?)(ms|s)\/div/){
(measure, t) = $2, $1
if measure == 'ms' then
time = t.to_f*10**(-3)
else
time = t.to_f
end
}
io_out.print "#t, ch1, ch2\n"
infile.each_with_index do |line, n|
next if n < 43
(ch1, ch2) = line.scan(/^(.*?),(.*?)$/).flatten
io_out.print((n.to_i-1)*delta, ", ", ch1, ", ", ch2, "\n")
end
}
0818デフォルトの名無しさん
2008/01/12(土) 19:44:140819デフォルトの名無しさん
2008/01/12(土) 19:45:17所詮はperlとどっこいw
0820デフォルトの名無しさん
2008/01/12(土) 19:59:20それじゃ完璧じゃないの・・・
おれのとやってる事が全く同じなの・・・
あと、ファイルを読み込んで、そのままグラフに掃き出せたら
あのゆとりどもも少しは楽になるかなと思っている。
>>816
そこをどうにか。
自分もある意味ゆとりなので
0821デフォルトの名無しさん
2008/01/12(土) 20:04:28ググれ
0822デフォルトの名無しさん
2008/01/12(土) 20:08:22お前は何を求めてここに来てるんだ
単に完璧なコードに書き直してほしいだけなのか
それともこの課題(?)を通してRubyの学習がしたいのか、どっちなんだ
0823デフォルトの名無しさん
2008/01/12(土) 20:11:10後者です。だからローカル変数について、上のコードで説明を求めています。
0824デフォルトの名無しさん
2008/01/12(土) 20:18:48FileUtils.mkdir_p 'tmp'
Dir.foreach(".") do |filename|
next unless filename =~ /^\d+?.csv$/i
in_lines = IO.readlines(filename)
delta = nil
in_lines[4].scan(/^Delta\(second\),(.*?)\r\n$/) do |matched|
delta = matched[0].to_f
end
in_lines = in_lines[43..-1] #42行目までを捨てる
base = File.basename(filename.downcase, ".csv")
open("tmp/#{base}.csv", "w") do |out_file|
out_file.puts "#t, ch1, ch2"
in_lines.size.times do |i|
in_lines[i].scan(/^(.*?),(.*?)\r\n$/) do |matched|
ch1 = matched[0].to_f
ch2 = matched[1].to_f
out_file.puts "#{i*delta}, #{ch1}, #{ch2}"
end
end
end
end
0825デフォルトの名無しさん
2008/01/12(土) 20:19:32人とのふれあい
0826デフォルトの名無しさん
2008/01/12(土) 20:23:07やってる事はまったく同じです。
0827デフォルトの名無しさん
2008/01/12(土) 20:53:28- ファイル名の連結には File.join を使用する事。
0828デフォルトの名無しさん
2008/01/12(土) 20:57:24以下のコードを実行しても論理的に間違っているようで,
思った通りに条件分岐されません.
$KCODE="SJIS"
dat=["Alpha","ひらがな","漢字","カタカナ"]
dat.each{ |str|
p str
case str
when /\w.*/
p "英数"
when /^[あ-ん].*/
p "ひらがな"
when /^[ア-ン].*/
p "カタカナ"
when /^[亜-].*/
p "漢字"
end
}
また,
when /^[あ-ん].*/
の記述が良くないらしく,
9: invalid regular expression: /^[\202\240-\202\361].*/
と言われます.
どう修正したら良いんでしょうか?
0829デフォルトの名無しさん
2008/01/12(土) 21:03:57「読めないコード」にすべきではないと感じる
学習レベルに合わせたスクリプトのほうがよいかと
0830デフォルトの名無しさん
2008/01/12(土) 21:08:10dat=["Alpha","ひらがな","漢字","カタカナ"]
dat.each{ |str|
p str
case str
when /^[あ-ん]+/s
p "ひらがな"
when /^[ア-ン]+/s
p "カタカナ"
when /^[亜-煕]+/s
p "漢字"
else
p 'それ以外の何か'
end
}
0831デフォルトの名無しさん
2008/01/12(土) 21:21:18アルファベットを無視するな(w
$KCODE = 'SJIS'
dat = ['Alpha', 'ひらがな', '漢字', 'カタカナ', '0123', 'ねこ大好き']
dat.each{ |str|
p str
case str
when /^[A-z]+$/s
p 'アルファベットのみ'
when /^[0-9]+$/s
p '数字のみ'
when /^[あ-ん]+$/s
p 'ひらがなのみ'
when /^[ア-ン]+$/s
p 'カタカナのみ'
when /^[亜-煕]+$/s
p '漢字のみ'
else
p '混合か全角英数字か記号'
end
}
0832デフォルトの名無しさん
2008/01/12(土) 21:25:29どうして?特に前者。
だってそうしないと\rや\nも出てくる。
0833デフォルトの名無しさん
2008/01/12(土) 21:31:59なるほど.漢字コードを明示すればいいのですね.
ありがとうございました.
0834デフォルトの名無しさん
2008/01/12(土) 21:43:05いや重要なのはそこじゃない
というか漢字コードは明示しなくても、$KCODEに合わせてちゃんとマッチしてくれるはず
間違ってたのは正規表現の中身だ
0835827
2008/01/12(土) 21:47:36行末 '$' は改行 '\r\n' の前に位置するから上の場合は記述する必要が無い。
'\n' でも '\r' でも同じ。むしろ記述すると別環境で不具合に種になりうる。
0836デフォルトの名無しさん
2008/01/12(土) 22:03:40もしこのプログラムで$の前に\rや\nがあるとすると、
この正規表現で取得出来るのは嘘になるのですが。
\nや\rが$より後ろにあるというのはさすがにないでしょう。
0837デフォルトの名無しさん
2008/01/12(土) 22:09:460838デフォルトの名無しさん
2008/01/12(土) 22:11:49=> [false, true, false]
0839824
2008/01/12(土) 22:15:09その通り。同じ事を書いた。
>823 はRubyを学習したいと言った。
同じ事を書いてるのにどうして違うコードになるか。
そして同じだけど違うコードを読み比べることで
「ここは読みやすくなった」「これはちょっとおかしい」など
存分に学習に生かして欲しいと願う所存。
0840デフォルトの名無しさん
2008/01/12(土) 22:16:57RDEを使用しているのですが、ファイルopen出来なくて困ってます。
保存場所が間違えているのかと思い、RDEのリファレンスを見ました、同じことを質問している人がいましたが
「readfile.txtの保存場所はどこに?」という質問に対して返答がありませんでしたので、解る方教えて下さい。
何か根本的に間違えている所がありましたら、お手数ですがそこも指摘をお願い致します。
0841デフォルトの名無しさん
2008/01/12(土) 22:17:53何やってるのかさっぱり分からない。
0842デフォルトの名無しさん
2008/01/12(土) 22:18:240843デフォルトの名無しさん
2008/01/12(土) 22:24:38>>840
日本語でおk
0844デフォルトの名無しさん
2008/01/12(土) 22:25:450845デフォルトの名無しさん
2008/01/12(土) 22:26:28[いつもの場所]
に保存されているとみんな思ってるから答えないんだよ
0846デフォルトの名無しさん
2008/01/12(土) 22:40:410847デフォルトの名無しさん
2008/01/12(土) 22:47:470848827
2008/01/12(土) 23:06:05>>835 は間違ってるね。ごめんなさい。でも >>827 の方は訂正しないよ。
言いたい事は、不必要に環境に依存するコードを書くな、て事。
0849デフォルトの名無しさん
2008/01/12(土) 23:08:31環境に依存せずに改行コードだけ
取り除く方法を教えてください
0850デフォルトの名無しさん
2008/01/12(土) 23:10:300851デフォルトの名無しさん
2008/01/12(土) 23:13:520852デフォルトの名無しさん
2008/01/12(土) 23:14:23String#chomp
String#chomp!
0853デフォルトの名無しさん
2008/01/12(土) 23:14:38\rと\nを""に置換すれば?
0854デフォルトの名無しさん
2008/01/12(土) 23:16:43CRLFだろうがLFだろうがCRだけだろうが適当に取ってくれる
0855デフォルトの名無しさん
2008/01/12(土) 23:18:560856デフォルトの名無しさん
2008/01/12(土) 23:20:49マニュアル読もうとは思わないのか?
0857デフォルトの名無しさん
2008/01/12(土) 23:30:06p Dir.pwd
で言われる場所からの相対パス
あるいは絶対パス
でreadfile.txtとやらの場所をopenに教える
0858デフォルトの名無しさん
2008/01/12(土) 23:35:22はい
0859デフォルトの名無しさん
2008/01/12(土) 23:41:520860デフォルトの名無しさん
2008/01/12(土) 23:44:130861デフォルトの名無しさん
2008/01/12(土) 23:44:37自分が出来ないからって涙目になるなよ
0862デフォルトの名無しさん
2008/01/13(日) 00:09:510863デフォルトの名無しさん
2008/01/13(日) 00:25:470864デフォルトの名無しさん
2008/01/13(日) 00:28:320865デフォルトの名無しさん
2008/01/13(日) 00:55:320866デフォルトの名無しさん
2008/01/13(日) 00:56:36どうぞ持っていってください
0867デフォルトの名無しさん
2008/01/13(日) 01:16:05できました!
親切な返答、ありがとうございます。
0868デフォルトの名無しさん
2008/01/13(日) 01:51:280869デフォルトの名無しさん
2008/01/13(日) 02:22:090870デフォルトの名無しさん
2008/01/13(日) 02:26:140871デフォルトの名無しさん
2008/01/13(日) 07:44:38Rubyのオンラインのリファレンスマニュアルってめちゃくちゃ読みにくいし
時々落ちてて参照出来ないしページまるごと無くなってたりするし・・・
0872デフォルトの名無しさん
2008/01/13(日) 08:20:51chm版オススメ
0873デフォルトの名無しさん
2008/01/13(日) 08:24:34つgoogleキャッシュ
0874デフォルトの名無しさん
2008/01/13(日) 08:31:370875デフォルトの名無しさん
2008/01/13(日) 08:44:350876デフォルトの名無しさん
2008/01/13(日) 09:06:120877デフォルトの名無しさん
2008/01/13(日) 09:22:21なんで「メソッド一覧:」が無いんだぜ?
Web版はあるのに・・・
0878デフォルトの名無しさん
2008/01/13(日) 09:41:36:メソッド一覧 にしてみ
0879デフォルトの名無しさん
2008/01/13(日) 09:48:02htmlそのものは存在するが、リンクされていない(ページ下部のメニューが消えているため)
ディレクトリ内にある、やたらでかい「methodlist.html」がそれ
0880デフォルトの名無しさん
2008/01/13(日) 10:42:23ずっとgrepしてたぞ。
0881878
2008/01/13(日) 10:51:250882デフォルトの名無しさん
2008/01/13(日) 13:29:01他の人も書いてるけど,netbeansやemacs (winならMeadow)を使うのも一つの選択肢だな
RDEはRubyに特化しているんでいいっちゃいいんだけど
やっぱ,上の2つに比べて圧倒的にWebに蓄積された情報が少ないし
使っている人も少ないからレスポンスも悪いと思う.
Meadow + mswinRuby (one-click Rubyとか)だと
ソースアーカイブで配布されている.elそのままだと
rubydbで絶対パス指定ができないので,例えば,rubydb3x.elだと次のように書き換えること
30行目
(while (string-match "\032\032\\(\\([a-zA-Z]:\\)?[^:\n]*\\):\\([0-9]*\\):.*\n"
36から39行目
(cons (substring gud-rubydb-marker-acc (match-beginning 1) (match-end 1))
(string-to-number (substring gud-rubydb-marker-acc
(match-beginning 3)
(match-end 3))))
要するに,emacs側はファイル名と行番号の区切りを":"としているのが
Windowsの絶対パスだとドライブ文字の後の":"にマッチしてしまうので
ドライブ文字とファイル名を括ってグルーピング指定してやる
0883デフォルトの名無しさん
2008/01/13(日) 13:59:210884デフォルトの名無しさん
2008/01/13(日) 15:25:57派外道。
おれはUbuntuでEmacs
RDEが使えたら使いたいが、無いからキレてる。
0885デフォルトの名無しさん
2008/01/13(日) 15:30:25なぜわざわざレジストリを使うんだ
そんな俺は今でもJmEditor使ってます
0886762
2008/01/13(日) 15:53:54返事が遅くなって申し訳ありません。全部//uに変えてみました。
そしたらきれいに変換を行ってくれました。
本当に助かりました。どうもありがとうございます;
0887デフォルトの名無しさん
2008/01/13(日) 16:12:30from と to というディレクトリがあって、from には a.txt が入ってます。
で、toディレクトリの中にa.txtというシンボリックリンクを作りたくて
FileUtils.symlink('from/a.txt','to/a.txt')
とやったところ、
$ ls -l to/
(中略) a.txt -> from/a.txt
という正直なシンボリックリンクができていました。
あまり絶対パスで指定したくないですがなんとかなりませんか。
0888デフォルトの名無しさん
2008/01/13(日) 16:17:39ディレクトリ跨ったシンボリックリンクは第1引数を絶対パスで指定するべし
シンボリックリンクの仕様だと思って諦めれ
0889デフォルトの名無しさん
2008/01/13(日) 17:17:41FileUtils.symlink('../from/a.txt','to/a.txt')
でいいんじゃね?
0890デフォルトの名無しさん
2008/01/13(日) 20:52:32こまめにGC.start呼ばないと、メモリ不足で落ちる。
そんなもんですかね。
0891デフォルトの名無しさん
2008/01/13(日) 20:59:29メモリが不足したら自動でガベコレしてくれないと意味ないじゃん
0892デフォルトの名無しさん
2008/01/13(日) 21:10:55「GCがヘタレだから落ちるんだよねー」ということは本当はかなり稀
極悪スクリプトの変態綱渡りをGCに無理やりフォローさせてる場合が少なくない
何らかのリソース使いっぱなしのスクリプト書いてないか
0893デフォルトの名無しさん
2008/01/13(日) 21:12:390894デフォルトの名無しさん
2008/01/13(日) 21:14:32俺はtopコマンドをじーっと見るとかそういう退廃的な手段しか知らん
0895デフォルトの名無しさん
2008/01/13(日) 21:15:47RubyのGC/RMagickの仕様みたいだよ
ttp://rubyforge.org/forum/forum.php?thread_id=1374&forum_id=1618
GCってそんなものなのかー、ってのがわかって興味深いね
0896デフォルトの名無しさん
2008/01/13(日) 21:16:19リソース使いまくるとRuby側では解放メソッドを確実に呼ぶ
くらいしか手が打てないな。(IO#closeとか)
0897デフォルトの名無しさん
2008/01/13(日) 21:24:05each_file() do |f|
jpg = Image.read(f)[0]
jpg.resize!(1000.0/jpg.rows) if jpg.rows > 1100
jpg.write(f)
jpg = nil
GC.start
end
jpg = nil; GC.start が無いとしばらく走らせてるとこける。
RMagickは今日インストールしたんだけど、入れるまでに結構てこずったし
敷居の高さを感じずにはいられない……。
>>895
英文が長いのであとで読みます。でも有難う。
0898デフォルトの名無しさん
2008/01/13(日) 21:27:150899デフォルトの名無しさん
2008/01/13(日) 21:37:22って仕組みらしいが、RMagickで確保したオブジェクトはruby側で使用サイズと認識されないため
RMagickで大量にメモリ使用されても、rubyは気づかずにGC呼びださないってことらしい
プログラムが落ちるまでGC呼び出さないなんてアホすぎる
0900デフォルトの名無しさん
2008/01/13(日) 21:43:350901デフォルトの名無しさん
2008/01/13(日) 21:44:40ぜんぜんラップされてねーじゃん
0902デフォルトの名無しさん
2008/01/13(日) 21:45:000903デフォルトの名無しさん
2008/01/13(日) 21:56:42あるあるw
俺の場合はWindowsだから、タスクマネージャ開いて
ruby.exeのメモリ使用量をじーっと観察したりしてる
0904デフォルトの名無しさん
2008/01/13(日) 22:04:50tail
出来るんだが
0905デフォルトの名無しさん
2008/01/13(日) 22:18:00RMagickの内部では単なるmallocを使ってるから失敗したら素直に落ちるってことかな?
0906デフォルトの名無しさん
2008/01/13(日) 22:34:03ユーザーがtopを監視する必要があるとか泣けるw
0907デフォルトの名無しさん
2008/01/13(日) 22:37:540908デフォルトの名無しさん
2008/01/13(日) 23:13:490909デフォルトの名無しさん
2008/01/13(日) 23:50:55RMagickでメモリ確保に失敗したらGC呼べばいいだろ
0910デフォルトの名無しさん
2008/01/13(日) 23:53:100911デフォルトの名無しさん
2008/01/13(日) 23:54:34ふらっとでふらっと向きじゃない話をしてる奴等
0912デフォルトの名無しさん
2008/01/13(日) 23:57:260913デフォルトの名無しさん
2008/01/13(日) 23:58:110914デフォルトの名無しさん
2008/01/14(月) 00:18:390915デフォルトの名無しさん
2008/01/14(月) 01:31:39ひぇー、これ知らなかったよ・・・
もう手を離れちゃったサイトどうしようw
今作ってる奴はちゃんとしよう(- -)
とりあえず
http://techno.hippy.jp/rorwiki/?How+to+debug+memory+consumption+problems+or+memory+leaks
に書いてあるように
fDisabled = GC.enable
GC.start
GC.disable if fDisabled
って記述を入れてやるのがいいのかな
0916デフォルトの名無しさん
2008/01/14(月) 01:31:500917デフォルトの名無しさん
2008/01/14(月) 01:52:18あとTextMate。
0919デフォルトの名無しさん
2008/01/14(月) 02:56:03要りそうだが)でやる設定らしきものが。
http://grigio.org/textmate_gedit_few_steps
0920デフォルトの名無しさん
2008/01/14(月) 03:12:080921デフォルトの名無しさん
2008/01/14(月) 03:24:26文字列中の記号ってどれくらいありますか?
0922デフォルトの名無しさん
2008/01/14(月) 06:59:46くだらないこと考えずに素直にマッチング文字列と正規表現の文字コード揃えろ
0923デフォルトの名無しさん
2008/01/14(月) 08:46:49使い捨てコードしか書かないからいちいちプロジェクト作るのが億劫なんだよな・・・
0924デフォルトの名無しさん
2008/01/14(月) 08:57:40なんでバカがこんなにえらそうなんだ?
ImageMagickのエラーはRubyと関係ないだろ
なんでこれがRuby GCのバグやねん
0925デフォルトの名無しさん
2008/01/14(月) 10:10:250926デフォルトの名無しさん
2008/01/14(月) 11:05:19いいね、これ。
今はgedit単体で開発してるけど、試してみようかな
0927デフォルトの名無しさん
2008/01/14(月) 18:38:31arr.sort!
のように各種メソッドを読んでarrを操作したときその変更をコールバック的に知る方法はないですか?
0928デフォルトの名無しさん
2008/01/14(月) 18:38:500929デフォルトの名無しさん
2008/01/14(月) 18:59:30リファレンスマニュアル - 添付ライブラリ - 文字コード
0930デフォルトの名無しさん
2008/01/14(月) 19:05:14汎用的にはDelegatorを使うんだろうけど。
class MethodLogger
def initialize(obj)
@obj = obj
end
def method_missing(method, *args, &block)
$stderr.puts "calling #{method}"
@obj.__send__(method, *args, &block)
$stderr.puts "returned from #{method}"
end
end
arr = [3, 2, 1]
arr = MethodLogger.new(arr)
arr.sort!
0931デフォルトの名無しさん
2008/01/14(月) 19:30:10File.open(path,"w") { |f|
f.write(str.toutf16)
}
したんですけど化けちゃうんですよ.orz
よく調べたらbomが無いようで....
0932デフォルトの名無しさん
2008/01/14(月) 20:17:39nkf コマンドのマニュアル(リファレンスマニュアルでは無い)を探しなさい
require 'nkf'
u16lnb = NKF.nkf('-S -w16L0',str) # SJIS->UTF16(LittleEndian/BOM無し)
0933デフォルトの名無しさん
2008/01/14(月) 20:24:33抜き出す場合,どんな方法でやりますか?
String[n..n]
と同等の処理です.
String[n..n]だとバイト指定なのでマルチバイト文字だと位置がずれてしまいますので.
0934デフォルトの名無しさん
2008/01/14(月) 20:36:11irb> print s.split(//e)[5]
と
irb> print s.split(//e)[6]
A
irb> print s.split(//e)[5..6]
とA
irb> print s.split(//e)[5..7]
とAB
irb> print s.split(//e)[5..8]
とABC
irb> print s.split(//e)[5..9]
とABCで
0935デフォルトの名無しさん
2008/01/14(月) 21:56:400936デフォルトの名無しさん
2008/01/14(月) 22:04:59Ruby関係なく、リソース開放などの処理するときはGCに依存しちゃダメだろwww
明示的に書かないと・・・
C#とかJavaとかでもそうだぜ?
C#で言えば、Disposeみたいなの
0937デフォルトの名無しさん
2008/01/14(月) 22:05:45なるほど.splitを利用すればいいのですね.
ありがとうございました.
0938デフォルトの名無しさん
2008/01/14(月) 22:22:20ありがとうございました.
0939デフォルトの名無しさん
2008/01/14(月) 22:56:48アホすぎるwww
0940デフォルトの名無しさん
2008/01/14(月) 23:44:27ほんとアホだなw
0941デフォルトの名無しさん
2008/01/15(火) 09:32:33もはや何から突っ込んでいいのかわからない。
0942941
2008/01/15(火) 09:34:22Managed DirectXなんかのVGAメモリと一緒ってことだな。
駄レスすまそ。
0943デフォルトの名無しさん
2008/01/15(火) 11:18:360944デフォルトの名無しさん
2008/01/15(火) 11:24:250945デフォルトの名無しさん
2008/01/15(火) 12:42:370946デフォルトの名無しさん
2008/01/15(火) 13:06:07直後にスクリプトが終了すれば何も問題はない
0947デフォルトの名無しさん
2008/01/15(火) 13:12:360948デフォルトの名無しさん
2008/01/15(火) 13:16:260949デフォルトの名無しさん
2008/01/15(火) 13:54:05File (というかIO)のクローズは呼ぶべき。
リファレンスカウント方式ってわけでもないし。
0950デフォルトの名無しさん
2008/01/15(火) 14:07:290951デフォルトの名無しさん
2008/01/15(火) 14:54:42があったとして、これをputとかで表示させたいのですが、
yyy
(2秒)
yyy
(1.5秒)
yyy
(2秒)
・(1秒)・(1秒)・(1秒)
ぴか〜ん!!
って表示させたいです。()内の秒数はだいたいの感覚です。
こんなことするにはどうすれば良いですか?
0952デフォルトの名無しさん
2008/01/15(火) 15:00:120953デフォルトの名無しさん
2008/01/15(火) 15:04:21puts の出力はバッファリングされてしまうと思うので、
puts str; $stdout.flush とかやって flush する。
0954デフォルトの名無しさん
2008/01/15(火) 15:47:20> なんでリファレンスカウント方式じゃなかったら呼ぶべきなの?
というか、逆かな。
リファレンスカウントなら、確実に参照が無くなった時点で回収されるはずだから、
確実に参照が無くなるように書いておけばおkではないかと思ったのだけど、変?
0955デフォルトの名無しさん
2008/01/15(火) 16:07:25gemで、あるパッケージAをインストールして、その際に依存関係のある別パッ
ケージBもインストールされたとします。
その後、Bのバージョンを上げた場合、Aは依存関係が保証されなくなって使え
なくなるのでしょうか?それともバージョンが上がっても、gemは依存関係が解
決されているものとみなすのでしょうか?
0956デフォルトの名無しさん
2008/01/15(火) 16:25:13という Arrayに対して、
b = [ 0, 2, 3, 1 ]
というsortした時の順位(index)をArrayにしてGETしたいのですが、
どのようにするのが簡潔で高速でしょうか?
0957デフォルトの名無しさん
2008/01/15(火) 16:58:06irb> a
[1.0, 3.0, 4.2, 2.5]
irb> a.map{|e| a.sort.index(e)}
[0, 2, 3, 1]
>>955
多くの場合使えるが、Aで
「Bのバージョンはx.x.xかそれ以前限定でよろしこ」
と設定されてれば使えない。
つまりA次第。
0958デフォルトの名無しさん
2008/01/15(火) 17:02:24Disposeと明示的な呼び出しは関係ないだろwww
0959デフォルトの名無しさん
2008/01/15(火) 17:03:59a.sortを最初に変数に入れておいたほうがいいと思う
a = [ 1.0, 3.0, 4.2, 2.5 ]
sorted = a.sort
p a.map{|e| sorted.index(e)}
0960デフォルトの名無しさん
2008/01/15(火) 17:14:03a = [ 1.0, 3.0, 4.2, 2.5 ]
h = {}
a.sort.each_with_index{|e, i| h[e] = i}
p h.values_at(*a)
のほうが速かった
0961デフォルトの名無しさん
2008/01/15(火) 17:22:400962デフォルトの名無しさん
2008/01/15(火) 17:31:40real 0m8.506s
user 0m8.450s
sys 0m0.020s
$ time ruby with_hash.rb
real 0m0.199s
user 0m0.160s
sys 0m0.040s
あー問題外問題外
indexで探すのに時間がかかってるんだな
っていうかもしかしてindexはこういう用途に向かんのか?
0963デフォルトの名無しさん
2008/01/15(火) 17:35:22ロックしたい時や、馬鹿でかいファイル以外は
IO.readlines で済ます
書き込みもある程度openブロックの中が小さくなるように書く
0964デフォルトの名無しさん
2008/01/15(火) 17:49:22線形探索してるだろうから、要素数が大きくなってきたらダメなんじゃないかな。
0965デフォルトの名無しさん
2008/01/15(火) 21:01:32なるほど
じゃあマーク&スイープだったらGCに任せておいたらいけないんだろうか
0966デフォルトの名無しさん
2008/01/15(火) 21:57:37孤立しているオブジェクト群がそのまま残り続けるとかいう欠点が指摘され
ることが多いけど、最近は改善されてるの?
0967デフォルトの名無しさん
2008/01/15(火) 22:07:360968955
2008/01/15(火) 22:29:15> 多くの場合使えるが、Aで
> 「Bのバージョンはx.x.xかそれ以前限定でよろしこ」
> と設定されてれば使えない。
> つまりA次第。
すみません、大変遅くなりました。ありがとうございます。
私の場合、AはRailsであり、Bはいろいろあるのですが、どのように設定されて
いるか、どこを見ればわかるでしょうか?
0969デフォルトの名無しさん
2008/01/15(火) 22:31:35>>968
$ gem dependency rails
Gem rails-2.0.2
rake (>= 0.7.2)
activesupport (= 2.0.2)
activerecord (= 2.0.2)
actionpack (= 2.0.2)
actionmailer (= 2.0.2)
activeresource (= 2.0.2)
0970955
2008/01/15(火) 23:09:12> actionmailer (= 2.0.2)
例えば actionmailer は2.0.2に固定で、もしバージョンアップしたら依存関係
が損なわれて、Railsが使えなくなる、という理解でよろしいでしょうか?
もしそうなら、かなり縛りはきついなあ。
0971デフォルトの名無しさん
2008/01/15(火) 23:20:24バージョンがずれることは心配しなくていい。
また、依存関係は実際にrequireしようとした時点で問題になるので、
メール扱わないならconfig/environment.rbで
config.frameworks -= [ :action_mailer ]
としておけばよいだろう。
0972955
2008/01/15(火) 23:41:08それが、ちょっと都合がありまして、actionmailerだけ、バージョンを上げら
れないかと思っていたのです。
Railsからはメールを使わないことにして、
> config.frameworks -= [ :action_mailer ]
を実行しようと思います。
>>All
要領の悪い質問に、親切にお答えいただき、皆さん大変ありがとうございまし
た。
0973デフォルトの名無しさん
2008/01/15(火) 23:55:03rake rails:freeze:gemsでvendor/rails以下にrails一式コピーして、
コピーされたモノのうちactionmailerだけ別バージョンに差し替え。
バージョンチェックで引っかかったらチェックをうまいこと修正。
という手でもいけそうだな。
0974デフォルトの名無しさん
2008/01/16(水) 05:10:56<img src="<%= hogehoge %>">
って書くのが気持ち悪いんだけど
こういう書き方って普通なの?
0975デフォルトの名無しさん
2008/01/16(水) 05:31:470976デフォルトの名無しさん
2008/01/16(水) 06:32:360977デフォルトの名無しさん
2008/01/16(水) 06:48:31たぶん普通
俺は気持ち悪かったからAmritaやTenjin使ってる
0978デフォルトの名無しさん
2008/01/16(水) 07:05:41作者乙
0979デフォルトの名無しさん
2008/01/16(水) 09:35:10>>959
>>960
ありがとうございました!!Hash使います。
indexだと値がかぶったときもつねに小さいほうの数字を返して統一性があるのですが、
Hashだと同じ値があったときに順位が不定なので、その時小さいほうを返す方ように
頑張ろうと思います。
0980デフォルトの名無しさん
2008/01/16(水) 10:58:30h = {}
a.sort.each_with_index{|e, i| h[e] = i if !h[e]}
~~~~~~
0981デフォルトの名無しさん
2008/01/16(水) 11:35:17そういう問題なの?
a = [1.0, 2.0, 3.0, 2.0]
h = {}
a.sort.each_with_index{|e, i| h[e] = i if !h[e]}
h.values_at(*a) # => [0, 1, 3, 1]
~ ~
0982デフォルトの名無しさん
2008/01/16(水) 11:39:440983デフォルトの名無しさん
2008/01/16(水) 11:50:261st| 1.0
2nd| 2.0 2.0
3rd| 3.0
と並べるか
1st| 1.0
2nd| 2.0
3rd| 2.0
4th| 3.0
と並べるか
1st| 1.0
2nd| 2.0 2.0
4th| 3.0
と並べるかはケースバイケースだと思う
0984981
2008/01/16(水) 12:23:530985974
2008/01/16(水) 12:53:00Tenjinってのは初めて知りました
日本語の情報があまりないようですが結構使われているんでしょうか?
コレに関しては人柱は避けたいので枯れたものを採用したいんですが
0986デフォルトの名無しさん
2008/01/16(水) 12:55:300987974
2008/01/16(水) 12:57:190988デフォルトの名無しさん
2008/01/16(水) 15:05:44ただし、kakasiとtakasaは通常なら距離が2になるのですが、3にしたいです。
要するに母音に対して変換が行われたときのみ距離を2倍にしたいです。
できれば〜倍かはコマンドラインから指定できるとなお良いです。
扱う文字はaiuなどではなく、kakisuなど子音を含むものとします。nnやnya等も考えません。
つまり配列にいれるなら奇数のとこに必ず母音が入るというものです。
通常の距離を求めるコードは以下にソースはっておくので、どなたか改造、アドバイスお願いします。
0989デフォルトの名無しさん
2008/01/16(水) 15:07:31def 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)
0990デフォルトの名無しさん
2008/01/16(水) 15:31:250991デフォルトの名無しさん
2008/01/16(水) 16:11:080992デフォルトの名無しさん
2008/01/16(水) 16:15:350993988
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
よろしくお願いします。
0994デフォルトの名無しさん
2008/01/16(水) 18:06:30http://pc11.2ch.net/test/read.cgi/tech/1200472887/
>>985
Tenjinは比較的新しいライブラリなので、枯れてる方がいいならamrita-alteredで
0995デフォルトの名無しさん
2008/01/16(水) 18:57:14乙
0996デフォルトの名無しさん
2008/01/16(水) 20:04:090997デフォルトの名無しさん
2008/01/16(水) 20:23:590998デフォルトの名無しさん
2008/01/16(水) 20:24:280999デフォルトの名無しさん
2008/01/16(水) 20:24:45Ruby 初心者スレッド Part 17
http://pc11.2ch.net/test/read.cgi/tech/1200472887/
1000デフォルトの名無しさん
2008/01/16(水) 20:25:29Ruby 初心者スレッド Part 17
http://pc11.2ch.net/test/read.cgi/tech/1200472887/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。