- 1 名前: 【大吉】 mailto:sage [2009/01/01(木) 13:13:22 ]
- プログラミング言語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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
- 237 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 23:55:18 ]
- >>228
ぐぐる以前に、そのページのコードの前にある参考ページに全部 書いてあるじゃん。 一般論としてということであれば、やっぱりぐぐる以前にリファレンスなり 入門なりを読むべきでしょう。
- 238 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 00:17:42 ]
- XP SP3、Ruby 1.8.6、エクセル2003使用者で、WIN32OLEを使ったプログラムを書いてるんですが、
エクセル操作の命令をメソッドの定義内で書いたときにエクセルのメソッド名?に空白が 含まれているものだとエラーが出てうまく動きません。 例: def hoge excel.Sheets(2).Select end は正しく動くのですが、 def fuga excel.Sheets(2).Move After = excel.Sheets(1) end は"Move After"の"Move"と"After"の間に空白が入っているために ”dynamic constant assignment”というエラーが出てしまいます。 スペースをなくしたりするとこのエラーは消えますが、当然他のエラーが出ます。。 おそらく空白があるために後ろの"After"を定数と認識しているのではないかと思うんですが、どうなのでしょうか? 色々なエクセルのメソッドを自作のメソッドに定義して呼び出して一度に実行、みたいなことをさせたいと思っているんですが 文法上メソッドの定義内でこういったエクセルのメソッドを定義するのは無理なのでしょうか? 何かうまい解決策がありましたらご教授お願いします。
- 239 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 00:32:02 ]
- >>238
> おそらく空白があるために後ろの"After"を定数と認識しているのではないかと思うんですが、どうなのでしょうか? その通り スペース含んでたりしてRubyがメソッド名としてうまくパースしてくれないときは Object#send を使うといい excel.Sheets(2).send('Move After') = excel.Sheets(1) ただWIN32OLEでExcel使ったことないから動作確認はしてない
- 240 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 00:37:19 ]
- おなじくExcelは詳しくなくて申し訳ないが
MoveがメソッドでAfterは引数だって情報が引っ掛かったのよ ()でくくってみるってのはどう?
- 241 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 00:39:38 ]
- win32oleは使ったことないが多分invoke使うべきだろう
ttp://doc.loveruby.net/refm/api/view/method/WIN32OLE/i/invoke
- 242 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 00:42:06 ]
- >>229
でも>>228の該当部分の構文要素を分解すると、 「doc」「/」「:h1」なんだよな……。
- 243 名前:238 mailto:sage [2009/01/09(金) 01:07:01 ]
- >>239
助言ありがとうございます。 教えていただいた方法を試してみたのですがダメでした・・・ syntax error, unexpected '=', expecting kEND excel.Sheets(2).send('Move After') = excel.Sheets(1) >>240 助言ありがとうございます。 Move(After)ってことですよね。こちらも同様にダメでした。。 syntax error, unexpected '=', expecting kEND excel.Sheets(2).Move(After) = excel.Sheets(1) >>241 助言ありがとうございます。 これも同様にダメでした・・・orz syntax error, unexpected '=', expecting kEND
- 244 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 01:10:32 ]
- そもそもメソッドの返り値に代入なんかできないからね
- 245 名前:238 mailto:sage [2009/01/09(金) 01:13:01 ]
- すみません、>>243に書き忘れていましたが、
>>241 excel.invoke('Sheets(2).Move After') =excel.Sheets(1) excel.Sheets(2).invoke('Move After') =excel.Sheets(1) excel.Sheets(2).Move.invoke('After') = excel.Sheets(1) と試してみましたがすべて下記のエラーでした。 syntax error, unexpected '=', expecting kEND
- 246 名前:227 mailto:sage [2009/01/09(金) 01:17:37 ]
- わかりにくかったかもしれないから再度。
たとえば blog.livedoor.jp/techblog/ ここのカテゴリの部分の要素を抜き取りたいのです。 div.entry-categoryで抜き出せばいいのですけど、複数あった場合はだめで、 複数あった時の共通するのはURLにcat_xxxxx.htmlとなります。 ので、hrefにcat_があればその要素を抜き出したいのですが・・・
- 247 名前:227 mailto:sage [2009/01/09(金) 01:20:36 ]
- わかりにくいかもしれませんね。
<a href="example.com/test/cat_1234.html>カテゴリ</a> <a href="example.com/test/cat_5678.html>カテゴリ2</a> のカテゴリ、カテゴリ2を抜き出したいです。
- 248 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 01:23:08 ]
- あーVBにキーワード引数が有ってそれをそのまま書こうとしてハマってるのか
多分こうだ excel.Sheets(2).Move("After" => excel.Sheets(1) ) ttp://homepage1.nifty.com/markey/ruby/win32ole/win32ole05.html
- 249 名前:初心者 mailto:sage [2009/01/09(金) 01:28:42 ]
- >>247
inner_htmlでおkです
- 250 名前:227 mailto:sage [2009/01/09(金) 01:31:10 ]
- >>249
inner_textだとカテゴリ,カテゴリ2と抜き出せるのですがね。 URLにcat_を含むaタグのinner_textを抜き出したいのです。
- 251 名前:238 mailto:sage [2009/01/09(金) 01:32:54 ]
- >>248
出来ました! ありがとうございます!! なるほど、そんな書き方があったんですね。 これで他のキーワード引数付きのメソッドも問題なく使えそうです。 本当にありがとうございましたm(_ _)m
- 252 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 01:33:11 ]
- a要素を全部取ってきてselectすれば?
- 253 名前:228 mailto:sage [2009/01/09(金) 01:44:46 ]
- みなさま、ありがとうございます
>>229 クオーテーションでくくっても、その場合Rubyのみの検索と同じです Javaのように、やたら長いAPIだとぐぐると一発で出てくるのですが >>230 >>232 オーバーロードだったのですね リファレンスは見てみましたが、該当するものを見つけられませんでした お手数をおかけしました >>231 そうかも知れませんが、mechanizeを使うことが結構大きなモチベーションでした >>233 丁寧にありがとうございます |h1|はここに限らずよく使う構文ですので何となく判るのですが 一例として、これも調べるのに苦労したことがあります 使うだけなら、黙って書き写せばいいのだけど、欲張ると急に難しくなる >>234 ありがとうございます、CSSセレクタとかは詳しくはないものの別件で調べてみました >>235 mechanizeは結構複雑で苦労していますが、よくやっています >>237 ごもっともですが、こういうとき普通はどう調べるのかなと疑問に感じました Rubyは便利な機能が多いのですが、他人のコードを見て何をしているのか 今のところ自分の理解を超えているものが多く、読み解くヒントが欲しかったのです
- 254 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 02:03:14 ]
- >>227
XPathで //a[contains(@href, "cat_")] という風に指定すれば意図している要素が得られる が,HpricotのXPath対応がお粗末だから(少くとも手元のHpricotでは)うまくいかない そこで,>>252が言うように search('a').select{|a| /cat_/ =~ a['href']}.map{|a| a.inner_text} みたいな感じでごまかしとけばいいんじゃない? まあ,nokogiri使えばXPathでうまくいくかもね
- 255 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 02:28:09 ]
- ソース見て分からないってのは基礎が出来てないからだと思うから、
詳細な解説付きの本でも読む事を勧める。 いちいちソースの解説求めてたら、答えるほうも大変だし飽きるでしょ。自分で調べて苦労してないからすぐ忘れて何度も同じ事訊くだろうし。
- 256 名前:227 mailto:sage [2009/01/09(金) 02:29:12 ]
- >>252,>>254
ありがとうございます。 search('a').select{|a| /cat_/ =~ a['href']}.map{|a| a.inner_text} でやりたいことができました。 XPATHの方はnokogiriいれてやってみます!
- 257 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 03:29:21 ]
- 自分のサイトのアドレスを取得する方法ってりあますか。
直にURL記述している部分があって、サーバ変えた際に色々と書き換えなどめんどうなので、 この部分をプログラムが今動いているサーバ(サイトURL)アドレスを取得して使ってくれるようにしたいのですが。
- 258 名前:227 mailto:sage [2009/01/09(金) 04:45:41 ]
- 何度もすいません。
div.abcかdiv.efgがある場合に抽出するにはsearch("div.abc||div.efg")でよいのでしょうか? それかsearch("div.abc")がnilになった時にsearch("div.efg")するように分岐させればよいのでしょうか? いまいち論理演算の使い土器がわからないです。
- 259 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 04:49:38 ]
- >257
その方法を考える前に「直にURLを記述」するのを1回だけにするのはどうよ。 コードの頭の辺りで定数として入れておいて、後はコード内で補完って感じで。 そうすると書換えの時も1回で済むし、無駄なアクセスも増えないから重くもならないかと。
- 260 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 04:54:26 ]
- url=yoursite.netみたいにね。
外部参照(だっけ?)できるようにすればそれ参照すればいいんじゃね?
- 261 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 05:53:39 ]
- >>257
どんなフレームワーク使ってるかわからんけど クライアントのリクエスト情報が入ったインスタンスの中を探せばあるだろ WEBrick::HTTPRequest#hostとかCGI#server_nameとか
- 262 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 06:34:16 ]
- >>258
search の引数には「CSSセレクタ」か「XPath」が使える(Hpricot独自の拡張も入ってるが) どちらも「HTMLとかのタグの位置を表記する方法」だ(大雑把) というわけでCSSセレクタの使い方でも調べとけ 他人にいちいち書き方を聞くことはなくなるだろう
- 263 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 06:54:42 ]
- >>257
定数ENVの中に何かいいの入ってるかも さくらインターネットと自前のLANサーバでスクリプトを共有させてたときは LOGIN_NAMEで初期値変えてたなあ
- 264 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 07:25:17 ]
- >>257
奥の手 require 'open-uri' open('forts.jp/ip').read.strip
- 265 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 08:59:47 ]
- ruby で argv を書き換える方法ってありますか?
Cだと **argv をいじると、プロセス一覧(ps等)に反映されるのですが ruby でも同じことをやりたいです
- 266 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 12:11:12 ]
- $0
- 267 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 12:41:44 ]
- >>257
RackならRequest#urlがある
- 268 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 15:46:56 ]
- >>259
>>260 >>261 >>263 >>264 >>267 とりあえずファイルに設置サーバのアドレス書き込んで、 それから読み出して使うように処理変えることにしました。 色々とアドバイスありがとうございます。
- 269 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 17:03:54 ]
- >>265
$0 = 'winny' OSによっては駄目かもしれない。
- 270 名前:デフォルトの名無しさん [2009/01/09(金) 17:29:53 ]
- Mechanizeで教えてください。
ブラウザでサイトに接続。 あるフォームをポストすると,ファイルがダウンロード。 そのページはかわらずそのまま。リンクやボタンをクリック可能。 (あたりまえといえばあたりまえなのですが) という作業をMechanizeでやろうとしてます。で agent = WWW::Mechanize.new agent.get(hogeサイト) agent.submit(agent.page.form(hogeフォーム)) agent.page.bodyでファイルを取得 なのですが,この段階で,agent.pageのクラスが WWW::Mechanize::Fileになってしまって,agent.page.backとかもできない。 フォームをsubmitする前のところから,次の作業をするにはどうすればいいでしょうか? reserve=agent.get(hogeサイト) みたいにしても,reserveは参照だから,同じでした。
- 271 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 17:34:24 ]
- transactとかあったような
- 272 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 17:36:59 ]
- めんどくさいなあ
見た目に簡単なのは、WWW::Mechanize#transact を使うこと ttp://d.hatena.ne.jp/kitamomonga/20080330/ruby_www_mechanize#www_mechanize__transact ブロック開始時の履歴が保存されて、ブロック終了時に書き戻される agent.get(hoge_uri) agent.transact{|a| a.page.form_with(:method => value).click_button.save_as(path_to_save) } agent.page # hoge_uriを維持
- 273 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 17:45:14 ]
- リクツとしてわかりやすいのは、WWW::Mechanize#visited_page
d.hatena.ne.jp/kitamomonga/20080330/ruby_www_mechanize#www_mechanize__visited_page URL を引数に渡すと、そのURLにアクセスしたときの Page オブジェクトを履歴から探してきて返す agent.get(hoge_uri) agent.page.form_with(:method => value).click_button.save_as(path_to_save) agent.visited_page(hoge_uri).links_with... agent.page の代わりに agent.visited_page(hoge_uri) を使うことで、いつでも過去の Page オブジェクトを引き出せる いちいち書くのめんどい場合は prev_page = agent.visited_page(hoge_uri) とでもして変数に入れとけ あ、Mechanize 0.8.5 より前の Mechanize を使ってる場合は form_with(:method => value) や click_button が動かないんで、 代わりに forms.method(value) や submit 使ってくれ
- 274 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 17:56:07 ]
- transact ってそう使うのか
- 275 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 18:01:50 ]
- >>274
たぶん、そもそもこういう用途向けに作られたんじゃないかと思われる トランザクションと銘打っておきながらブロック内で履歴が新規に開始されていない (ブロック直前のページがブロック内初回アクセスのリファラ候補になってる)あたりが怪しい
- 276 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 18:08:08 ]
- >>267
Rack(笑) Rackって使ってる人多くない感じがセンデロルミノソ
- 277 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 18:13:10 ]
- 個々に好きなの使ってる感じは嫌いではない俺
- 278 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 18:48:50 ]
- プログラミング言語 Ruby
David Flanagan, まつもと ゆきひろ 著 、卜部 昌平 監訳、長尾 高弘 訳 2009年01月24日 発売予定 ttp://www.oreilly.co.jp/books/9784873113944/ > 1章 イントロダクション > 2章 Rubyプログラムの構造と実行 > 3章 データ型とオブジェクト > 4章 式と演算子 > 5章 文と制御構造 > 6章 メソッド、proc、lambda、クロージャ > 7章 クラスとモジュール > 8章 リフレクションとメタプログラミング > 8.5 フック > 8.6 トレーシング > 8.7 ObjectSpaceとGC > 8.8 カスタム制御構造 > 8.9 method_missingとconst_missingの活用 > 8.10 メソッドの動的な作成 > 8.11 エリアスチェイン > 8.12 ドメイン固有言語(DSL) > 9章 Rubyプラットフォーム > 9.1 文字列 > 9.2 正規表現 > 9.3 数値と数学 > 9.4 日付と時刻 > 9.5 コレクション > 9.6 ファイルとディレクトリ > 9.7 入出力 > 9.8 ネットワーキング > 9.9 スレッドと並列処理 > 10章 Ruby環境
- 279 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 18:52:07 ]
- >>278
これもっと早く出すべきだったんじゃね? なにこのわかった人向けの基本の解説本
- 280 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 18:55:58 ]
- >>278
> 2.4 プログラムのエンコーディング > 2.4.1 プログラムのエンコーディングの指定 > 2.4.2 ソースエンコーディングとデフォルト外部/内部エンコーディング > 3.2 文字列 > 3.2.6 文字列のエンコーディングとマルチバイト文字 お。
- 281 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 19:04:33 ]
- Matzが直接本を書くのは、1.6ごろの宝石本以来?
- 282 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 19:18:29 ]
- それとほとんど内容同じ鴨試練
- 283 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 19:23:42 ]
- 今のバージョンに合わせた内容にしてるだけだろうな。
それでも大きな違いはあるだろうけど。
- 284 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 19:26:58 ]
- 良くも悪くも目次が「普通+言語作者周辺が語るディープツッコミ」で終わってるからな
- 285 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 20:13:07 ]
- 本の最初の部分で「他の言語経験がなく、これからRubyでプログラミングを始める人を対象とする。」みたいに
書いてあるが、実際にはまったくのプログラミング初心者には向かないかもしれない。 一番不思議に思ったのは、練習問題。 ふつう、その章に出てくる練習問題は、その章までに学んだことを応用できるような 問題にするべきなのに、Stringクラスの練習問題では、次の章に出てくるハッシュや 正規表現を使わせる問題が出てくる。 これじゃプログラミング初心者はつまずいてしまうのではないだろうか。 なんとなく、プログラミングの感覚を「Ruby」に染めさせるような本に思えてくる。
- 286 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 20:15:58 ]
- プログラミングPerlもプログラミング初心者が1ページ目から読むようにはできてなかった気がする
(まああれは厚さも問題だが)
- 287 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 20:51:12 ]
- >>278
100冊カートに入れた。 そしてカートから出した。
- 288 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:11:27 ]
- カートには99冊残ってるわけか
- 289 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:11:31 ]
- いまRubyマニュアルを読めてるような人には有り難味の薄い書物であるように見える
- 290 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:13:03 ]
- >>289
購入者の6割はお布施だと思うよ
- 291 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:14:15 ]
- 原著を斜め読みした限りでは、初心者向けの本ではない。
1.9の解説書として考えるのが妥当だと思う。
- 292 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:18:23 ]
- >>288
それは必ず成り立つのですか?
- 293 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:19:34 ]
- 詳説Rubyと名付けるのが妥当
- 294 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:20:49 ]
- オライリーの "プログラミング#{言語名}" という本は総じてガチ初心者お断りだから、
間違って買ってしまう人以外は平気だと思う
- 295 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:22:04 ]
- 設計者の書いた本は、仕様と同時に言語の思想とかも与えてくれるから
バイブル扱いされやすい気がする K&R、ラクダ、D&Eみたいに・・・・・本家amazonの評価が異様に良いのも気になる
- 296 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:23:12 ]
- >>293
だよなぁ・・。 なんかこう、プログラミング初心者向けですよ〜みたいなこと言っておいて 「プログラミングの世界ってどんなんだろう?」という純粋な初心者が、いつのまにか「Rubyだけの世界」に洗脳されそうだ。 もっとプログラミングの本質にこだわった本かと思ったのに。。
- 297 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:28:58 ]
- プログラミングの本質に触れたいなら特定の言語名を冠した本は違うと思うな。
といってプログラミングの初心者にそれを理解しろってのは酷だけど。
- 298 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:31:12 ]
- >>297
> プログラミングの本質に触れたいなら特定の言語名を冠した本は違うと思う ttp://www.amazon.co.jp/dp/4873112923 イエスこの本マジお勧め
- 299 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 21:33:12 ]
- >>298
それなんでRuby採用したんだろうな
- 300 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 01:51:35 ]
- > Rubyは変なキツネの漫画を読んだだけなので
www ホワイの感動的なやつだな >>205 C++のプロは「C++のプロ」とは自分で言わんだろ。 自称「C++のプロ」と言えばなんとなくニュアンスはわかる
- 301 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 02:40:12 ]
- >>285
>ふつう、その章に出てくる練習問題は、その章までに学んだことを応用できるような >問題にするべきなのに、Stringクラスの練習問題では、次の章に出てくるハッシュや >正規表現を使わせる問題が出てくる。 >これじゃプログラミング初心者はつまずいてしまうのではないだろうか。 それは既にhashや性器表現を知ってるからそう思うだけで教育的効果はあると思うよ 初心者の場合hashや性器表現を使わずにその問題を解こうとして悩むのがいい そうすれば次の章で出てくるhashや性器表現の意味や必要性を理解しやすい 唐突にhashや性器表現が出てくる方が初心者は混乱する >なんとなく、プログラミングの感覚を「Ruby」に染めさせるような本に思えてくる。 どの辺が?
- 302 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 02:43:11 ]
- >>300
大学生のときは上には上がいる、というか、上しかいない状況だったが、 就職してからは、下が果てしない、というか、下しかいない状況だった。 プログラミングで食ってりゃプロなのは間違いないが、それとスキルは直結しない。
- 303 名前:デフォルトの名無しさん [2009/01/10(土) 02:52:58 ]
- まつもとゆきひろって2ちゃんねるの管理人だった人?
- 304 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 03:33:40 ]
- >>301
ネタとわかってても性器表現が気になってしょうがないんだがw
- 305 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 07:07:39 ]
- >>302
下ばっかり見てると腕落ちますよ
- 306 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 09:24:05 ]
- rubygemsってどう呼ぶんですかね?
ルビィゲムズ?
- 307 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 09:28:57 ]
- >>306
gem(ジェム): 宝石。宝玉。 ttp://dictionary.www.infoseek.co.jp/?ii=2&lp=0&sm=1&sc=1&gr=ml&qt=gem&sv=KO&se=on
- 308 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 09:44:34 ]
- >>307
d
- 309 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 13:08:05 ]
- >>266
>>269 遅くなりましたがありがとうございます!! perl と同じなんですね 助かりました!
- 310 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 13:10:27 ]
- >>301
なるほどね。
- 311 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 14:01:03 ]
- 青空文庫形式のテキストを処理しています。
青空文庫形式では親文字とルビを次のように書いています。 |親《おや》|文《も》|字《じ》 これを一つにまとめる形で、 |親文字《おやもじ》 という形に変換(置換処理)したいのですが、どうすれば良いでしょうか。 親文字が幾つあるかは一定していません。 この処理を一行毎に行いたいのです。
- 312 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 14:59:15 ]
- >>311
irb> s = '|魑《ち》|魅《み》|魍《もう》|魎《りょう》が|跋《ばっ》|扈《こ》する' irb> 1 while s.gsub!(/|(.*?)《(.*?)》|(.*?)《(.*?)》/, "|¥¥1¥¥3《¥¥2¥¥4》") => "|魑魅魍魎《ちみもうりょう》が|跋扈《ばっこ》する" gsub!は置換が行われればレシーバ(s)を、行われなければnilを返す。 1っていうのはとくに意味はない。後置whileを繰り返すためだけの存在。
- 313 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 15:13:57 ]
- s.gsub(/(|.+?《.+?》)(?!|)/){"|%s《%s》" % $1.scan(/|(.+?)《(.+?)》/).transpose}
正規表現であまり悩みたくない人向け >>312 gsub の第 2 引数は使うなとお達しが来てるはずだが
- 314 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 15:27:57 ]
- 初心者スレで transpose と sprintf 使って手抜きしてる人には言われたくないだろうな
s.gsub(/(|.+?《.+?》)(?!|)/){ base = Array.new ruby = Array.new $1.scan(/|(.+?)《(.+?)》/){|m| base.push(m[0]) ruby.push(m[1]) } # 以下の文字列が gsub(re){str} の str に当たるもの "|#{base.join('')}《#{ruby.join('')}》" } 前にも gsub の 2番目の引数使ってた人がいたけど同一人物かね 無駄にエスケープ連打せずにブロック使えという認識になってたと思う
- 315 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 15:42:35 ]
- >>312
s = "|日《に》|本《ほん》|語《ご》の|漢《かん》|字《じ》" 1 while s.gsub!(/|(.*?)《(.*?)》|(.*?)《(.*?)》/, "|\\1\\3《\\2\\4》") puts s |日本語字《にほんご》の|漢《かんじ》
- 316 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 15:43:46 ]
- > gsub の第 2 引数は使うなとお達しが来てるはずだが
kwsk
- 317 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 16:28:35 ]
- 正規表現で漢字のかんむりやへんやつくりをマッチさせるにはどうするんですか?
- 318 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 16:32:31 ]
- >>317
無茶言うな どっかの誰かに「部首と漢字文字との対応表データ」を作ってもらうしかないね ネット上には適当なデータを作ってる熱心な人がいるから、それをRubyでどうにか使うしか
- 319 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 16:37:40 ]
- 発想としては斬新でけっこう好きだ
その視点を失わずにプログラミングして欲しいなと思う
- 320 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 17:11:49 ]
- このスレの少し前でRackの話が出てたけど
実際のところ、Rackって日本ではどのくらい使われてるんだろうね 日本語の解説記事もいくつかあるから、少なくともドマイナーって程ではないと思うが
- 321 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 17:49:37 ]
- 流石って
さす+が さ+すが どっちになってます?
- 322 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 17:56:54 ]
- >>321
熟字訓だから「さすが」で分かれない 明日が「あし - た」でも「あ - した」でもないのと同じ
- 323 名前:デフォルトの名無しさん [2009/01/10(土) 19:33:38 ]
- (3.2-2.0) == 1.2 がfalseの理由を教えて下さい。
- 324 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:34:58 ]
- >311です。皆さんありがとうございました。
- 325 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:47:19 ]
- >>323
等しくない たぶん浮動小数点数の誤差のせい irb(main):024:0> sprintf("%.16f", 3.2 - 2.0) => "1.2000000000000002" irb(main):025:0> sprintf("%.16f", 1.2) => "1.2000000000000000"
- 326 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:51:08 ]
- >>323
浮動小数点だから 何かを計算した結果の浮動小数点の値と、 それ以外の数式で何かを計算した(あるいは計算していない)浮動小数点の値が、 全く同じになるというようなことはふつう無い だから、小数を含んでいる数値は絶対にイコールで比較してはいけない どうしても比較したい場合は、たとえばその差を誤差並に小さな数 Float::EPSILON と比較する irb> (3.2 - 2.0) -1.2 < Float::EPSILON false irb> (3.2 - 2.0) -1.2 < Float::EPSILON*10 true 10倍や100倍以内なら同じ数値とみなしてよい
- 327 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:53:11 ]
- >>323
なるほど。 てことは、浮動小数点数の比較は安易にするなってことですかね。
- 328 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:55:18 ]
- >>326
ありがとうございます! そうゆうもんなんですね。 PHPから入った素人なんで、勉強になりました。
- 329 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:55:38 ]
- あ、いかん、絶対値とらないと
((3.2 - 2.0) -1.2).abs < Float::EPSILON*10 こういうのでよろしこ
- 330 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:55:47 ]
- rubyに限らず実数の比較をしないってのは基本
おおむね>>326の通りなんだけど、欲を言えば絶対値を取っておくほうがいい
- 331 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 19:57:40 ]
- 厳密じゃなくていいのなら、文字列にして比較してしまうというのがいいかもしれん
一般的な用途では文字レベルでしか判断しないからな irb> (3.2-2.0).to_s == 1.2.to_s true
- 332 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 20:29:17 ]
- なぜ文字列にして比較を??
数値の比較の話じゃなかったの?
- 333 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 20:59:37 ]
- >>332
文字列は てか浮動小数点の指数の基数って 初心者の頃はずっと10なんだと思ってた。 で、なんで誤差が発生するんだとさんざん悩んでみたり 今からしたら俺アホかと
- 334 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 21:02:00 ]
- しまったメインの話題を途中やめにしてた
数値を文字列に変換する過程である程度の誤差を丸めてくれるなら、 >>329みたいな過程を記述する必要がないってこと たとえruby内で記録されている値が 1.19999999999 であっても 1.20000000001 であっても 表示するときは最下位を丸めて 1.2 になると。 浮動小数点はちょっとわかりにくいからwikipediaで調べてみそ ja.wikipedia.org/wiki/浮動小数点数
- 335 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 21:05:56 ]
- irb> (3.2 - 2.0) -1.2 < Float::EPSILON
false これが true になるような左辺ってあるんだろうか
- 336 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 21:09:41 ]
- 左辺が絶対値ってことだと思うが左辺の方が小さかったらEPSILONの意味がないな
- 337 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 21:10:10 ]
- 0では?
|

|