[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 14:15 / Filesize : 278 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 27



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を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<278KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef