- 1 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 04:30:21 ]
- プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
【Ruby1.9 は不安定な開発版であり初心者には全く向きません】 【最新安定版の Ruby1.8.7 の使用をお勧めします】 ※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。 1.9 の新機能の一部が利用可能なので初学者にお勧めです。 ※ただし十分安定しているとは言えないので プロダクション環境での利用にはお勧めしません。 関連スレやURLは>>2-8あたりを見てください。Ruby on Railsの質問はRailsスレへ。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
- 474 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:28:21 ]
- >>471みたいなのは、現状、意識的に経験積むしかないんだよね
うまい本とかあればいいんだけど、あんまり聞かないな
- 475 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:33:15 ]
- >>471
そんな感じです。お手数をかけてすみません。 それを参考にして一つ一つ覚えて行きたいと思います。 何度か他の言語を覚えようとして挫折したのですが、 Rubyは簡単に結果を出力できて感動したので、 この言語を勉強することにしました。 (プログラムは素人ですが、 Rubyのコードがシンプルで美しいと思ったのも動機の一つです) 一応「たのしいRuby」と「Rubyレシピブック」は購入しましたので、 今は「15.2 基本的な入出力操作」を試しています。 プログラムとかはやったことはないのですが、頑張って覚えるつもりです。
- 476 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:37:33 ]
- すると
File.open(path, 'r'){|f| puts f.read} ができた頃かね f.read が文字列を返してることがわかったら、ファイルひとつを置換するのはもうすぐだな
- 477 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:18:03 ]
- ワンライナーだと
ruby -pe "printf '%4d ',$." ファイル名 でファイルに4桁の行番号をつけて標準出力に表示 ファイルを書き換えたければ -i.bak などと-i オプションにバックアップの拡張子をつけて実行 ruby -i.bak -pe "printf '%4d ',$." ファイル名 標準入力から読み込んだ場合の行番号は$.に入ってる、行番号の形式を変えたければprintfを勉強する 複数のファイルを指定しても大丈夫 Windowsだと -i の拡張子無しでの直接書き換えが出来ないのがちょっとやだな UNIXだと ファイル開いておいて、開いたファイルを削除して、書き込み用で同名のファイルを作成するのかな? PerlでもWindowsだと出来ないので、同じような動作してるんでしょうね というか、Perlの動作を再現してるんでしょうけど
- 478 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:25:44 ]
- path = 'test.txt' #適当に作っといてね
outfile = 'testwrite.txt' #問答無用で上書きされるぞ と、すると pathファイルを開いて、全体を一気に読み込んだものを表示する open(path, 'r'){|f| puts f.read} pathファイルを開いて、一行読み込んで表示するのを最後まで繰り返す open(path, 'r'){|f| f.each{|line| puts line}} pathファイルを開いて、一行読み込んで、行番号表示して、行の内容を表示するのを最後まで繰り返す open(path, 'r'){|f| f.each_with_index{|line,ind| printf '%3d ',ind+1;puts line}} pathファイルを開いて、書き込み用のoutfileファイルも開いて、一行読み込んで、ファイルに行番号書き込んでから行の内容も書き込むのを最後まで繰り返す open(path, 'r'){|f| open(outfile,'w'){|out| f.each_with_index{|line,ind| out.printf '%3d ',ind+1;out.puts line}}}
- 479 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:30:00 ]
- cat -n
- 480 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:32:30 ]
- >>479
そんなこと言ったら行番号付加ツールインストールすれば一発だぞ
- 481 名前:デフォルトの名無しさん [2008/12/13(土) 23:42:38 ]
- $.
- 482 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 01:44:40 ]
- >>476
お恥ずかしながら io.readlines のことかと思って悪戦苦闘していました。 例文通りに打ち込んでも上手く行かないので、何かプログラムの根本的な ところが判ってないのだと思って再び悩んでいました。 >>477 >>478 ありがとうございます。おかげさまで希望通りの動作が実現しました。 教えて君のような私にここまでして頂いて何と感謝すれば良いのか判りません。 私に何ができるわけでもありませんが、似たようなことがあったら、 私もこのスレの皆さんのような態度で困った人に接したいと思います。 このスレの皆様に心から感謝します。本当にありがとうございました。
- 483 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 03:03:55 ]
- 馬鹿なの?
死ぬの?
- 484 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 05:12:40 ]
- >>482
たかが2chでそこまでバカ丁寧になる必要はない 教えてやりたい人間が教えたいように教えただけ >>483 バカ丁寧だから、バカなんじゃない?
- 485 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 05:13:18 ]
- ああ忘れてた、>>477-478, 乙であります
- 486 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 05:40:39 ]
- >>484
たかが2chで「必要がない」ことをそんな大きく見てもしょうがない。 他の多くのレスの不必要な表現と同じように、>>482も書きたいように書いただけ。
- 487 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 12:37:57 ]
- >>455
ないみたいね そもそもPlaggerのスレさえも立ってない (理由は不明だけど、俺は人気がないんだと思っている) 話したいなら、ここや本スレでも良いと思うよ
- 488 名前:デフォルトの名無しさん [2008/12/14(日) 12:47:00 ]
- ruby-ldapのインストール方法について質問です。
OSはcentos5.2を使用して ruby本体は、 ruby-1.8.6-p287をcheckinstallにてRPM化しインストールしています。 ruby-ldap-0.9.7-1.i386.rpmを入手して、インストールを試みたところ下記のような エラーメッセージが出力されて、二日ほど止まりっぱなしです。 どなたかアドバイスをお願いします。 # rpm -ivh ./ruby-ldap-0.9.7-1.i386.rpm 警告: ./ruby-ldap-0.9.7-1.i386.rpm: ヘッダ V3 DSA signature: NOKEY, key ID bfbaf0e8 エラー: 依存性の欠如: libcrypto.so.5 は ruby-ldap-0.9.7-1.i386 に必要とされています libruby.so.1.8 は ruby-ldap-0.9.7-1.i386 に必要とされています libssl.so.5 は ruby-ldap-0.9.7-1.i386 に必要とされています #
- 489 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 13:03:15 ]
- >>488
ruby-dev のようなもの、libopenssl-ruby のようなもの、openssl のようなもの、のインストールが足りない Ruby関係ないな
- 490 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 13:13:04 ]
- rpm コマンドの使い方の話だね
必要なファイルを含むパッケージを表示する方法があるはずだから、それでインストールするパッケージを調べるといい
- 491 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 13:49:11 ]
- >>489-490
ruby-devとlibopenssl-rubyについては入っていません。。 ruby-dev`については、自ら作成したrubyのRPMファイルを入れるときに アンインストールしちゃいました。 含んでいそうなファイルを探してみます。 ありがとうございました。
- 492 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 13:53:01 ]
- devは作るときのだから、バイナリを入れるだけならなくても大丈夫だと思う。
- 493 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 14:51:23 ]
- 結局、
# rpm -qa | grep ruby ruby-irb-1.8.6.287-1.el5.kb.1 ruby-libs-1.8.6.287-1.el5.kb.1 ruby-1.8.6.287-1.el5.kb.1 ruby-devel-1.8.6.287-1.el5.kb.1 こんな感じに拾ってきたrpmを入れてから、 #rpmbuild -ta ruby-ldap-0.9.7.tar.gz を実行して、自分でrpmファイルを作ったら、インストールできました。 この状態だとgemが入れられなかったので、rubyのrpmファイルを自前で作成して インストール後、上記の状態にしたのでgemがどっかで不具合を起こさないか不安ですけど。 ちなみに、gemがインストールできないのはrdocがロードできないとか怒られた。 rdocのrpmファイルってどこかに落ちてるんでしょうか?
- 494 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 14:56:39 ]
- ディストリビューションオフィシャルリポジトリの存在を無視するな
- 495 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 20:54:03 ]
- 関連付けでファイルを開きたいのですが、
どうすればいいでしょうか。 path ="test.txt" system("start path") これだとコマンドプロンプトが立ち上がるだけで 関連付けでファイルを開いてくれません。
- 496 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 21:01:50 ]
- コマンドラインから「start path」という9文字を入力してEnterしてみ
それと同じことが起きてるだけ
- 497 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 21:03:03 ]
- system("start #{path}")
- 498 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 21:43:35 ]
- >>497
出来ました! ありがとうございます。 m(_ _)m
- 499 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:13:54 ]
- あと10日で1.9正式リリースなわけだが大丈夫なの?
1.9向けにライブラリ作っていい?
- 500 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:26:51 ]
- 対
応 で き る も ん が 作 れ るなら作ってみな という感じだ 特にEncode関連
- 501 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:29:24 ]
- 文法エラーが出なくなる程度の対応は進めてもらえると
いちユーザーとしてもいきなり挫折しなくて済んでいいかも ruby1.9 ./hoge.rb しただけで普段見たことも無いファイルのやたら多い行数のとこでSyntaxErroroとか挫けるし
- 502 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:30:51 ]
- >>499
1月に延期されたとかなんとか
- 503 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:32:38 ]
- 1.9に自作ライブラリを対応させるためのHOWTOとかそういう文書ってある?
1.9.0 features を読んで逐一チェックするしかない?
- 504 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:51:10 ]
- >>499
12月25日に予定されてるのは、1.9.1のRC(リリース候補)で正式版じゃない といっても、現時点でもう1.9.1の仕様は固まってるはずなので、今から作り始めても良いと思うが
- 505 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:51:59 ]
- >>503
たぶんrubikitichがホッテントリ狙って書くよ。
- 506 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:58:22 ]
- ぬう
- 507 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 23:10:00 ]
- 下の文字列がなぜ文字化けするのですが、何が原因でしょうか。
$KCODE="s" tut = "12月28日 夢見師(プリンセスソフト、7,140円) " p tut
- 508 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 23:13:46 ]
- s?
- 509 名前:デフォルトの名無しさん [2008/12/14(日) 23:14:57 ]
- すいません、
#!/usr/local/bin/ruby -Ks の1行入れてなかったことによるものでした。お騒がせしてすいません。 >>508 sjisのことです。
- 510 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 23:49:31 ]
- やっぱり詰まった...。
以下a1の文字列の内()とその中身を消したいのですが、 なぜか ) だけ残して全て消えてしまいます。 #!/usr/local/bin/ruby -Ks $KCODE="s" a1="最強 東大将棋6(毎日コミュニケーションズ、2,940円) " a1 = a1.gsub(/.*?月.*?日 /,"") a1 = a1.gsub(/(.*?円)/,"") p a1
- 511 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 23:53:36 ]
- 正規表現中のカッコは特別な意味を持つメタ文字だよ
正規表現中でカッコそのものを表すなら \( や \) のようにエスケープしなきゃだめ
- 512 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 01:03:05 ]
- >>511
え゛っ、そうなんですか!! /に\/しなきゃならないのは知っていたですが、()もでしたか。 他でもポカしてそうだな。 ご解答ありがとうございます。
- 513 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 01:04:30 ]
- >512
英数はそのまま書くとその文字、\を付けると特別な意味になることが多い。 逆に記号はそのまま書くと特別な意味があることが多く、\を付けるとその文字ってことが多い。
- 514 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 01:41:29 ]
- てかマニュアルに全部書いてあるんだからきちんと読め
記号の意味そのものは必要なときに調べればいいから覚えなくてよし エスケープが必要な文字かどうかだけを記憶すればおk
- 515 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 09:11:03 ]
- ピリオドも意味もってるんだけど
間違ってエスケープせずにピリオド使ってても そのまま動いてしまって気付かないことが多い あとで忘れた頃に問題が表面化するから初心者は注意な
- 516 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 09:54:50 ]
- image_paths = filepaths.find_all{|e| /.jpg\Z/ =~ e}
で99.99%くらいは普通に動作するんだよな
- 517 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 10:02:26 ]
- 正規表現の粒度をどれくらいにするかというのは永遠の問題
わかってない人が「メールアドレスにヒットする正規表現を書け」とか課題出したりするんだが
- 518 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 10:27:14 ]
- "(a)"
から /\s*\(a\)\s*/ を生成するのってどうやるんですか? a = "(a)" /\s*#{a.escape}\s*/ みたいに書ければいいんだけど
- 519 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 10:41:09 ]
- >>518
マニュアル読んどけ Rubyの正規表現はただのオブジェクトだからRegexpクラスのメソッドで生成できる /〜/ で書くのはただのわかりやすいエイリアスに過ぎない あと、半角スペースと \s には直接の関係はないから、あらかじめ \s で書いておくしかないよ 個人的には半角スペースを \s で表現するようにするのは後々罠に落ちるから全くお勧めしない 半角スペースがあるのなら、どんなに正規表現の見かけがマヌケになっても半角スペースで書くべき
- 520 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 11:10:37 ]
- >>518
/\s*#{Regexp.escape(a)}\s*/ Regexp.quoteという別名も。
- 521 名前:455 mailto:sage [2008/12/15(月) 21:43:26 ]
- >>487
あんちゃん、ありがとう。 せつこ、このスレで日本一のpragger目指すんよ。
- 522 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 21:57:53 ]
- 技術的には便利だけど、他のことで代替できるよね、という微妙な立ち位置がどうにも…
プラガブルであることのメリットがイマイチ生かされてないんだな
- 523 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 05:42:09 ]
- www.google.co.jp/trends?q=PHP%2Cruby&ctab=0&geo=US&geor=all&date=all&sort=0
逆転しそう
- 524 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 05:46:15 ]
- www.tiobe.com/index.php/content/paperinfo/tpci/index.html
逆転もなにも、世界的には10位以下に後退したダメダメ言語だけどね (ただ、Pythonが下がってたりLogoが爆上げしてるところから見ても かなり変な順位づけであることは間違いない)
- 525 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 19:07:50 ]
- D:/desktop にある、
001test.txt 002test.txt 003test.txt という複数のファイルを、 数字の部分に正規表現を使ったパスで一度に開きたいのですが、 どうすれば良いでしょうか? 次のように書いているのですが上手く行きません。 files = /D:/desktop/[0-9]+test.txt/ system("start #{files}")
- 526 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 19:21:31 ]
- リファレンスマニュアルの正規表現のとこ読め
あと %r の使い方も調べとけ
- 527 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 19:24:19 ]
- よく見たら正規表現関係無いじゃないか
Dir.glob
- 528 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:05:12 ]
- >>527
御返事ありがとうございます。 それで調べたら Dir.glob は正規表現ではなくワイルドカード対応と書いてあるのですが、 これは正規表現には対応していないということではないでしょうか。 >>525の書き込みはあくまで勉強中の実験のものなので、 実際に使う時にはパスを正規表現で指定したいのです。 また、>>525では省略しましたが、 開きたいファイルは似たような名前が多いので、最終的には、 name = ●● files = %r("D:/desktop/[-9]+●●.txt") system("start #{files}") というような形にして、●●の部分を書き換えるだけで 任意のの複数のファイルを開けるようにしたいのです。
- 529 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:28:50 ]
- >>528
そういうのだと全ファイル名から正規表現でselectせざるをえないかな。
- 530 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:50:09 ]
- Rubyではselectはあまり使わない
find_all と呼ぶ
- 531 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:59:18 ]
- >>528
まったく同じことを繰り返すことになるが、Rubyのオブジェクトについての考え方学んでくれ 返り値がただの文字列なら、それはただの文字列(String クラスのオブジェクト)で、何か特別なものがあるわけじゃない Stringクラスのメソッドが完全に全て動作するし、文字列オブジェクトを引数にとるメソッドは全て完全に動作する メソッドの返り値がどのクラスのオブジェクトなのかということは絶対に意識しないと駄目よ 正規表現を使いたいなら、引数…、まあ、引数の見かけしてないことが多いけど、マッチ試行対象は文字列だ いちばん単純な状態で必要なのは、ディレクトリ中のファイルを文字列で返すメソッド その文字列の一群の中から、正規表現にマッチする文字列を探して、その文字列をどうにかすればいい
- 532 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:59:19 ]
- >>530
ソースは?
- 533 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 22:43:20 ]
- target = 'D:/desktop/*'
filter = /\d+test.txt/ system(Dir.glob(target).select{|i| i =~ filter}.unshift('start').join(' '))
- 534 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 00:24:48 ]
- >>533
なあ、初心者スレなんだから、もっと分かりやすく書こうぜ filenames = Dir.glob('D:/desktop/*') filenames = filenames.grep(/^¥d+test¥.txt$/) system "start #{filenames.join(' ')}"
- 535 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 00:34:21 ]
- >>534
改行が存在しない文字列に対して ^ と $ は不適 代わりに \A と \Z を使おう
- 536 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 00:43:57 ]
- どなたかアドバイスください。ruby1.8.7です。
require 'tk' がうまく いきません。以下のようなメッセージが表示されます。 in `require' : no such file to load --tk (LoadError) どうすればいいでしょうか?
- 537 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 00:46:52 ]
- >>536
Tcl/Tkが入ってないんじゃね?
- 538 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 00:48:23 ]
- >>536
tkライブラリを見つけられなかった。 tkがインストールされない環境(ってなんだろ?)か $LOAD_PATHがおかしいんじゃない?
- 539 名前:536 mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 01:13:10 ]
- >>534
質問者の求める「正規表現の使えるglob」が提供されて無いから別解を提示しただけ 分かりにくいってのはわざとそうしてるんだから許してよ >>539 それ違う OS何?tcl/tk入ってる?wishコマンド使える?
- 541 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 08:10:32 ]
- >>535
>改行が存在しない文字列に対して ^ と $ は不適 逆だろ。改行が存在しない文字列だからこそ ^ や $ を使っても構わない。
- 542 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 08:13:15 ]
- >>540
>分かりにくいってのはわざとそうしてるんだから許してよ なんでそんなことをするの 分かりやすく書けないのをごまかしてるだけじゃねーのかよ
- 543 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 08:22:36 ]
- >>541
あまりRubyの正規表現に詳しくない人間が見たら 「ああ^と$は文字列先頭と末尾なんだな。Perlと同じなんだな」とか 勘違いしちゃうよ
- 544 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 08:44:02 ]
- >>534
>system "start #{filenames.join(' ')}" system 'start', *filenames でよくね?
- 545 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:21:20 ]
- >>544
そんなこと言ったら2行目はメソッドチェーンで消えるし、 対象ディレクトリが専用ディレクトリならそもそも Dir.glob のワイルドカードつき文字列でも充分だ 君が *引数 をオボエタテだからだからといってわざわざ難しくする必要はない
- 546 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:28:48 ]
- >>541
目に見えない文字や場所にマッチする正規表現は慎重に使ったほうがええぞ 半角空白にマッチさせるために \s を使ったりしないだろ それと同じこと
- 547 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:30:19 ]
- >>545
544じゃないけど、一般にsystemの引数は ' ' でjoinするより * で渡すほうが空白を含むファイル名等の問題をより安全に回避できるので、* のほうがお勧めだけどね
- 548 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:37:16 ]
- *の引数展開はマニュアルでも辺鄙なとこにしか書いてないからな
使うなら堂々と初心者向け解説の3ページ目から使いまくるくらいの感じにして欲しいとは思う
- 549 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:45:05 ]
- `
mkdir foo mkdir bar ` みたいに途中でシェルスクリプトだらだら書けるようなやり方ってない? 上の書き方だとmkdir fooだけ実行されるっぽい
- 550 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:49:19 ]
- `` はシェルコマンドを実行したいときに使う記法じゃないぞ
返り値が必要なときに使うもんだ system 使え
- 551 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:57:56 ]
- >>544 >>547
やってみた?
- 552 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:17:32 ]
- 534です。
>>547 たいへん参考になりました。 ただ初心者スレで使うには説明が必要ですね。
- 553 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:21:00 ]
- >>550
system " mkdir foo mkdir bar " でも変わらなかった
- 554 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:31:24 ]
- >>553
シェルスクリプトとみなせる環境であるなら全部実行できるはず 動作しないとしたらWindowsかCygwinだな
- 555 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:33:20 ]
- 渡した文字列がshに渡るんだから
mkdir foo; mkdir bar だろう。 つーかそんなことしなくても、 mkdir foo bar でいいだろう。
- 556 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:35:50 ]
- >>555
最新5レスしか読めない携帯からのご参加ですか?
- 557 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:38:56 ]
- >>555
mkdir したいって話じゃねーだろ >>553 Windowsではでっかいひとつのスクリプトとして実行するしかなさそうだな
- 558 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:39:43 ]
- つーか、全部シェルスクリプトで書けば?
system "foo.sh" したらいいやん
- 559 名前:540 mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:15:15 ]
- >>559
>system(*Dir.glob(target).grep(filter).unshift(command)) なぜわざわざunshiftを使うのか分からん。>>544の通りに system command, *Dir.glob(target).grep(filter) でええやん。
- 561 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:34:26 ]
- すっごい前に、配列からの抽出にpopとshiftを使う子がスレにいたな
キューじゃないものに pop とか使ったらダメよ混乱するから
- 562 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:00:35 ]
- >>530
RubyのselectはSQLのselectじゃなくて Smallltalkのselectに由来するって知ってるか?
- 563 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:09:54 ]
- >>561
普通に使ってるし、混乱するって話もあまり聞かないぞ そもそもpopやshiftを使わないとすると、代わりにどんな風に書くんだ?
- 564 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:14:58 ]
- >>562
「外来語」の detect と select で悩むくらいなら find と find_all を使うなあ、俺は というかなんでそこで SQL が出てくるんだ?
- 565 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:21:17 ]
- 当時の様子は知らないし、同じくキューでない配列にも普通にpop/shiftは使うけど
配列から取り除くことが作用ではなく副作用になる場合以外、 「配列から取り除く(ついでに値を得る)」ではなく 「値を得る(ついでに取り除く)」だと思ってるとミスするという話かと。 def get_first(ary) ary.shift end ary = [1,2,3] put get_first(ary) # aryが破壊される
- 566 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:35:31 ]
- >>563
同意 queue じゃなくても、popもshiftも使うよな
- 567 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:38:04 ]
- キューでもないのにpopが積極的に必要になる場面が思いつかない
イテレータ拒絶派か何かか?
- 568 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:42:26 ]
- >>567
split結果の先端や終端にゴミついてるのが確実なときに切り落とすためとか。
- 569 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:55:45 ]
- >>568
delete_at(0) 配列先頭のデータが欲しいときに data = arr.delete(0) と書くのが奇妙なのと同程度には # 先頭は不要 arr.shift と書くのは奇妙だと思う shift に関してはコマンドライン引数を順に扱うときに shift コマンドを使った経験が後を引いてるのかもしれないが、 ここは Ruby だし shift は変
- 570 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:57:55 ]
- そろそろ誰の何の質問の答えているのかはっきりさせようか
- 571 名前:デフォルトの名無しさん [2008/12/17(水) 15:58:58 ]
- じゃあどう書けばRuby的なの?
- 572 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 16:19:46 ]
- 配列を破壊しなければうまくいかないかどうかによって違うんじゃね
- 573 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 19:49:45 ]
- 難しく考えたことねえな
ところでその考え方だとpopはキューに使っちゃダメだろ あれはスタックに使うものでは?
|

|