1 名前:デフォルトの名無しさん [2010/03/04(木) 11:00:57 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 ★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。 (理由:現時点では有名ライブラリやアプリが 1.9.1 に完全には対応していないためです) 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 を習得すれば将来スムーズに 1.9 系に移行できるでしょう。 関連スレやURLは>>2-5 あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
401 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 13:52:19 ] >>400 動かないのならエラーメッセージを貼っておくれ スクリプトをダブルクリックして実行したのなら コマンドプロンプトから実行して
402 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 13:59:36 ] おー、WindowsでQtライブラリ使ってる人初めて見た
403 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:08:03 ] rubygemsでインストールしたパッケージのヘルプってどうやって見れますか?
404 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:09:59 ] >>398 書かない場合は US-ASCII を指定したのと同義。 ASCII文字しかないなら書いても書かなくても結果は同じ。 8ビット目が立ったシングルバイト文字は入れてないよね?
405 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:12:27 ] >>403 riかrdocか。 gem server を起動して localhost:8808/ でも読める。
406 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:13:09 ] 正規表現の動作が変わるんじゃなかったか
407 名前:400 mailto:sage [2010/03/13(土) 14:14:30 ] >>401 test.rb:1:in `require': no such file to load -- Qt4 (LoadError) from test.rb:1 見てのとおりライブラリの読み込みに失敗しています let-your-heart-soar.txt-nifty.com/blog/2008/07/qtqtrubywindow_82d9.html この通りにやって、C++のチュートリアルは動くようになっています でも、こんな事をやってqtrubyに関係あるのか疑問 >>402 ruby gtk2を使おうかなと思ったけど、gtk+のライブラリ全然わかんないから linuxでもqtrubyが動けば、linuxで開発してwindowsでexeを作ろうかな〜と それに、2週間くらい前にこんな本を買ったし >入門 Qt 4 プログラミング >ttp://www.oreilly.co.jp/books/9784873113449/
408 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:15:52 ] >>403 gemディレクトリ/ruby/1.8とか/doc/ の中にファイルが入ってるので好きなときに読め ActiveSriptRubyの場合はC:\Program Files\ruby-1.8\lib\ruby\gems\1.8\doc\
409 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:17:57 ] >>407 require 'rubygems' require 'Qt4'
410 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:25:42 ] >>406 US-ASCIIなソースにUS-ASCII以外のマジコメを書く場合?
411 名前:400 mailto:sage [2010/03/13(土) 14:26:51 ] >>409 文法を覚える前にテストをするもんじゃないですねwww 助かりました、ありがとうございます
412 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:44:08 ] >>403 HTMLファイルでいいならシェルから gem environment した出力の - GEM PATHS: の1行目(になかったら2行目)の場所の doc ディレクトリの中に
413 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 16:20:07 ] #=>って習慣なの?
414 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 16:25:32 ] >>413 doc.okkez.net/187/view/help
415 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 16:26:05 ] 習慣かどうかはしらん ふつうコメントの直後にスペースをひとつ挟むから # => value だよな はちどりのRuby本もそうなってる
416 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 16:39:23 ] 個人的にはあまり好きではない まあ、書籍向けの表現だと思う
417 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 17:23:40 ] gem install -r XXXX ERROR: could not find gem XXXX locally or in a repository 何これ?
418 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 17:33:32 ] 文字通り。
419 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 17:33:47 ] >>417 その質問に至った経緯をまず聞こうか
420 名前:413 mailto:sage [2010/03/13(土) 17:37:04 ] >>419 linuxでそう入力しただけだけど 得にそれ以外に何もしていない
421 名前:420 mailto:sage [2010/03/13(土) 17:37:46 ] 名前を間違えた >>417 ね
422 名前:420 mailto:sage [2010/03/13(土) 17:39:28 ] ごめん、ただのスペルミスですたorz
423 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 17:39:54 ] まずはgem search- rを使うんだ、でその結果から選ぶがよろし 自分で入力せずに素直にbash,zshの補完機能に頼った方がいいと思う
424 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 21:46:53 ] 他の言語のisXXXメソッドは、XXX?とrubyではなってるみたいですね 三項演算子とかと一緒に使うと読みにくいと思います お前らはどうやっていますか? return windows.visible? ? 値A : 値B
425 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:07:58 ] それほどでも・・・ return (windows.visible?) ? 値a : 値b
426 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:10:57 ] ぶっちゃけ、うっかり window.visible? A : B と書いて怒られることはよくある。
427 名前:424 mailto:sage [2010/03/13(土) 22:13:57 ] そんなもんですか そんじゃ気にしないようにしますわ
428 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:20:29 ] 条件演算子はぶっちゃけそれほど使わない 不自然感を感じてるうちにifとかに書き換わるのでむしろラッキー
429 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:03:17 ] include Enumerable した場合、自分のクラスで each を定義しますが def each @array.each do |e| yield(e) end end def each(&block) @array.each(&block) end どちらが好ましい書き方なんでしょうか?
430 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:27:40 ] 後者 irb1.9> class C; include Enumerable; def initialize; @a=[1,2,3]; end; def each(&b); @a.each(&b); end; end irb1.9> p C.new.each #<Enumerator:0x931483c> irb1.9> class C; include Enumerable; def initialize; @a=[1,2,3]; end; def each; @a.each{|e| yield(e)}; end; end irb1.9> C.new.each LocalJumpError: no block given (yield)
431 名前:429 mailto:sage [2010/03/13(土) 23:43:14 ] >>430 なるほど、ありがとうございます。
432 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:00:43 ] 前者は昔の名残だね。
433 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:10:16 ] 前者は return @array.to_enum unless block_given? を最初 にやればよさそうだけど、今回は無理に使うこともないな。
434 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:16:42 ] javaかC++のプログラマのための、Ruby入門のサイトを教えてください
435 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:19:42 ] www.google.co.jp/search?q=Ruby%E5%85%A5%E9%96%80&ie=UTF-8
436 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:21:15 ] C++やJavaの特有事情は忘れて勉強したほうが習得はうまくいきそうな気がする それこそBasicの制御構造レベルの知識だけある人のほうが吸収早そう
437 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:44:12 ] >>424 return windows.visible?? a : b 疑問符を二個つなげてすげー疑問って雰囲気を醸し出す
438 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:48:41 ] >>386 のチケット、 r26909 で修正された。 $ ruby -ve "puts File.expand_path('あ', '/'.force_encoding('US-ASCII'))" ruby 1.9.2dev (2010-03-13 trunk 26909) [x86_64-darwin10.2.0] /あ
439 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 02:15:40 ] >>430 前者の書き方しか知らなかった。
440 名前:66 mailto:sage [2010/03/14(日) 07:03:08 ] >>395 今度から本スレに書きます。 >>438 ありがとうございました。 確認しました。
441 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 08:44:47 ] 春休みで盛況だなw
442 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 11:49:30 ] moduleってパッケージとMixinを、実現するための予約語なんだよね Mixinは実装を持ったインターフェイスみたいなもんだから、 moduleはmoduleを継承する事ができるの?
443 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 12:18:51 ] >>438 乙乙!!
444 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 12:24:46 ] >>442 > moduleはmoduleを継承する事ができるの? そもそも文法的に継承できない(module M2 < M1 は SyntaxError) メソッド検索順位のひとつ上にモジュールをぶちこむ include を使う module M1; def m; "M1!"; end; end module M2; include M1; end # M2 の上に M1 module M3; include M2; end # M3 の上に M2 module M4; include M3; end # M4 の上に M3 class C; include M4; end # C の上に M4 p C.new.m p C.ancestors # 継承とインクルード込みの検索優先順位を表示 結果 "M1!" [C, M4, M3, M2, M1, Object, Kernel] 検索順位的には継承と同じなので実用上の問題はない class C1; end class C2 < C1; end class C3 < C2; end p C3.ancestors #=> [C3, C2, C1, Object, Kernel]
445 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 12:40:44 ] じゃあ継承でいいじゃん
446 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 12:46:49 ] >>445 よくねー 人間を継承した俺がいたとして、翼が欲しいと思ったら class 俺 < 翼 end するのか? 俺は翼の一種なのか? 俺は翼の子分か? 人間且つ翼の俺って何? 翼って機能だろ class 俺 機能追加 翼 end とするのが筋だろ、わかりやすいし、渾然一体になる継承よりは機能外すのも簡単そうだ だから翼はモジュールにして、includeで追加する 実際は 俺 = 人間.new(params) 俺.extend(翼) とするのが妥当ではあるがまあ細かいこと気にするな禿げるぞ
447 名前:442 mailto:sage [2010/03/14(日) 13:12:23 ] >>444 ,>>446 ありがとう >>445 なりすましっぽく見えるレスだな
448 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:18:08 ] ○引数で複数のディレクトリパスを与える ○与えられたディレクトリに対して再帰的にファイルを全て削除する ○ただし.txt拡張子が付くファイルのみ削除しない プログラミングに不慣れながらこんなスクリプトを書こうと思い、以下のようになりました。 #!/usr/bin/ruby require 'fileutils' ARGV.each do |i| FileUtils.rm(Dir.glob(i + '**/*[^(txt)]'), :force => true) end 突っ込みどころなどありましたら教えていただけないでしょうか。 簡単なテストをすると意図したように動くのですが少し不安なので質問させていただきました。 自分で怪しいと思ってる箇所は以下の2箇所です。 @ i + '**/*[^(txt)]' こんな指定の仕方でいいのだろうか AそもそもFileUtilを使うべきなのか 宜しくお願いします。
449 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:25:51 ] >>448 他のスレから飛ばされてきたなら、 飛ばされましたって書かないとダメだよ
450 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:39:50 ] >>448 死んでいいよ
451 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:41:46 ] Dir.globのワイルドカードはあまり知らんが(Windowsユーザーなもので) 否定形なのはRubyでやったほうが無難だと思う Dir.glob(i.sub(/\/?$/,'/**/*')).reject{|e| test(?d,e) or e =~ /\.txt$/i}
452 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:43:52 ] i ってなんだろう? そもそもグロブでいいのか。
453 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:45:01 ] require 'fileutils' noop = verbose = ARGV.include?(':noop') ARGV.each do |s| pathlist = Dir.glob(File.join(s, '**/*')) pathlist.delete_if{|path| File.extname(path) == '.txt'} pathlist.each do |path| FileUtils.rm(path, :force => true, :noop => noop, :verbose => verbose) end end $ ruby ./del.rb tgtdir :noop
454 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:45:48 ] *[^(txt)] は、 最後の文字が 開き括弧 でも t でも x でも t でも(アゲイン) 閉じ括弧 でもない という意味になるんじゃないか?
455 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:48:11 ] >>453 next ですっ飛ばしていいと思う require 'fileutils' noop = verbose = ARGV.include?(':noop') ARGV.each do |s| Dir.glob(File.join(s, '**/*')).each do |path| next if File.extname(path) == '.txt' FileUtils.rm_r(path, :force => true, :noop => noop, :verbose => verbose) end end
456 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:48:38 ] >>454 それはない
457 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:56:02 ] $ ls x.c x.doc x.tex x.txt $ ruby -ve 'p Dir.glob("*[^(txt)]")' ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0] ["x.c", "x.doc"]
458 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:57:18 ] はいはい勘違いゴルファーは帰ってね
459 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:58:40 ] [^(txt)]を検証しただけじゃね?
460 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:00:42 ] マニュアル嫁でよくね?
461 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:01:32 ] どっちでもいいよ…
462 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:04:39 ] ここは初心者スレだろ? テンプレ読めない奴はカエレ 暴れるなら本スレでやr
463 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:05:49 ] 検証が漏れてないかどうかはどうやって検証すればいいのかという
464 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:11:10 ] >>458 どこをゴルフと誤認したのか気になる。
465 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 01:18:47 ] rmdir -rで綺麗さっぱり消せばいいのにw
466 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 01:54:20 ] RubyをWindowsで開発環境構築する方法教えてください。 OSはWindows7です
467 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 01:55:11 ] 開発環境ってたとえばなーに
468 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 02:22:10 ] >>448 「再帰的」と書かれていますが、別に find を使うような要件ではなく 引数のディレクトリ直下のみ走査すればよさそうなので、こんなかんじ ではいかがでしょうか。 require 'pathname' ARGV.each do |d| Pathname(d).children.each do |f| f.unlink unless f.extname == ".txt" end end # Pathname は標準添付ライブラリだから使ってもいいよね ところで、Ruby に限らず Perl でも Python でも glob ってシェルの ワイルドカード展開のエミュレートだと思いますが、機能としては中途半 端(文字列の単純比較 < glob < 正規表現活用)ですし、プラットフォーム 毎に微妙な挙動差も考えるとムダにドツボにはまりそうですし、(少なく とも「初心者」は)あまり積極的に使わない方がよくない?
469 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 02:33:02 ] >>468 書いてるあなたがすでにglobの罠にはまっているという。 再帰的に走査したいんだよ。> **/
470 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 02:42:35 ] Dir.glob('**/*') は許容されるべき というか普通はこれしか使わない 残りは返ってきた配列に入った文字列を正規表現とかでどうにかする 短く1行で書かないと家にいる妻がスナイパーに撃たれるとかそういう時にのみグラブ条件を書く
471 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 04:18:21 ] 1行記述を強要する妻かw
472 名前:468 mailto:sage [2010/03/15(月) 05:11:59 ] >>469 うへ、自分がドツボにはまっていました、というか **/* の意味を 知らんかった orz >>470 を参考に Pathname.glob でも使えばよいのでしょうが、あえて Find 利用ということで: require 'pathname' require 'find' Find.find(*ARGV) do |f| t = Pathname(f) t.unlink if t.file? and t.extname != ".txt" end
473 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 05:24:32 ] >>471 強要しているのはスナイバーかと。>>470 は愛妻家なんですね。
474 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 08:55:46 ] いや恐妻家なんだろうw
475 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 09:57:07 ] 要求を呑まないと何も知らない家族が射殺されるというのはわりとポピュラーな展開かと グラブ文字処理はメソッド独自だから、明白な全抜き出し以外は正規表現などを駆使、という方向性は妥当 グラブ処理の時点で小細工すると後々遺恨になるぞ
476 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 10:41:36 ] なるほど
477 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 12:43:17 ] >>466 まずはテンプレくらい嫁よ ・ActiveScriptRubyをインスコ ・るびまのchmをダウンロード ・NetBeans IDE(統合開発環境)をインスコ これでなんとかなるだろ。Rails開発ならcoLinuxかPortableUbuntu入れろ。
478 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 12:44:12 ] >>466 あ、あと、c:\Program Files\以下にはRubyをインスコしない方がいいみたい。 RubyGemsが動作しないとかの報告があった (今のバージョンはどうかしらん)
479 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 12:53:05 ] ねこび〜ん勢力の工作を検知しました
480 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:02:44 ] Windowsでも、XPなら c:\usr\local\ruby とかにインストールした方が精神衛生上よろしい気がする UACとか入るとそう簡単にはいかないんだろうけど
481 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:17:04 ] >>479 ねこび〜んはダメだね コードの補完が遅すぎて使えない
482 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:35:16 ] ActiveScriptRubyはデフォルトのインストール場所が性善説に過ぎる ttp://d.hatena.ne.jp/kitamomonga/20100202/ruby_watir_crash_with_autoitx3 まあこれは間違えるほうが悪いんだけれども
483 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 14:06:24 ] array = [1,2,3,4,5]とすると配列ができますが、わかんなくなりませんか? javaとかだったら、IDEが配列だよって教えてくれるけど やっぱり、最初にこうするべきなんですかね? array = Array.new
484 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 14:20:31 ] >483 ならない Array.new はリテラルに比べると遅い。
485 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 14:21:39 ] >>477 >・るびまのchmをダウンロード リファレンスchmならASRに同梱されてたはず それと初心者スレでるりまとは呼ばない方がいいよ
486 名前:483 mailto:sage [2010/03/15(月) 14:27:49 ] >>484 そうですか ありがとうございます
487 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 14:44:11 ] a = [1, 2, 3, 4, 5] はわけわかんなくならないが hogedata = [] は hogedata = {} との区別がわけわかんなくなることはある ので、そういうときは hogedata = Array.new と書くことはある 要素が入ってれば配列なのか Hash なのかは一発なのでわざわざ初期化なんてしない
488 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 15:14:22 ] >>485 > それと初心者スレでるりまとは呼ばない方がいいよ なんで?
489 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:05:56 ] というかるりまるびまってなんですか?
490 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:18:20 ] ここは大喜利すべきか
491 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:21:11 ] まあ、マニュアルという認識でいいよ chm形式のマニュアル読んでれば十分
492 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:24:11 ] >>488 マイナーな専門用語は避けるべき。初心者スレだし。
493 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:25:13 ] >>488 まさにこの流れが理由 るびまと区別がついてないならなおさら
494 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:50:12 ] 何やら貢献できたようで何より 1.9.1は初心者向けじゃなかったのかー 今まさにダブルクリッコするところだったぜー ここに来てよかった ってことでActiveScriptRubyなるものをダウソしてきます
495 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 16:51:41 ] ここIDないのね 494は489の人てことでw
496 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 17:31:53 ] 質問です エクセルで書かれた名簿を整理して出力するプログラムを書いているのですが、 名前、郵便番号、住所の分離が上手くいきません 与えられた名簿は半角or全角スペースで区切られているのでsplitを使おうと試みているのですが、 例えば以下のように記述すると"―"や"県"が消えてしまいます puts '山田 太郎 〒0000−0000 山田県山田333-333-333-333'.split(/[ 〒]+/) 何か良い知恵があればなにとぞご教授お願いします ちなみに元のプログラムではputsせず、分離後にある配列に入れています
497 名前:496 mailto:sage [2010/03/15(月) 17:34:18 ] 追記失礼します rubyはver1,87を使用しております
498 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 17:48:49 ] >>496 Excelってことなので、WindowsでSJISのソースコードとして、 スクリプトの先頭に #! ruby -Ks もっと推奨の方法があったかもしれない
499 名前:496 mailto:sage [2010/03/15(月) 17:51:44 ] >>498 ご教授いただいたとおりにしたところ速やかに改善されました! ありがとうございます
500 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 17:53:59 ] Rubyが取り扱う文字のエンコーディングを指定しなければASCIIとして扱われてしまうのでそういうことになる Ruby 1.8まででは 1 Ruby起動時にスイッチで -Ks とかで指定する 2 スクリプト先頭に #!ruby -Ks とか書いておくとスクリプト実行時にそのスイッチが考慮される 3 $KCODE を設定する 4 個々の正規表現のオプションでエンコーディングを指定する ただし1,2はスクリプト自体のエンコーディングと正規表現の振る舞いの両者を変更するが 3,4だと正規表現の振る舞いを変えるだけなので スクリプトがシフトJISで書かれていると p "表" # エンコーディングを正しく指定しないと 文字列リテラルが終了してないことに("\225\" と同じ扱い) とかのいわゆるダメ文字(2バイト目が\)問題にぶち当たる UTF-8やEUC-JPだとそのような問題は起きない(のかな?)