1 名前:1様 [2009/04/02(木) 09:42:23 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 【Ruby1.9.1 は従来版とは別物であり、書籍や解説やライブラリのサポートがまだありません】 【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】 ※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です ※ただし 1.8.6 より安定しているとはまだ言えないので、安定性を第一とする用途には 1.8.6 をどうぞ 関連スレや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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
930 名前:デフォルトの名無しさん [2009/05/14(木) 13:35:23 ] WinXPでruby1.8.6を使っています。 文字列中の『:』(コロン)の扱いで質問です。 tag0 = "<parm xmlns="ruby_xyz ">\n" を実行したときコロンの箇所で syntax error, unexpected tIDENTIFIER, expecting $end というエラーが出ます。どうしたらよいでしょうか? 目的はtag0と他の文字列Aを組み合わせてできる文字列Bの生成です。
931 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 13:43:14 ] >>921-922 どうも。一応は出来るみたいですね。 ただ、Javaでも他の言語でも、ミリ秒計測は普通にできるものかと思っていましたので。
932 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 13:50:01 ] > 文字列中の『:』(コロン)の扱いで質問です。 違います どの解説にもこれのやり方は載ってるはずなんだが、載ってない解説とかがあったら即晒せ ダブルクォート「"」を含む文字列を表現するには " の直前に \ を置く tag0 = "<parm xmlns=\"ruby_xyz\ ">\n"
933 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 13:52:55 ] >>930 初心者らしい質問でなぜか安心した エスケープしない限り「"」が次に出た所で文字列の終わりとみなされるので tag0 = "<parm xmlns="ruby_xyz ">\n" と書くと, tag0 = "<parm xmlns=" ruby_xyz ">\n" と書いてるのと大差無い エスケープして書くならこうすればいい tag0 = "<parm xmlns=\"ruby_xyz\ ">\n" 「"」をエスケープするのが面倒なら %Q を使って tag0 = %Q!<parm xmlns="ruby_xyz ">\n! とかも書ける 詳しくはマニュアルなど参照のこと > 目的はtag0と他の文字列Aを組み合わせてできる文字列Bの生成です。 の意味がよくわからないけど,これで解決しただろうか
934 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 15:08:03 ] >>931 言語に関係なくミリ秒の計測はソフトウェア上では正確にはできません ハードウェアによる直接のサポートがどうしても必要
935 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 15:14:15 ] >>932 ,933 有難うございます。エスケープ文字列の問題だったのですね。 エラーの指摘箇所がコロンのところだったので、てっきりこの文字が原因だと思っていました。
936 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 15:43:30 ] >>935 エラーメッセージが教えてくれるのは転んだ場所でしかなくて 躓いたりぶつかったりの転ぶ原因は大抵別の場所にある。 遠く離れた場所で怪我してたから転んだなんてこともあるぐらい。 ありがちなのは想定外のオブジェクトに化けているパターン。 obj = ["hello,", "world"] obj = "!" # 本当は obj << "!" puts obj.join # ここでNoMethodError
937 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 16:08:18 ] 文字列処理で質問です(ruby1.8.6) 日付と時刻を文字列化し、その末尾を2桁づつ抽出したいのですが、 片方で4桁になってしまいます。 nowTime = Time.now.strftime("%Y%m%d_%H%M%S") # 現在の日付と時刻 timeLen = nowTime.split(//).size # 上の長さ value01 = nowTime[timeLen-4, timeLen-3] # nowTimeの末尾4文字目と3文字目 ← ※4桁になる value02 = nowTime[timeLen-2, timeLen-1] # 同様に1文字目と2文字目 p value01+", "+value02 # 2桁づつで表示 ← 実行すると4桁と2桁 どうすべきでしょうか?
938 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 16:17:15 ] 『まつもとゆきひろ コードの世界~スーパー・プログラマになる14の掟』 スーパー・プログラマってのが厨臭いなあ。書き下ろしだそうだから買っちゃうかもしれないけど。
939 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 16:28:51 ] >>937 そんなんTimeオブジェクトのメソッドで時間とか分とか出せばいいじゃん、というのはとりあえず置いておく nowTime = Time.now.strftime("%Y%m%d_%H%M%S") mm = nowTime[-4, 2] ss = nowTime[-2,2] puts "#{mm}, #{ss}"
940 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 16:37:47 ] >>937 最終的に欲しいのは YYYYMMDD_HHMMSS の中の DDSS なんだよな? リファレンスマニュアルで Time#strftime とついでに String#size,String#[] を調べてこい
941 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 16:43:54 ] >>939-940 ゴメンなさーい(泣
942 名前:デフォルトの名無しさん [2009/05/14(木) 18:24:50 ] >>938 宣伝乙
943 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 18:44:39 ] open-uri で each_line のように一行ずつではなく、 取得した内容全部を一気にごそっと変数に入れるにはどうしたらいいでしょうか
944 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 18:49:24 ] readで全部読む
945 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 18:51:52 ] っていうかread以外用途ないよね
946 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:13:36 ] この質問、よくみるね。 www.ruby-lang.org/ja/man/html/open_uri.html に書き込める人、サンプルよろしく。
947 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:15:20 ] サーバ側がchunkedでだらだら送ってくるのをeach_lineでだらだら処理、とか できるようになって...るんだろうか?
948 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:28:48 ] >>947 膳 膳
949 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 21:01:35 ] >>946 そのマニュアル、もう凍結されてるよ 今はるりまに移行してる
950 名前:デフォルトの名無しさん [2009/05/14(木) 22:25:28 ] >>914 > ドキュメント > Document > > matzの苦手なもの。彼は普段から「ソースがドキュメントだ。 > バグも完全に記述されている」と主張しているが、誰も受け入れない。当り前だ。 ・・・w
951 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 07:25:41 ] >>942 ageてるお前が宣伝マン。
952 名前:デフォルトの名無しさん [2009/05/15(金) 08:02:23 ] >>951 宣伝乙
953 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 09:34:05 ] >>949 Google の検索では凍結されたページが上位に来るのは問題だね。 るりまに転送とかできないのかな。
954 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 09:34:45 ] Googleさんに菓子折でも持って行けばやってくれるんじゃね?
955 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 09:47:06 ] 単純にリダイレクトしたら。
956 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 10:51:57 ] ここにいる全員のドキュメント嫌いも相当なものですな
957 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 11:08:32 ] ソースがドキュメントでテストが仕様書
958 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 12:00:13 ] >>953 そういうこと言うとRubyユーザーはHTTPも知らないとか思われそうなのでやめてくれ
959 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 13:35:24 ] sinatra で require 'rubygems' require 'sinatra' get '/' do "hello" end とだけの場合、/test や /xxx みたいに定義されていない URL を叩かれるとエラーになるけど、 その場合は「ページが存在しないよ」と出すにはどうしたらいいでしょうか。
960 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 15:36:26 ] >>959 これぐらい見ろよw www.sinatrarb.com/intro.html
961 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:25:23 ] >>959 Not Found When a Sinatra::NotFound exception is raised, or the response’s status code is 404, the not_found handler is invoked: not_found do 'This is nowhere to be found' end とあるね。
962 名前:デフォルトの名無しさん [2009/05/15(金) 16:29:18 ] WinXPでruby1.8.6を使っています。 一定間隔で動作するオシレーターはどう書けばよいのでしょうか? 調べましたが差分を求める説明が見つからず、下記の記述も未だ理解できないレベルです。 ttp://archive.mag2.com/0000267290/20080803070000000.html 単純に、例えば3秒間隔で「3sec」と出力されるものを先ず作りたいと思っています。 よろしく願います。
963 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:38:08 ] >>962 そのリンク先の >○シンプルタイマー(ソースコード) がほぼそのまんま答えなんだけどな。 というか「作りたいと思っています」なら、動かないものでいいからコード書いてみ。 添削はするし、わからない部分は具体的に聞いてくれれば答えるから。 ちなみに4行で書ける。
964 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:49:05 ] >>962 猫のモフモフ・・・
965 名前:962 mailto:sage [2009/05/15(金) 17:08:54 ] >>963 レス有難うございます。 直後に時刻のエポック秒変換の記述を手元の本で見つけましたので なんとか動作するコードは書けました(下記)。 # OSC01.rb count = 0 time0 = Time.now.to_i while true if time0 +3 == Time.now.to_i puts "3sec" time0 = Time.now.to_i count+=1 end # if count>10 break # 11回以上でwhileループをBreak end end ・・・明らかに4行は超えてますw
966 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 17:21:23 ] >>965 何回で止めるっていう条件が出てなかったしね。 while sleep 3 puts "3sec" end ちなみに分岐が一文だけならこういう書き方もできることを覚えておいて。 break if count > 10
967 名前:962&965 mailto:sage [2009/05/15(金) 17:32:02 ] >>966 有難うございます。 sleepってメソッドだったのですね。
968 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 19:43:00 ] >>956 書くのも読むのも好きですが何か
969 名前:デフォルトの名無しさん [2009/05/15(金) 19:58:36 ] CRubyがMRIだから松本さんが開発されたのかと思ったのですが、 検索でトップにくるのはGCを作成している方です。 Rubyの開発とはGCを開発することなのでしょうか?
970 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:03:02 ] 最近の言語全般で強ち間違ってないような気もするが、多分そういう話でもないんだろうな
971 名前:デフォルトの名無しさん [2009/05/15(金) 20:09:51 ] loop {break if count > 10} 上にあるこういう書き方ってRuby的にどうなの? Integer#timesを使わない理由って何?
972 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:16:29 ] countが不規則に増えるとか
973 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:19:12 ] 初心者の書いたコードになに嫌味つけてんのw
974 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:26:07 ] >>971 よう初心者
975 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:26:08 ] >>969 マジレスすると、一般的にCRubyとは言わず、単にrubyと呼ぶことの方が多いからそうなる
976 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:27:08 ] モノ教えるのに幾許かでも慣れてないとこういう時困るよな
977 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:32:11 ] まあ少子化だしな 関係ねえか
978 名前:デフォルトの名無しさん [2009/05/15(金) 20:38:50 ] >>966 == >>973 == >>974 よう初心者!
979 名前:デフォルトの名無しさん [2009/05/15(金) 20:59:28 ] すみませんでした。
980 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:59:52 ] めんどくせえ >>1-1000 よう初心者!!
981 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:02:24 ] 次スレ立てろよカス
982 名前:デフォルトの名無しさん [2009/05/16(土) 04:43:41 ] ruby1.8.6です。 ファイルアクセスが他のソフトとぶつかる場合で質問です。 Rubyで周期的にXMLファイルを上書きしていますが、この上書きのタイミングと 他のソフトによるXML読み込みが衝突した場合(と思われる時)、 in 'initialize': Permission denied - new XML.xml (Errno::EACCES) というエラーメッセージが出ます。 そこでRubyの振る舞いとして、他のソフトがファイルアクセス中は上書きを延期するか、 あるいは別の方法で衝突を回避したく思います。 何か良い方法はありますでしょうか? なお別のソフト側で衝突回避を試みましたが、上手くいかないためRubyに望みを 託すことにしました。
983 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 04:59:41 ] Rubyあんま関係ないな ファイルロック(またはロックファイル)でぐぐれ たいていの場合両方のソフトが対応してないといけないが、 たいていの場合相手のソフトはそんなもん作ってない なお、直接 File.open(path,'w'){|f| f.write(data)} するのではなく File.open(path_v,'w'){|f| f.write(data)} File.rename(path_v, path) と、ファイル移動をOS任せにしたほうがファイル書き込みアクセス衝突の可能性自体は減る ただし、これだと rename でファイルを掴むまでに起こったディスク上の変更を検知できない このへんの衝突可能性に気を遣ってるソフトはあらゆる永続的データ保存に「別名保存→名前変更」のプロセスを使ってるので そのソフトの使ってる別名保存名がわかればもしかしたらロックファイルのように使えるかもしれない
984 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 09:47:20 ] Rubyで次のコードが何故かできません。 超初心者です。 codepad.org/BEAGq3lE
985 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 09:54:12 ] >>984 Rubyに関するまとまった初心者向けの解説サイトまたは書籍を通読しろ 単に基礎知識が足りない
986 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 09:57:09 ] わかりました。ありがとうございます。
987 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 09:57:16 ] Rubyだけに関する知識じゃなくて、 もっと一般的にプログラミングで使用される基礎的な概念に関する知識だな。
988 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 10:03:46 ] >>984 グローバル変数は $x と書く。
989 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 10:11:32 ] Ruby 初心者スレッド Part 28 pc12.2ch.net/test/read.cgi/tech/1242436010/
990 名前:デフォルトの名無しさん [2009/05/16(土) 10:13:56 ] 999
991 名前:デフォルトの名無しさん [2009/05/16(土) 10:15:22 ] 1000!
992 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 10:57:49 ] いやそこまでギリギリじゃないから
993 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 11:17:41 ] あれw 1000!にだまされた
994 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 13:57:06 ] 1000なら今年Ruby2.0
995 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:02:46 ] こんなスローなスレでそんなことしてもw
996 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:08:34 ] 1000ならRubyは俺のもの
997 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:15:50 ] エッチでリッチなかーちゃん、Rubyをせしめてフランスへ。
998 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:38:42 ] とうきょう ルビルビ リズム ルビルビ 心ズキズキわくわくー
999 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 16:00:01 ] >>1000 なら今のシステムをSinatraで置き換える
1000 名前:デフォルトの名無しさん [2009/05/16(土) 16:02:22 ] 10^3
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。