Ruby 初心者スレッド ..
524:デフォルトの名無しさん
08/12/16 05:46:15
URLリンク(www.tiobe.com)
逆転もなにも、世界的には10位以下に後退したダメダメ言語だけどね
(ただ、Pythonが下がってたりLogoが爆上げしてるところから見ても
かなり変な順位づけであることは間違いない)
525:デフォルトの名無しさん
08/12/16 19:07:50
D:/desktop にある、
001test.txt
002test.txt
003test.txt
という複数のファイルを、
数字の部分に正規表現を使ったパスで一度に開きたいのですが、
どうすれば良いでしょうか?
次のように書いているのですが上手く行きません。
files = /D:/desktop/[0-9]+test.txt/
system("start #{files}")
526:デフォルトの名無しさん
08/12/16 19:21:31
リファレンスマニュアルの正規表現のとこ読め
あと %r の使い方も調べとけ
527:デフォルトの名無しさん
08/12/16 19:24:19
よく見たら正規表現関係無いじゃないか
Dir.glob
528:デフォルトの名無しさん
08/12/16 21:05:12
>>527
御返事ありがとうございます。
それで調べたら Dir.glob は正規表現ではなくワイルドカード対応と書いてあるのですが、
これは正規表現には対応していないということではないでしょうか。
>>525の書き込みはあくまで勉強中の実験のものなので、
実際に使う時にはパスを正規表現で指定したいのです。
また、>>525では省略しましたが、
開きたいファイルは似たような名前が多いので、最終的には、
name = ●●
files = %r("D:/desktop/[-9]+●●.txt")
system("start #{files}")
というような形にして、●●の部分を書き換えるだけで
任意のの複数のファイルを開けるようにしたいのです。
529:デフォルトの名無しさん
08/12/16 21:28:50
>>528
そういうのだと全ファイル名から正規表現でselectせざるをえないかな。
530:デフォルトの名無しさん
08/12/16 21:50:09
Rubyではselectはあまり使わない
find_all と呼ぶ
531:デフォルトの名無しさん
08/12/16 21:59:18
>>528
まったく同じことを繰り返すことになるが、Rubyのオブジェクトについての考え方学んでくれ
返り値がただの文字列なら、それはただの文字列(String クラスのオブジェクト)で、何か特別なものがあるわけじゃない
Stringクラスのメソッドが完全に全て動作するし、文字列オブジェクトを引数にとるメソッドは全て完全に動作する
メソッドの返り値がどのクラスのオブジェクトなのかということは絶対に意識しないと駄目よ
正規表現を使いたいなら、引数…、まあ、引数の見かけしてないことが多いけど、マッチ試行対象は文字列だ
いちばん単純な状態で必要なのは、ディレクトリ中のファイルを文字列で返すメソッド
その文字列の一群の中から、正規表現にマッチする文字列を探して、その文字列をどうにかすればいい
532:デフォルトの名無しさん
08/12/16 21:59:19
>>530
ソースは?
533:デフォルトの名無しさん
08/12/16 22:43:20
target = 'D:/desktop/*'
filter = /\d+test.txt/
system(Dir.glob(target).select{|i| i =~ filter}.unshift('start').join(' '))
534:デフォルトの名無しさん
08/12/17 00:24:48
>>533
なあ、初心者スレなんだから、もっと分かりやすく書こうぜ
filenames = Dir.glob('D:/desktop/*')
filenames = filenames.grep(/^¥d+test¥.txt$/)
system "start #{filenames.join(' ')}"
535:デフォルトの名無しさん
08/12/17 00:34:21
>>534
改行が存在しない文字列に対して ^ と $ は不適
代わりに \A と \Z を使おう
536:デフォルトの名無しさん
08/12/17 00:43:57
どなたかアドバイスください。ruby1.8.7です。
require 'tk' がうまく いきません。以下のようなメッセージが表示されます。
in `require' : no such file to load --tk (LoadError)
どうすればいいでしょうか?
537:デフォルトの名無しさん
08/12/17 00:46:52
>>536
Tcl/Tkが入ってないんじゃね?
538:デフォルトの名無しさん
08/12/17 00:48:23
>>536
tkライブラリを見つけられなかった。
tkがインストールされない環境(ってなんだろ?)か
$LOAD_PATHがおかしいんじゃない?
539:536
08/12/17 01:02:12
sudo find / -name tk で検索したところ
/usr/local/lib/ruby/1.8/test/unit/ui/tk
/usr/lib/ruby/1.8/test/unit/ui/tk
が見つかったんですけどこれとは違うんでしょうか?
ちなみに echo $LOAD_PATHでは何も表示されませんでした。
540:デフォルトの名無しさん
08/12/17 01:13:10
>>534
質問者の求める「正規表現の使えるglob」が提供されて無いから別解を提示しただけ
分かりにくいってのはわざとそうしてるんだから許してよ
>>539
それ違う
OS何?tcl/tk入ってる?wishコマンド使える?
541:デフォルトの名無しさん
08/12/17 08:10:32
>>535
>改行が存在しない文字列に対して ^ と $ は不適
逆だろ。改行が存在しない文字列だからこそ ^ や $ を使っても構わない。
542:デフォルトの名無しさん
08/12/17 08:13:15
>>540
>分かりにくいってのはわざとそうしてるんだから許してよ
なんでそんなことをするの
分かりやすく書けないのをごまかしてるだけじゃねーのかよ
543:デフォルトの名無しさん
08/12/17 08:22:36
>>541
あまりRubyの正規表現に詳しくない人間が見たら
「ああ^と$は文字列先頭と末尾なんだな。Perlと同じなんだな」とか
勘違いしちゃうよ
544:デフォルトの名無しさん
08/12/17 08:44:02
>>534
>system "start #{filenames.join(' ')}"
system 'start', *filenames
でよくね?
545:デフォルトの名無しさん
08/12/17 10:21:20
>>544
そんなこと言ったら2行目はメソッドチェーンで消えるし、
対象ディレクトリが専用ディレクトリならそもそも Dir.glob のワイルドカードつき文字列でも充分だ
君が *引数 をオボエタテだからだからといってわざわざ難しくする必要はない
546:デフォルトの名無しさん
08/12/17 10:28:48
>>541
目に見えない文字や場所にマッチする正規表現は慎重に使ったほうがええぞ
半角空白にマッチさせるために \s を使ったりしないだろ
それと同じこと
547:デフォルトの名無しさん
08/12/17 10:30:19
>>545
544じゃないけど、一般にsystemの引数は ' ' でjoinするより * で渡すほうが空白を含むファイル名等の問題をより安全に回避できるので、* のほうがお勧めだけどね
548:デフォルトの名無しさん
08/12/17 10:37:16
*の引数展開はマニュアルでも辺鄙なとこにしか書いてないからな
使うなら堂々と初心者向け解説の3ページ目から使いまくるくらいの感じにして欲しいとは思う
549:デフォルトの名無しさん
08/12/17 10:45:05
`
mkdir foo
mkdir bar
`
みたいに途中でシェルスクリプトだらだら書けるようなやり方ってない?
上の書き方だとmkdir fooだけ実行されるっぽい
550:デフォルトの名無しさん
08/12/17 10:49:19
`` はシェルコマンドを実行したいときに使う記法じゃないぞ
返り値が必要なときに使うもんだ
system 使え
551:デフォルトの名無しさん
08/12/17 10:57:56
>>544 >>547
やってみた?
552:デフォルトの名無しさん
08/12/17 11:17:32
534です。
>>547
たいへん参考になりました。
ただ初心者スレで使うには説明が必要ですね。
553:デフォルトの名無しさん
08/12/17 11:21:00
>>550
system "
mkdir foo
mkdir bar
"
でも変わらなかった
554:デフォルトの名無しさん
08/12/17 11:31:24
>>553
シェルスクリプトとみなせる環境であるなら全部実行できるはず
動作しないとしたらWindowsかCygwinだな
555:デフォルトの名無しさん
08/12/17 11:33:20
渡した文字列がshに渡るんだから
mkdir foo; mkdir bar だろう。
つーかそんなことしなくても、
mkdir foo bar でいいだろう。
556:デフォルトの名無しさん
08/12/17 11:35:50
>>555
最新5レスしか読めない携帯からのご参加ですか?
557:デフォルトの名無しさん
08/12/17 11:38:56
>>555
mkdir したいって話じゃねーだろ
>>553
Windowsではでっかいひとつのスクリプトとして実行するしかなさそうだな
558:デフォルトの名無しさん
08/12/17 11:39:43
つーか、全部シェルスクリプトで書けば?
system "foo.sh"
したらいいやん
559:540
08/12/17 12:15:12
>>542
初心者にはメソッドチェーンが読みにくいかもしれない、とは思ったけど
読み解くのも勉強になるだろうと思ってそのまま書いた
grep と system(*args) は知らなかったから書き直すよ
target = 'D:/desktop/*'
filter = /\d+test.txt/
command = 'start'
system(*Dir.glob(target).grep(filter).unshift(command))
560:デフォルトの名無しさん
08/12/17 14:15:15
>>559
>system(*Dir.glob(target).grep(filter).unshift(command))
なぜわざわざunshiftを使うのか分からん。>>544の通りに
system command, *Dir.glob(target).grep(filter)
でええやん。
561:デフォルトの名無しさん
08/12/17 14:34:26
すっごい前に、配列からの抽出にpopとshiftを使う子がスレにいたな
キューじゃないものに pop とか使ったらダメよ混乱するから
562:デフォルトの名無しさん
08/12/17 15:00:35
>>530
RubyのselectはSQLのselectじゃなくて
Smallltalkのselectに由来するって知ってるか?
563:デフォルトの名無しさん
08/12/17 15:09:54
>>561
普通に使ってるし、混乱するって話もあまり聞かないぞ
そもそもpopやshiftを使わないとすると、代わりにどんな風に書くんだ?
564:デフォルトの名無しさん
08/12/17 15:14:58
>>562
「外来語」の detect と select で悩むくらいなら find と find_all を使うなあ、俺は
というかなんでそこで SQL が出てくるんだ?
565:デフォルトの名無しさん
08/12/17 15:21:17
当時の様子は知らないし、同じくキューでない配列にも普通にpop/shiftは使うけど
配列から取り除くことが作用ではなく副作用になる場合以外、
「配列から取り除く(ついでに値を得る)」ではなく
「値を得る(ついでに取り除く)」だと思ってるとミスするという話かと。
def get_first(ary)
ary.shift
end
ary = [1,2,3]
put get_first(ary) # aryが破壊される
566:デフォルトの名無しさん
08/12/17 15:35:31
>>563
同意
queue じゃなくても、popもshiftも使うよな
567:デフォルトの名無しさん
08/12/17 15:38:04
キューでもないのにpopが積極的に必要になる場面が思いつかない
イテレータ拒絶派か何かか?
568:デフォルトの名無しさん
08/12/17 15:42:26
>>567
split結果の先端や終端にゴミついてるのが確実なときに切り落とすためとか。
569:デフォルトの名無しさん
08/12/17 15:55:45
>>568
delete_at(0)
配列先頭のデータが欲しいときに
data = arr.delete(0)
と書くのが奇妙なのと同程度には
# 先頭は不要
arr.shift
と書くのは奇妙だと思う
shift に関してはコマンドライン引数を順に扱うときに shift コマンドを使った経験が後を引いてるのかもしれないが、
ここは Ruby だし shift は変
570:デフォルトの名無しさん
08/12/17 15:57:55
そろそろ誰の何の質問の答えているのかはっきりさせようか
571:デフォルトの名無しさん
08/12/17 15:58:58
じゃあどう書けばRuby的なの?
572:デフォルトの名無しさん
08/12/17 16:19:46
配列を破壊しなければうまくいかないかどうかによって違うんじゃね
573:デフォルトの名無しさん
08/12/17 16:19:54
>>570
>質問・要望・雑談などどうぞ。
>>569
奇妙なのはそのコメント文だろうw
代入操作がないことから不要なことは自明。
返値があるものは代入しないといけないなんてルールはないし。
>>565のように先頭や末尾の要素を配列から取り除くのが主の操作で、
popやshiftにそれ以上の意味(=キュー専用)はないと考えてる。
だからdelete_at使えというのは、firstやlastもat(0)やat(-1)にしろと
言っているように聞こえる。
キューでない配列に対してpopやshiftがよろしくないなら
Array#pop #shift #push #unshiftは廃止してQueueクラスを用意するべき。
運用で制限しようとするほうがおかしい。
(threadのものと名前がかぶるけどそれはさておき)
574:デフォルトの名無しさん
08/12/17 19:49:45
難しく考えたことねえな
ところでその考え方だとpopはキューに使っちゃダメだろ
あれはスタックに使うものでは?
575:デフォルトの名無しさん
08/12/17 21:13:20
>>569
切り捨てるより、shiftで切り出された結果を使う方が多い
param = ARGV.shift
line = lines.shift
とか
576:デフォルトの名無しさん
08/12/17 21:39:05
each でブン回すのが Ruby 的ではあるんだろうな
577:デフォルトの名無しさん
08/12/17 21:54:01
>>574
push⇔shift
unshift⇔pop
これでキューが出来上がる。ただし左がエンキュー、右がデキュー
578:デフォルトの名無しさん
08/12/17 21:59:30
素直にQueueクラス作れよ、というのは昔から言われてはいたな
というか、説明もないしキューの概念知らない人もそこそこいるのでは
579:デフォルトの名無しさん
08/12/17 22:02:02
unshiftだけ遅いから注意が必要
580:デフォルトの名無しさん
08/12/17 22:26:23
unshift遅くなくね?
581:デフォルトの名無しさん
08/12/17 22:33:43
>>578
自慢だが知らん
popやshiftは配列から1個取る便利メソッドだと思ってる
582:デフォルトの名無しさん
08/12/17 23:47:16
>>531
丁寧な解説をありがとうございます。
Rubyの「オブジェクト指向」という考え方が何となく判って来た気がします。
つまり、文字列などの何らかのデータをオブジェクトとして扱い、
その内容に変更を加えたデータ(や当該コード)もオブジェクトにでき、
更にそのオブジェクトに変更を加えたデータも・・・・・
という事が限りなくできる、ということなんですね。
つまり「全てがオブジェクト」なんですよね?
そして、そのあらゆる段階でのオブジェクト(データ)に自分で名前を付けることによって、
任意の段階でのデータ(オブジェクト)をコードのどこでも簡単に使い回しできるようにしたものが、
Rubyのオブジェクト指向、だと理解しました。
そして、初心者が常に気を付けるべき点は、
データを処理するためのメソッドが「どのオブジェクトを対象としているのか」という点にある、
というのが>>531でのアドバイスの要点だと思いました。
基本的な理解はこれで合っているでしょうか? (^^;)
583:デフォルトの名無しさん
08/12/17 23:53:26
Rubyは肯定(否定)戻り読みには対応していないんでしょうか?
肯定(否定)先読みには対応しているようですが。
使っているエディターがPerl準拠の正規表現なので
今までは戻り読みが使えて便利だったのです。
584:デフォルトの名無しさん
08/12/18 00:02:13
lookbehind は鬼車が要るはず
585:デフォルトの名無しさん
08/12/18 00:29:31
>>580
a = []; 50000.times { a.push(0) }
と
a = []; 50000.times { a.unshift(0) }
を比べてみな
586:デフォルトの名無しさん
08/12/18 00:33:16
yield
587:デフォルトの名無しさん
08/12/18 00:57:28
>>584
ほほう。こういうものがあるんですね。
次期Rubyに搭載予定だそうで凄そうです。
それで鬼車のホームページには、
>* 5.xはUnicode Property/Scriptを提供
>* 2.xはRuby1.6/1.8組込みライブラリとして動作する。 (2006年末で保守を終了)
と書いてありますが、どちらをインストールしたら良いんでしょうか。
詳しい方がいらっしゃったら御教示願います。
588:デフォルトの名無しさん
08/12/18 08:51:32
>>580 じゃないが、試してみて >>585 の優しさを知った。
50000 は絶妙なとこだな。(celeron 1.3GHz)
589:デフォルトの名無しさん
08/12/18 09:31:25
そんな中古でも売ってないような激遅CPUで話にしゃしゃり出られても困る
590:デフォルトの名無しさん
08/12/18 09:47:36
今の平均的なCPU速度ってどのくらいなのかね
自分でちょっと重い処理するライブラリとか公開したときちょっと気になる
591:デフォルトの名無しさん
08/12/18 09:51:40
>>589
Core2Duoでも相当差が付くぞ
592:デフォルトの名無しさん
08/12/18 09:59:23
>>589
そのご立派なCPUで500000とか試してみなよ。
593:デフォルトの名無しさん
08/12/18 10:05:52
噛み付かれた>>588カワイソス
594:デフォルトの名無しさん
08/12/18 10:09:49
>>590
2GHzくらいじゃね
595:デフォルトの名無しさん
08/12/18 10:17:43
てかPentium4からこっちはよくわからん理由で処理速度が違うから周波数アテにならん
596:デフォルトの名無しさん
08/12/18 11:26:59
公開するライブラリの重さなんて気にしなくてもいいんでは?
使う人次第で負荷なんて桁で変わるんだし。
軽く使えるノウハウでもついでに書いとけば喜ばれると思うけど。
597:デフォルトの名無しさん
08/12/18 12:02:34
RubyのArrayはリストとかじゃなくてまんま配列なので、
pushと違ってunshiftは必ずメモリのコピーが発生するから
ってことかな>速度差
598:デフォルトの名無しさん
08/12/18 12:34:38
IronRubyって終わったんでしょうか?
599:デフォルトの名無しさん
08/12/18 15:12:50
>>587
どちらもインストールしないでrubyの1.9.1をインストールする。
まだリリースされてないけど。
600:デフォルトの名無しさん
08/12/18 15:13:58
>>598
終わったというか、まだ始まってない。
そもそもIronRubyの動作基盤であるDLRがまだリリースされてないし。
601:デフォルトの名無しさん
08/12/18 15:19:49
Ruby で「静的 HTML に変換して出力してくれる入力テンプレシステム」って何がありますか?
* で始めると見出しとか、 - で始めるとリストとか、そういうので適当な日記的 HTML を楽に書きたいです
日記や Wiki みたいな動的機能はいらないです
サーバにアップロードするときに Ruby スクリプトで変換して FTP するとか、そんな感じなんですが
602:デフォルトの名無しさん
08/12/18 15:36:51
RD
は死んでる?
gem でイイのないもんかね
603:デフォルトの名無しさん
08/12/18 15:41:45
Hiki に Wiki 書法用のパーサが付いてたような気が
604:デフォルトの名無しさん
08/12/18 15:42:53
WikiCreoleパーサをさがしてみるといいんじゃないか?
あるかどうか知らんけど。
605:デフォルトの名無しさん
08/12/18 15:48:25
RedCloth とか BlueCloth とか。
日本語がちゃんと扱えるかどうかは知らないけど。
606:デフォルトの名無しさん
08/12/18 16:08:25
つWikiforme
使いやすいとは言えないがかなり面白い。
これとTenjin組み合わせれば・・・とか妄想してる。
607:デフォルトの名無しさん
08/12/18 16:09:43
rake で sh "command" としたときに、command が画面に表示されないんですが、そんなものでしょうか。
どんなコマンドが実行されているか表示されてほしいんですけど。
608:デフォルトの名無しさん
08/12/18 17:18:08
Installing ri documentation
Installing rdoc documentation
これでバカみたいに遅いのはなぜ?
中で何やってこんなに遅いの?
609:デフォルトの名無しさん
08/12/18 17:21:52
ソースコードを解析してドキュメントを作ってるから、だと思う。多分
610:デフォルトの名無しさん
08/12/18 17:29:06
ファイルが細かくて多いと死ヌほど時間かかる印象
611:デフォルトの名無しさん
08/12/18 17:30:06
あれってなんで事前作成してないんだろ。
環境によって出力結果変わったりするもの?
612:デフォルトの名無しさん
08/12/18 17:31:55
>>611
できるものがでかいから。
613:デフォルトの名無しさん
08/12/18 17:35:48
まあつまりファイルサイズをケチってるわけだな
実際のドキュメントを見るとわかるがまあ結構デカい
デフォルトデザインのドキュメントくらい添付してもいいと思うんだが、
まあ、全パッケージの全バージョンを保持してるわけだし、
それぞれに2種類のドキュメントをさらに保持というのは確かに辛いかもしれず
614:デフォルトの名無しさん
08/12/18 17:53:36
回答サンクス。でも所詮は圧縮効率よさげなテキストでしょ。
パッケージはgzipとかしてるだろうし、試しにzipアーカイブに・・・
rubygems-1.3.1/rdoc/ 2,425,167byte -> zipped 820,211byte
把握したw
615:デフォルトの名無しさん
08/12/18 18:16:02
余裕じゃん
616:デフォルトの名無しさん
08/12/18 18:45:30
>>603
HikiDocか。
>>601
Hikiのは古いから、HikiDocでぐぐって(単体で保守されてる)
あとはRakeと連携して細かいところを自分で書けばおっけーじゃね。
617:デフォルトの名無しさん
08/12/18 19:17:03
>>601
Marukuもあるよ
高機能な割に、いまいち安定しないが
618:デフォルトの名無しさん
08/12/18 19:26:32
>>611
>あれってなんで事前作成してないんだろ。
事前に作成できるよう指定できるよ。
ようは各gem作者がそれを指定してないだけ。
619:デフォルトの名無しさん
08/12/18 20:10:37
>>599
鬼車のを今の1.86で組み込んで使うことはできないんでしょうか?
戻り読みの正規表現が使えないと非常に困るのです。
ネットで調べたら「VC++で鬼車をコンパイル云々」と出て来ましたが、
プログラミングはRubyから始めたばかりなので、
別のプログラムが必要とかになるとお手上げなのです。
何とかならないものでしょうか。鬼車の2.x系で構わないので。
620:デフォルトの名無しさん
08/12/18 20:18:19
鬼車を使うか旧来のregexエンジンを使うかはコンパイルオプションで
決まっちゃうので、自分でコンパイルがお手上げなら、鬼車を有効に
してあるバイナリを探すしかない。あるかどうか知らないけど。
駄目ならRubyでやるのを諦めるしかないと思うけど。
621:デフォルトの名無しさん
08/12/18 21:13:29
鬼車gemもあるな。
リテラルの/.../だと組込の正規表現クラスを使ってしまうので、
全部明示的にメソッド呼んで組み立てる必要があるが。
622:デフォルトの名無しさん
08/12/18 21:29:29
gem のライブラリのファイルをどこで誰が読んでるかを調べる方法はある?
gem 'package_name', '=1.0.0'
でバージョンを指定してるはずなんだけど、
/usr/lib/ruby/1.8/rubygems.rb:142:in `activate':
can't activate package_name (>= 1.0.1, runtime),
already activated package_name-1.0.0 (Gem::Exception)
という例外が出て動作しない
1.0.0 を指定してるんだから 1.0.0 だけ読んでくれよ
っていうかバージョン指定でインストールさせるライブラリの作者は安易に require だけすんな氏ね
623:デフォルトの名無しさん
08/12/18 21:32:02
>>620
レスありがとうございます。
戻り読みが使えないのは大変に困るので、
素人でもコンパイルと言うものができるなら挑戦してみようと思います。
ええと、ネットで調べたのですが、
Rubyと鬼車のソースを手に入れて解凍し、
鬼車の解凍フォルダをRubyの解凍フォルダに入れて、
Visual C++ Toolkit 2003 Commandでコマンドを入力してコンパイル
で、基本的な流れは良いんでしょうか。
鬼車を組み込むために特別なことは必要ないのでしょうか?
>>621
できれば他の正規表現と全く変わらないように使いたいので、
鬼車を組み込んだRubyの方がありがたいのです。
624:デフォルトの名無しさん
08/12/18 21:39:26
>>623
なんかすごいことしようとしてるなー
ちなみに、その戻り読みが必要な正規表現ってどんなの?
もしかしたら、戻り読みが必要ないかたちに書き換えられるかもしれないし。
625:デフォルトの名無しさん
08/12/18 22:13:45
>>624
> なんかすごいことしようとしてるなー
そんなに素人には敷居が高いのでしょうか?
確かに戻り読みは全ての正規表現に使うわけではないので、
>>621さんの鬼車gemというのを使った方が良いのでしょうか。
626:デフォルトの名無しさん
08/12/18 22:17:53
たぶん、
Object.const_set('Regexp', ORegexp)とかしてしまえば(警告出る)、
Regexp.newで作った後は同じように使える(と思う)から、
/.../と書けない以外はそれなりに使えるんじゃないだろうか。
627:デフォルトの名無しさん
08/12/18 22:18:01
コンパイルとか一回やっとくと後々役に立つこともあるだろうから
やっといてもいいと思うけど。
Cygwinじゃダメなの?
628:デフォルトの名無しさん
08/12/18 22:58:02
>>607
-v
629:デフォルトの名無しさん
08/12/18 23:06:19
>>623
「鬼車を組み込むために特別なこと」は鬼車のドキュメントに書いてある。
それに従えば大丈夫だと思うよ。
630:デフォルトの名無しさん
08/12/18 23:48:15
「ひらがな ←→ カタカナ」の変換ってどうやるんでしたっけ。
631:デフォルトの名無しさん
08/12/18 23:56:38
>>630
Ruby単体では難しいな
NKFに頼るのが妥当か
632:デフォルトの名無しさん
08/12/19 00:01:56
プログラムのlogを自分宛にメールで送りたいと思ったんだがpop before smtpってよくわからん
○行処理完了,×行目失敗,△行目失敗...ぐらいのちょっとしたものなのに
633:デフォルトの名無しさん
08/12/19 00:05:43
>>632
そのまんまだよ
smtpの前にpopでただアクセスすればいい
履歴はサーバが短時間記憶してくれているから普通にsmtpでアクセスだ
メール関連は詳しく説明するとSPAM送るアホが出るからどこも親切にはしてくれないだろうね
634:デフォルトの名無しさん
08/12/19 00:15:20
>>631
サンクス
635:デフォルトの名無しさん
08/12/19 00:51:58
>>630-631
一方向の変換ならString#trじゃダメ?
636:デフォルトの名無しさん
08/12/19 09:48:35
aという配列の要素に、正規表現でキャプチャした値を入れたいです。
具体的には
a[0]=$1
a[1]=$2
以下同様です。
これを
0.upto(4) do i
a[i]=$(j+1)
end
とかやってもコンパイルエラーがでてしまうのですが、組み込み変数$1,$2・・・に
イテレータを利用してアクセスできる方法はありますか?
637:636
08/12/19 09:49:51
>>636は書き間違いました。
a[i]=$(i+1)
です。
638:636
08/12/19 09:54:02
自己解決しました。
0.upto(4) do i
a[i]=$~[j+1]
end
でいけました。一人で何やっとるんだ俺は。
639:デフォルトの名無しさん
08/12/19 09:56:11
自己解決ハヤスw
640:636
08/12/19 09:59:49
>>638は書き間違いました。a[i]=$~[i+1]です。もう俺は死ね。
641:デフォルトの名無しさん
08/12/19 10:06:44
萌えた
とりあえず a = $~[1..-1]
642:デフォルトの名無しさん
08/12/19 10:07:51
$~.capturesオススメ
643:641
08/12/19 10:10:44
1.8から追加された便利メソッドか。老害の俺も死んでくる
644:デフォルトの名無しさん
08/12/19 11:00:36
もちつけ >638
645:デフォルトの名無しさん
08/12/19 11:53:42
>>631
NKFにそんな機能あったっけ?
ていうか、ひらがな←→カタカナなら
str.tr 'あいう(略)アイウ(略)', 'アイウ(略)あいう(略)'
でどうだろう。「ヴ」をどうするかとか問題はあるけど。
646:デフォルトの名無しさん
08/12/19 12:45:16
>>645
irb> puts NKF.nkf('--hiragana', 'ルビーは超うんこ').toutf8
るびーは超うんこ
nil
irb> puts NKF.nkf('--katakana', 'ルビーは超うんこ').toutf8
ルビーハ超ウンコ
toutf8は表示用
647:デフォルトの名無しさん
08/12/19 12:51:20
きれいなプログラムを書くには 箸キプログラミング基礎
URLリンク(d.hatena.ne.jp)
…4点くらい
648:デフォルトの名無しさん
08/12/19 12:54:27
このスレの住人はRuby嫌いなのか
649:デフォルトの名無しさん
08/12/19 20:18:16
File.open と、単なるopenの違いは何ですか?
650:デフォルトの名無しさん
08/12/19 20:54:14
Ruby1.91はいつ出るのでしょうか? 検索したら、
「Rubyf1.91 2007年12月リリース」とかいうページが出て来るし。
651:デフォルトの名無しさん
08/12/19 20:59:17
>>649
普通にファイル開いて使ってるぶんにはどっちも同じです
File オブジェクトを返します
好きなほう使ってください
File.open 派が若干多いような雰囲気はするけど
652:デフォルトの名無しさん
08/12/19 21:20:28
>>651
同じですか
サンクス
653:デフォルトの名無しさん
08/12/19 21:26:50
>>601です
いろいろフォーマット扱える Webgen に手を出したらもうぜんぜん動きません
reStructuredText とか文法いいなーと思うけどこれ Python なんだよね
教えてもらったものいろいろ試します
せんきゅです
654:デフォルトの名無しさん
08/12/19 21:31:59
>>651の
>普通にファイル開いて使ってるぶんには
普通でない場合を勝手に補足。
組み込み関数のほうのopenはPerlのopenみたいに"|cat"みたいなパイプの繋ぎ方を
半端にサポートする。
あと、open-uriを使う場合も違いが出る。
655:デフォルトの名無しさん
08/12/19 21:39:11
RubyでMatlabの行列ファイルを読みたいんだけどいいライブラリないですか?
656:デフォルトの名無しさん
08/12/19 21:56:41
全部Matlabで完結したほうがよくね?
657:デフォルトの名無しさん
08/12/19 22:06:19
>>656
実は、データファイルを持ってきてシミュレートせよという課題なんですが
Matlabがなく、OctaveはまともにWindowsでは動かないので…
658:デフォルトの名無しさん
08/12/19 22:24:43
そういうのはデータファイルだけもってこいよ
659:デフォルトの名無しさん
08/12/20 02:39:59
Ruby on railsは、まともなスピードで動かす場合、
月5,000円のレンタルサーバーが必要です。
一方、cakephpなら、月500円のレンタルサーバーで
十分なスピードで動きます。
660:デフォルトの名無しさん
08/12/20 08:29:05
>>658
1.配布されてるデータがMatlab形式
2.解析方法がワカンネ
3.これを使ってk-NN法の実験をしなくちゃならない(レポートの提出はあさってAM10:40)
4.私はMatlabを持ってない
\(^o^)/
661:デフォルトの名無しさん
08/12/20 08:42:09
>>660
エディタで開け
バイナリならMatlabスレで聞けば目で読める形式にしてくれるだろ
662:デフォルトの名無しさん
08/12/20 08:53:53
>>661
バイナリですよ
で、どこの板にありますか?
663:デフォルトの名無しさん
08/12/20 09:45:04
見つかりましたがなんか雰囲気が違います
664:デフォルトの名無しさん
08/12/20 10:05:56
Windows版のOctaveを使ってファイルの変換だけやって
テキストファイルにしてしまえ
いくらWindows版Octaveが不安定といっても
ファイル読んで書くくらいならできるだろう
もしくは、仮想マシンにLinuxいれてでもOctaveをつかうとか
665:デフォルトの名無しさん
08/12/20 10:44:07
>>664
とりあえず書き出し中。ただ、ディスクが逼迫しているのできちんと書き出せるか
かなり不安だが。
666:デフォルトの名無しさん
08/12/20 10:52:43
とりあえず書き出せた。テキスト形式の解析も完了。
さあRubyでがしがし処理するか
667:デフォルトの名無しさん
08/12/20 19:08:36
「10日でおぼえるRuby on Rails」と「はじめてのRuby」を読んだばかりの
Ruby歴2週間のおれに教えてくれ。
Rails2.2を入れたいのだが、Ruby1.9.0Xでいいの?1.9.1の未完成版は止めた方がいい?
仕事じゃないから人柱でもなんでもいいけど、
慣れない環境であまりにも動かないと何が何だか分からなくなってつらい。
最新版命主義だから1.8.6Xはよほどひどくないと考えていないっす。
668:デフォルトの名無しさん
08/12/20 19:12:33
Rubyの最新版は1.8.7だよ
1.8.6は古いから、しがらみも資産もない新規さんなら1.8.7でウキウキ新機能をエンジョイしろ
Railsも完全に動作するし
669:デフォルトの名無しさん
08/12/20 19:22:18
>>668
レスサンクス
1.8.7ってあいのこみたいなイメージがあるのだが。
1.9系みたいにマルチバイト文字列を簡単に扱いたいんだけどできる?
670:デフォルトの名無しさん
08/12/20 19:51:18
結局速いのがいいから1.9.1系にしちゃった。不具合上等。サンキューな。
671:デフォルトの名無しさん
08/12/20 19:54:11
さて果たして670がどうなるのか
ちょっとワクワクしてきた
672:632
08/12/20 20:05:21
>>633
gmail使うことにしました
我ながらなんという遅レスか
673:デフォルトの名無しさん
08/12/20 20:44:50
>>660
Matlab持ってる研究室尋ね歩いて使わせてもらえ
674:デフォルトの名無しさん
08/12/20 21:33:35
1.91はまだか。
675:670
08/12/20 22:26:30
Vista64を使ってるから、1.9.1最新(64bit)入れたけどgemが動かず。
1.9.0最新(64bit)入れたけど動かず。1.9.1最新(32bit)入れてようやくRailsのインストールまで終わった。
落としたバイナリのzlibがだめなのかなと思ったが、疲れたから完璧ということにした。
676:デフォルトの名無しさん
08/12/20 22:40:31
Vista 64ビット版で1.9.1に挑戦するとは……なんという茨の道
でもそんな根性のあるユーザーは嫌いじゃないぜ
677:デフォルトの名無しさん
08/12/20 22:48:29
>>676
嫌いになる可能性しかないような気がするんだが
問題切り分けできない状態でなにが勉強か
678:デフォルトの名無しさん
08/12/20 23:46:21
32bitや64bitという言葉が出てくるんだから、まるっきりコンピュータの素人というわけでもなかろう。
たぶん誰も助けてやることはできないだろうけど、がんばれ。
679:デフォルトの名無しさん
08/12/21 09:12:31
>>673
とりあえずなんとかOctaveでテキスト形式に変換完了。
今延々回してるがかなり長くなりそうorz
680:デフォルトの名無しさん
08/12/21 09:35:39
そもそもRubyは学術計算には向かない
681:デフォルトの名無しさん
08/12/21 12:18:43
>>680
何をするかに依るが、簡単な数値計算には俺は使うよ。
一行で書いて答ポンと出す感じのコード。向いてると思う。
ちょっと入り組んでる計算(シミュレーション、微分方程式、FFT etc)
だと C++ で書くけど。
682:デフォルトの名無しさん
08/12/21 12:34:26
計算が多少複雑でも、コード書くことだけ考えればRubyで十分扱えると思う
むしろ問題なのは処理速度
683:デフォルトの名無しさん
08/12/21 12:35:45
行列演算の結果狂ってるとかいうのなかったっけ
684:デフォルトの名無しさん
08/12/21 14:07:22
学術計算にいまどきプログラミング言語か
入り組んでいる計算なら
mathematicaとかmatlabのほうが向いてると思うね
簡単な計算ならlinuxについているbcが向いてる
685:デフォルトの名無しさん
08/12/21 14:09:34
mathematicaも立派な関数型言語搭載のプログラミング環境ですから
686:デフォルトの名無しさん
08/12/21 14:10:34
はいはい、「汎用の」が抜けてた抜けてた
687:デフォルトの名無しさん
08/12/21 14:29:33
巨大な計算をする時はやっぱmathematicaやmatlabは遅い。
とは言え、代替物としてRubyを使うのもどうかとは思うが。
688:デフォルトの名無しさん
08/12/21 17:00:04
nokogiriのgemインストールが失敗します。
riの生成に失敗しているようなのですが、これはどのように対処したもんでしょうか?
> gem install nokogiri
Successfully installed nokogiri-1.0.7-x86-mswin32-60
1 gem installed
Installing ri documentation for nokogiri-1.0.7-x86-mswin32-60...
ERROR: While executing gem ... (NoMethodError)
undefined method `new' for nil:NilClass
> ruby -v
uby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
689:デフォルトの名無しさん
08/12/21 17:31:48
>>681
計算時間の見積もりが4日とかorz
256次元のベクトルの距離を頻繁に求めるので手間かかりすぎ。
ある1本と別の4000本との距離を求めるだけで45秒。
使ってるクラスはmatrixに入ってるVectorクラス。
690:デフォルトの名無しさん
08/12/21 19:55:22
>>688
$ gem install --no-ri nokogiri
とりあえず。ちなみに gem help install で調べられる。
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]
gem 1.3.1
では問題は起きなかったっす。
691:デフォルトの名無しさん
08/12/21 21:08:15
>>690
rdocもなんか失敗したので、これでいけました。
gem install --no-ri --no-rdoc nokogiri
ありがとう。
692:デフォルトの名無しさん
08/12/21 21:10:09
ちょいと質問なのですが、
HTMLファイルの一部を書き換えたいのですが、
nokogiriとか使うとパースや部分的なノード置換がすごく楽なのですが、
出力すると(to_html)元のHTMLがかなり崩れてしまいます。
元のHTMLをなるべく維持したい場合はどうしたらよいものでしょうか?
693:デフォルトの名無しさん
08/12/21 21:13:02
見掛けが崩れるだけで、htmlとしては大部分が同じはずだが
HTML上の改行位置や空白数なんかも維持したい場合は正規表現で置換するしかないな
694:デフォルトの名無しさん
08/12/21 21:19:33
フラットな処理で何とかなるならHTMLSplitとか
695:デフォルトの名無しさん
08/12/21 21:35:38
rubygemsのsyntaxってあんじゃん
なんていうか、マトモなCSSってどこかにない? vimやEmacsのハイライト意識したやつとか
RubyとHTMLのだけあればいいんだけど
あのRubyのとか酷過ぎるだろ常識的に考えて
696:デフォルトの名無しさん
08/12/21 21:42:02
>>693-694
レスありがとう。
なるたけ維持したかったので、頑張って正規表現でgsubしてみました。
そんなに複雑じゃなかったのでなんとかなったみたいです。
お騒がせしました
697:デフォルトの名無しさん
08/12/21 22:03:17
for i in 1..50
hoge
end
の 50 を a を Array として
for i in 1..(a.size)
としたらだめのようでした。
aのサイズだけ for を走らせたい場合、Ruby はどうするのがよいでしょうか?
698:デフォルトの名無しさん
08/12/21 22:07:31
普通はこうする。
a.size.times { |i| p a[i] }
699:デフォルトの名無しさん
08/12/21 22:09:38
>>697
a.each do |e|
p e
end
Ruby では for はまず使わない
700:デフォルトの名無しさん
08/12/21 22:10:35
>>697
よのどのことがないかぎり、Rubyでは単純ループにforは使わないと慣習があるぞ
>>698 でよいかと思う
701:デフォルトの名無しさん
08/12/21 22:10:50
インデックスが欲しければこう
a.each_with_index { |e, i|
}
702:デフォルトの名無しさん
08/12/21 22:11:32
ごめん、>>699だ
703:デフォルトの名無しさん
08/12/21 22:13:40
a のサイズ分ループしたいけど、
a の要素を使わない時は >>698 だっしょ。
a の要素を単に順番に使いたいだけの場合は >>699 で、
a の要素とそのインデックスを両方使いたい場合は >>701 だ。
704:デフォルトの名無しさん
08/12/21 22:17:21
>>698-701
みなさま本当にありがとうです。
for をそもそも使わないのか・・・そもそも入門からおかしかったようです。
705:デフォルトの名無しさん
08/12/21 22:19:16
もちろん普通はfor使わないのは分かるんだがなんで>>697が動作しないんだ?
範囲式に制限でもあるのか?
706:デフォルトの名無しさん
08/12/21 22:21:00
0 オリジンじゃないから
配列にアクセスする部分で死んでるとか
707:デフォルトの名無しさん
08/12/21 22:23:11
そうだな
50番目の a[i] で nil の NoMethodError でも出てるのだろう
708:705
08/12/21 22:33:17
なるほど。自分も初心者だが確かにやりそうだ。
まあこういうのを防ぐ為にもforは使わないってことだな。
709:デフォルトの名無しさん
08/12/21 23:14:47
Rubyを書き慣れてくると、forの書き方はちょっと考えないと
思い出せないようになってくる。
710:デフォルトの名無しさん
08/12/21 23:17:48
freezeしたHashの要素を変更するシンプルな方法はありますか?
freezeの意味ないやんってなるけど仕様変更で一か所だけ要素を変更する必要があります
freezeしているクラスと同じクラス内なので影響が他のクラスに及ぶことはありません
711:デフォルトの名無しさん
08/12/21 23:52:38
>>695
「酷すぎる」って言ってるのが
syntax-*/data/ruby.css とかのことだったら、あれ以上のもので公開されてるのは多分ない。
712:デフォルトの名無しさん
08/12/22 00:08:51
>>680-687
遅レスだが(というかなぜか今日は流れ速い)、俺がよく ruby 使うのは
簡単な計算でパラメータ変えて繰り返して使う式ですぐ答が欲しいときかな。
わざわざ Mathematica とか Maple, Maxima 立ち上げる気がしない程度のもの。
あと、これらでもプログラム書けるけど個人的には ruby の coding の方が好き。
3次方程式の解レベルの複雑さ。Ruby で端末でパラメータ入力して結果
すぐ帰ってくる。bc, とかではできない。多少複雑なら C++ で書いてる。
ruby は遅いし、書き捨て的に使ってるし、mma, maple, maxima とかでも
遅すぎることも多い。
713:デフォルトの名無しさん
08/12/22 00:45:33
>>710
h = {:ary => [1]}.freeze # => {:ary=>[1]}
h[:ary][0] = 2
p h # =>{:ary=>[2]}
Hashオブジェクトをfreezeしてもその中にあるオブジェクトまでは
freezeされてないから、それを直接書き換えるとか。
これ、本来はfreezeの落とし穴だから気をつけて。
714:デフォルトの名無しさん
08/12/22 01:38:05
要素を変更したいんですー
h = {:ary => 1}.freeze
h[:ary] = 2
715:デフォルトの名無しさん
08/12/22 01:46:09
Are you happy?
716:デフォルトの名無しさん
08/12/22 02:00:18
じゃあdupしてfreezeされてないコピーに差し替えれば?
と言いたいけど別のところに参照されちゃってるんだろうなぁ。
そもそもfreezeしてるコードをいじれるならfreezeやめれば
いいじゃんと思うんだけど、freezeしないといけない理由を詳しく。
717:デフォルトの名無しさん
08/12/22 03:08:37
文字通り邪悪だけど、
evil-ruby gemをインストールして h.unfreeze
718:デフォルトの名無しさん
08/12/22 06:52:25
>>710
出来ないことはないけど、不可能と考えて別の方法を探すべきだと思われる
そもそも、freezeされてるってことはそれなりの理由があるんじゃないのか?
719:デフォルトの名無しさん
08/12/22 10:55:22
>>710
びみょーに違うけど、こんなん(不完全だけど)をextendして
freezeを遅延させるとか…? やっぱ変だな
# 一箇所だけ変えたいところのキーは'hoge'決めうち
module HashLasyFreeze
def []=(key, val)
ret = super
freeze if key == 'hoge'
ret
end
end
720:デフォルトの名無しさん
08/12/22 15:28:52
いくつかのサイトの更新状況を取得するプログラム組んでいるのですが、
File::statしてatimeしたいのですが、サイトで公開されているページの最終更新時間など取得する場合どのようにすればいいのでしょうか。
721:デフォルトの名無しさん
08/12/22 15:33:54
>>720
require 'net/http'
Net::HTTP.version_1_2
Net::HTTP.start('www.example.com', 80) {|http|
response = http.get('/index.html')
puts response['last-modified']
}
こんな感じ。
722:デフォルトの名無しさん
08/12/22 20:27:20
WindowsXP SP3、OneClickInstaller
デスクトップ(や他のアプリケーション上)に文字列を表示させるソフトを作りたいのですが、
それが可能なGUIツールキットってあるのでしょうか?
ググってみたところ、ウィンドウの半透明化ができれば可能そうだと思ったのですが、
それが可能なツールキットを探すことができませんでした。
ご存知の方いらっしゃれば教えてください。
723:デフォルトの名無しさん
08/12/22 20:37:03
いわゆる付箋ソフトだな
Rubyでやるこっちゃないねえ
他のC#とかで作れるようになってからその知識を流用してRuby+GUIでやれ
95パーセントくらいRuby無関係だし
724:デフォルトの名無しさん
08/12/22 20:40:41
Win32OLE.rb
725:デフォルトの名無しさん
08/12/22 20:51:05
def getWindowLong(hwnd, index)
api = Win32API.new('user32', 'GetWindowLong', 'LL', 'L')
return api.call(hwnd, index)
end
def setWindowLong(hwnd, index, gwl)
api = Win32API.new('user32', 'SetWindowLong', 'LLL', 'L')
return api.call(hwnd, index, gwl)
end
def setLayeredWindowAttributes(hwnd, crkey, alpha, flags)
api = Win32API.new('user32', 'SetLayeredWindowAttributes', 'LLLL', 'L')
return api.call(hwnd, crkey, alpha, flags)
end
gwl = getWindowLong(hwnd, GWL_EXSTYLE)
gwl &= ~WS_EX_LAYERED
gwl |= ((ratio != 100) ? WS_EX_LAYERED : 0)
gwl &= ~WS_EX_TRANSPARENT
gwl |= (transparent ? WS_EX_TRANSPARENT : 0)
setWindowLong(hwnd, GWL_EXSTYLE, gwl)
setLayeredWindowAttributes(hwnd, (ckey ? color : 0),
((255 * ratio) / 100), (LWA_ALPHA | (ckey ? LWA_COLORKEY : 0))
)
726:デフォルトの名無しさん
08/12/22 20:55:22
GWL_EXSTYLE = 0xFFFFFFEC
WS_EX_LAYERED = 0x00080000
WS_EX_TRANSPARENT = 0x00000020
LWA_COLORKEY = 0x00000001
LWA_ALPHA = 0x00000002
727:デフォルトの名無しさん
08/12/22 20:56:50
>>723
うむ、95パーセントくらいRuby無関係だな
728:722
08/12/22 21:11:41
>>724-726
レスありがとうございます。試してみます!
>>723,727
既存のrubyプログラムの処理結果をデスクトップに書きたかったんです。
rubyでどう頑張ってもダメならC#覚えるつもりでした。助言ありがとうございます。
729:デフォルトの名無しさん
08/12/22 21:33:18
rubyで幾つかのオブジェクトを生成・初期化したかったので、
a=b=c=d=Array.new
とかやったら、全部が同じオブジェクトを指してしまうという大惨事に見舞われました。
Cとかなら int a=b=c=d=0;
とか書いて複数の変数の生成・初期化が問題なく行われるんですが、rubyでこれをやると
同じオブジェクトが参照されてしまうのってどうなんですか?
730:デフォルトの名無しさん
08/12/22 21:37:50
>>729
だってそれは初期化でもなんでもなく、単に同じオブジェクトを指すように指示してるだけだもの
そのオブジェクト内容が変化すれば全部が変化するというそんだけの話
オブジェクトという考え方をRubyでは無視せんでくれ
a = Array.new
b = Array.new
c = Array.new
d = Array.new
こうだな
Arrayオブジェクトを生成する使い方をしてるならArray.newではなくnilでもいいかも
731:デフォルトの名無しさん
08/12/22 21:38:46
Cでポインタ使ったことある?
732:デフォルトの名無しさん
08/12/22 21:46:33
>>729
Array.newが一度しか実行されなければ、Arrayのオブジェクトは一つしか生成されない
って見方もできるかと
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4283日前に更新/244 KB
担当:undef