1 名前:RUBY [05/01/24 22:17:37 ] 私は、ある大学の1年生です。今、情報処理の講義でRUBYを習っています。 その講義で、期末テストとして課題が出たのですが、プログラミング初心者の私には 全然歯が立ちません。締め切りは1/31です。プロも皆さんには簡単な 問題かもしれませんがどうか教えてください。 課題は以下の通りです。
263 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 14:32:48 ] じゃんけんだと、手の種類が2個だと勝敗が決まってるんだよな。 3のときと1のときはあいこだよな。 いちいち判定しないで #仮想コード players.find(winner_hand(*hands.uniq)) if hands.uniq.size == 2 とかでいけるんじゃないの? Handクラスを作ってTyoki<-Paa<-Goo<-Tyokiとリンクリストみたいにして負けた方をincompatibleとして持つなら def stronger(other) @incompatible == other ? self : other end これだとwinner_handはいらなくて、 hands.uniq.inject{|a,b| a.stronger b}/*hands.uniq.size == 2*/で勝つ方の手が決まる。 まあ真偽値返すようにしてsortして[0]使うんでもいいけど。 Tyokiとかはインスタンスが違っちゃいかんのでHansの定数にするかシングルトンにするかクラスのまま使うかすること。 あとloopでgame呼ばないでgame側でloopしたほうがよさそうなのと win_patternは普通にクラス定数の方がいいんじゃねえかと思うのと gameでwinnerに@playersを代入してるけどインスタンス変数のまま使えばいいじゃんってのと コンストラクタでやってる色々は引数にした方がいいんじゃねえかとか。 あとオブジェクト指向っぽくするならCOMPlayerとHumanPlayerを作ってVisitorパターン使ってplayさせてみるとか。 といってもVisitorパターンが最適とは本見なきゃわからん人なので今ひとつ断言できない。
264 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 16:24:06 ] じゃんけんが完成したら、いよいよ野球拳の実装だな。wktk
265 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 18:39:19 ] オセロまでいくとむずすぎる?
266 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 18:55:58 ] 頭の悪いオセロなら簡単だよ
267 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 04:16:01 ] それオセーロ
268 名前:259 mailto:sage [2006/05/31(水) 07:17:44 ] 遅くなってすみません。 ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27835 Rubyに移植済みのもの。 判定部分に剰余を使っているので三人でしかじゃんけんできません。 あと、ルール 一人勝ちなら+2ポイント残り二人は-1ポイントずつ 二人勝ちなら+1ポイントずつ残り一人は-2ポイント 終了条件は特に無し # EUC-JPなファイルをupしたら文字化けorz
269 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 14:02:51 ] >>268 ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27837 Rubyっぽくしてみた。 ルール(配点)の入れどころがよくわからんかったので消してしまったがJanken側にあるべきではないか。 $ ruby source.rb プレーヤ数 回数 で実行できるけど30人越えた辺りで反応がすげー鈍くなるよ。
270 名前:268 mailto:sage [2006/05/31(水) 19:56:37 ] >>269 うーん、Rubyだ。 ポイントの入れ方は、3人でじゃんけんして あいこなら変化なし 一人勝ちなら勝った人は+2point,負けた二人は-1pointずつ 二人勝ちなら勝った二人は+1pointずつ,負けた人は-1point # ダメな変数の使い方の見本になってしまったorz # flagに複数の意味を持たせてしまっていたようだ # いくら一年以上前のプログラムだからって気付けよ>一昨日の自分 確かに、配点を弄るメソッドがPlayerにあるのは変ですね。 Jankenクラスにjudgeメソッドを実装するなら、ポイントを弄るメソッドも Jankenクラスにあるべきですね。 >268の時点では、Jankenクラスは特に役目は無くて(ってまたダメな設計の見本orz) 単にゲームを開始するだけの係りでした。
271 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 20:38:13 ] >>269 >>263 の人? 初心者だけど、Rubyの勉強になった。サンクス。 2時間ぐらいマニュアルと格闘しながら解読した。
272 名前:デフォルトの名無しさん mailto:sage [2006/06/01(木) 13:08:46 ] Jankenにポイント計算つけた。 sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27841 (敗者数/勝者数).ceilのポイント(敗者数>勝者数、そうでなければポイント=1)を分ける。 敗者は常に-1にしてある。 3人でやったときは同じ結果で、それ以上でも同じルールをスケールした結果になるはず。
273 名前:デフォルトの名無しさん mailto:sage [2006/06/01(木) 19:51:06 ] >>272 本当に些細なことだが、 scissorsは単複同形だよ。
274 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 01:38:55 ] N人であいこなし。複数人が勝てるパターンにしてみた。 ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27843 使い方は>269と同じ(パクりました) * 変数名、メソッド名を自分の好みに変更 * 判定にビット演算を使いたかったので、手の定義を変更した。 * 対話的に動かせるようにしてみた。 * 回数が多いときは誰かが101勝したら終了 * 人数を増やしすぎると延々あいこが続くので決着が着かない 例えば、 $ ruby Janken.rb 3 10 なら、3人で10回勝負が着くまでじゃんけんしつづける。 # あいこでredoさせるのに手間取った # Fixnum#stepでredoすると最初からになってしまうorz # 人数が多い時は別の終了条件にした方が良さそう。 # おいらが書くと長くなってしまうorz
275 名前:デフォルトの名無しさん [2006/06/03(土) 15:28:38 ] age
276 名前:デフォルトの名無しさん [2006/07/16(日) 14:47:02 ] すいません。 ある文字列があったときに、特定の範囲の文字色を変えるというプログラムをつくりたいのですが、 どなたかアドバイスお願いします。 いまはHTMLで出力しているのですが、それ以外にも、ruby/tkでつくったプログラム上に表示したいと思っています。
277 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 15:07:20 ] file=File.read('test.txt') rules=[ {'re' => /cat/ ,'from' => 'ねこだいすき', 'to' => '<font color=red>ねこだいすき</font>'}, {'re' => /dog/, 'from' => 'いぬだいすき', 'to' => '<font color=blue>いぬだいすき</font>'} ] rules.each do |rule| if file =~ rule['re'] then file.gsub(rule['from'],rule['to']) end end #アドバイスって何が欲しいんだろう…
278 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 04:44:43 ] 宿題スレ向きだよな。 アドバイスじゃなくて正解が知りたいと思う悪寒。 こう試してみたけど出来ませんじゃないし。
279 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:32:52 ] ここ宿題スレだよね
280 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:33:00 ] 宿題隔離スレだから自力でできた(できてない)とこから以下全部丸投げとかでも構わない こんなとこで一言一句完全丸写ししてバレないと思ってるならそれでもいいし ただし問題が何したいのかさっぱりわからん場合はそれこそ問題外
281 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 11:45:35 ] 問題文さえここに正確に書き写せない香具師なんだからどうなっても知らん
282 名前:デフォルトの名無しさん [2006/07/24(月) 21:22:49 ] さっぱりわかりません。どうかよろしくお願いします。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2457.txt
283 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 21:32:58 ] ar.push ar.shift
284 名前:デフォルトの名無しさん [2006/07/24(月) 21:48:13 ] これもわかりません。どうか優しい人よろしくお願いします。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2458.txt
285 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 21:51:24 ] >>283 その日の授業内容にもよるが先生が頭抱えそうな回答だな(w
286 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 21:59:40 ] >282,284 っていうか教科書読めよ。 特に 284 なんて問題文に答えが書いてあるのにこれ以上優しく説明できるか。
287 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 23:23:54 ] x = ARGV[0].to_i if /[05]$/ =~ x.to_s print "#{x}は5の倍数です。\n" end if /^(([0369]|[258][0369]*[147])|([147]|[258][0369]*[258])([0369]|[147][0369]*[258])*([258]|[147][0369]*[147]))*$/ !~ x.to_s print "#{x}は3の倍数ではありません。\n" end
288 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 01:02:30 ] >>287 ありがとうございました!!!!! 本当に助かりました!
289 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 14:27:15 ] >>283 や>>287 を提出したのだろうか
290 名前:デフォルトの名無しさん [2006/07/25(火) 20:27:32 ] 283はいいと思うけど、287はちょっとなぁ。
291 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 20:32:00 ] >>282 も配列の添え字の勉強をした上での宿題なんじゃないかと思うぞ…
292 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 21:19:06 ] >>287 の3の倍数でない方がよくわからん。 3で割り切れないじゃダメなの?
293 名前:デフォルトの名無しさん mailto:sage [2006/07/25(火) 21:23:40 ] 5の倍数のとこをよく読んで意図を掴め
294 名前:デフォルトの名無しさん mailto:sage [2006/07/26(水) 02:42:09 ] ARGV[0].to_s.split(//)#!/usr/bin/ruby def sm(s) sm = 0 s.to_s.split(//).each {|e| sm += e.to_i } sm = sm(sm) if(sm >= 10) return sm end f = [true, false, false, true, false, false, true, false, false, true] p f[sm(ARGV[0])]
295 名前:デフォルトの名無しさん mailto:sage [2006/07/26(水) 02:42:50 ] ゴミがついたので貼りなおし #!/usr/bin/ruby def sm(s) sm = 0 s.to_s.split(//).each {|e| sm += e.to_i } sm = sm(sm) if(sm >= 10) return sm end f = [true, false, false, true, false, false, true, false, false, true] p f[sm(ARGV[0])]
296 名前:デフォルトの名無しさん mailto:sage [2006/07/26(水) 02:45:06 ] 文字が入力されてたらアウトだからこうかな #!/usr/bin/ruby def sm(s) sm = 0 s.to_s.split(//).each {|e| sm += e.to_i } sm = sm(sm) if(sm >= 10) return sm end p [false, false, false, true, false, false, true, false, false, true][sm(ARGV[0] )]
297 名前:デフォルトの名無しさん mailto:sage [2006/07/26(水) 18:19:26 ] x = ARGV[0].to_i if ("x" * x).gsub(/xxx/,'') !~ /x/ print "#{x}は3の倍数ではありません。\n" end
298 名前:デフォルトの名無しさん [2006/07/28(金) 00:58:09 ] どうか助けてください。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2473.txt
299 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 01:13:51 ] またお前あるいは同類か どうでもいいがこれまで言われたアドバイス全然生かしてねえな
300 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 01:17:03 ] 授業で習ってない書き方をしたら丸写しバレるだろって話ね(w
301 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 01:39:33 ] こんなに答えの書いてある問題はさすがにないと思うんだが、本当に宿題なのかなあ。
302 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 01:43:07 ] >>301 すまん、こういうパズル未満の難易度の言葉合わせな宿題は出る。 授業聞いてればそれなりに何使うかは思いつくだろ、みたいな。 情報でのプログラムの演習なんてその程度でいいんだよ。
303 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 01:47:16 ] >>298 てゆーかさ、これだとpflagはずっとtrueのままじゃね?
304 名前:デフォルトの名無しさん [2006/07/28(金) 01:53:24 ] >>298 include Math n = ARGV[0].to_i ne = sqrt(n).to_i pflag = true for i in 2..ne break if pflag = n % i == 0 end puts pflag ? 'xx は合成数です' : 'xx は素数です' 俺にはこれが限界 後は誰か頼む
305 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 01:57:00 ] プログラムが書けるより、問題を論理的に解析して解の生成アルゴリズムをひらめくのが重要。 アルゴリズムがひらめけばあとは言語仕様に従って記述すればプログラムに成るし。
306 名前:ど素人 [2006/07/28(金) 02:01:09 ] 参考書にてわからない問題がありました。次のプログラムって日本語でどう説明できますか? ぜひお願いします。 A=new Array(3, 8, 19, 20, 22, 24, 45); i=0; j=A.length-1; a=19; k=Math.floor((i+j)/2); while(i<=j){ if(A[k] == a){ break; } else if(A[k] > a){ j = k - 1; } else{ i = k + 1; } k = Math.floor((i+j)/2); } if(i>j) k=-1; document.write(a," ",k);
307 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 02:06:14 ] >>306 Rubyじゃないじゃん。
308 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 02:15:10 ] javascriptか 言語ですらないな 板違いだ
309 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 02:20:29 ] JavaScriptの言語性を馬鹿にしていると痛い目見るぞ
310 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 02:32:19 ] >>309 馬鹿にされたと思ったあなたは >>306 ですか?
311 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 09:16:50 ] どこをどう読めば人を馬鹿にしてると読めるんだろう
312 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 09:26:32 ] 馬鹿な人がいるようには読める。
313 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 10:32:03 ] 馬鹿な人には読めないマキコ。
314 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 13:19:12 ] どっちにしろ荒らしに反応すな
315 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 16:16:36 ] js=ajax=web2.0
316 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 13:24:41 ] もしかしたらスレ違いかも知れませんが… コマンドラインから テキストファイルを、各行の頭に行番号を付け表示したいのです。 今は Ruby で ruby -e 'a=readlines;for i in 0...a.size;printf"%6d: %s",i+1,a[i];end' textfile としています。 でももう少し短くなる気がするのですが、良いワンライナー無いでしょうか?
317 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 14:03:40 ] ruby -ple 'printf "%6d: ", $.'
318 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 14:07:40 ] ruby -e 'exec("/bin/cat", "-n", *ARGV)'
319 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 14:16:06 ] ruby -e 'ARGF.each{|s|printf "%6d: %s", ARGF.file.lineno, s}'
320 名前:316 mailto:sage [2006/08/26(土) 17:00:01 ] >>317 短ッ!rubyのオプションと特殊変数の事 すっかり忘れてました、感謝です >>318 環境書き忘れてた…今度リナやユニ触る機会があったら catのオプションの事思い出します >>319 ARGF.eachはさっき気付いて i=0;ARGF.each{|s|printf "%6d: %s",i+=1,s} って書いたところでした そういやARGFは独自のメソッド持ってるんでしたね…
321 名前:デフォルトの名無しさん mailto:sage [2006/08/30(水) 11:56:52 ] >>320 > i=0;ARGF.each{|s|printf "%6d: %s",i+=1,s} そういうときはwith_index使えって教わんなかったか? ARGF.each_with_index{|s, i|printf "%6d: %s", i, s}
322 名前:デフォルトの名無しさん [2006/08/31(木) 22:22:15 ] 二進表示をprintf,sprintfを使わず、正の整数を入力して その二進表示を出力するプログラムを作成しよ。 ただし整数から二進表示文字列を作るメソッドi2bを 作成してそれを呼び出すように書くこと。 できるだけ簡単なプログラムでお願いします。 Ruby初心者なのでわからなくて困ってます。
323 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 22:35:13 ] >>322 alias myprintf printf myprintf("%b\n", 10) #=> 1010
324 名前:デフォルトの名無しさん [2006/08/31(木) 22:38:35 ] >>323 ありがとうございます。 でも、せっかく作成していただいたのに申し訳ないのですが printfは使って作成してはいけないんです。
325 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 23:05:24 ] ちっ、バレたかwww
326 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 23:05:42 ] >>322 こんなんじゃダメ? def i2b i return i.to_s(2) end
327 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 23:16:24 ] Fixnum < Integer#to_s --- to_s --- to_s(base) ruby 1.7 feature 整数を 10 進文字列表現に変換します。 ruby 1.7 feature: 引数を指定すれば、それを基数とした文字列表 現に変換します。基数として 2 〜 36 以外を指定した場合は例外 ArgumentError が発生します。 p 10.to_s(2) # => "1010" p 10.to_s(8) # => "12" p 10.to_s(16) # => "a" p 35.to_s(36) # => "z" これか。 これ提出されたら、宿題だした奴もがっくり来るだろうなw
328 名前:デフォルトの名無しさん [2006/08/31(木) 23:28:58 ] >>326 >>327 ありがとうございます。 家のパソコンだとプログラムが実行できないので 明日実行できるパソコンで試してみます。
329 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 23:29:00 ] 超ナイーブに書いてみたが数字がでかいとスタックオーバーフローで死ぬ。 def to_bin(i); q, m = i.divmod(2); q == 0 ? m : to_bin(q).to_s + m.to_s;end
330 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 23:34:27 ] >>328 家のパソコンにもRubyインストールすればいいだろ? よっぽど特殊なOSで無い限り入れられる。
331 名前:デフォルトの名無しさん [2006/08/31(木) 23:42:20 ] 329>> 何回もインストールしてみたのですが 何回挑戦しても失敗してしまいます。
332 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 23:55:11 ] >>331 ttp://rubyforge.org/frs/?group_id=167 ttp://instantrails.rubyforge.org/wiki/wiki.pl どっちでも好きな方を試せ。 使い方は聞くな。
333 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 00:00:08 ] 最近は宿題もWeb2.0とか意識するべきだと思うんだ def i2b(i) require "open-uri" open('google.co.jp/search?q= '+i+'+in+binary').read.scan(/0b([01]+?)</) end puts "正の整数を入れてください" i=STDIN.gets.chomp puts i2b(i)
334 名前:デフォルトの名無しさん [2006/09/01(金) 00:03:39 ] 332>>333 >> ありがとうございます。 助かりました。
335 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 00:13:12 ] web 2.0ってperl廚の妄言のような。 phpとの戦いで死にかけてるから生き残りに必死な様にしか見えない。
336 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 00:17:55 ] >>335 そうか?PHPってgoto導入して死ぬんだろ?
337 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 00:20:51 ] Web2.0は言語を規定しない(そもそも何も規定しないがw) 「なんかWeb通して新感覚にみんなで超便利」というサービスを提供する限り、 サーバー上の言語は本当に何でもよい
338 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 00:43:49 ] 初心者の自分が作った方が参考になるんじゃないのかな? def i2b i b = "" # 2進法文字列の初期化 while i>0 if i%2 == 1 then # 2で割って余りをもとめる b = "1" + b # 1なら文字列の先頭に1を追加 else b = "0" + b # 0なら文字列の先頭に0を追加 end i = i/2 end return b end
339 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 01:06:58 ] def i2b(i) cc = nil b = "" if i = callcc {|cc| i} b = "01"[i % 2] + b cc.call((i / 2).nonzero?) end b end
340 名前:デフォルトの名無しさん [2006/09/01(金) 09:53:17 ] >>338 わかりやすく教えていただいて ありがとうございます。 >>339 ありがとうございました。
341 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 11:03:29 ] >>338 参考にはなるかもしれんが、ためにはならんぞ。
342 名前:デフォルトの名無しさん [2006/09/09(土) 05:00:57 ] Rubyで書かれたうpろだのソースってありますか?
343 名前:デフォルトの名無しさん mailto:sage [2006/09/09(土) 11:31:05 ] ハイレベルな宿題だな
344 名前:デフォルトの名無しさん mailto:sage [2006/09/09(土) 19:34:15 ] >>342 cgi限定? http以外のプロトコル使ってもいいのかな?
345 名前:デフォルトの名無しさん mailto:sage [2006/09/09(土) 21:53:01 ] AppleTalkでお願いします。
346 名前:デフォルトの名無しさん mailto:sage [2006/09/10(日) 18:06:15 ] >>342 ここにあるよ ttp://wirepuller.org/text/ruby/
347 名前:デフォルトの名無しさん [2006/09/11(月) 16:25:43 ] >>346 ありがとうございます。 CGI.rbの仕様で10kB以下だとStringIOで処理されて それ以上のサイズだとTempfileオブジェクトになるようだと 書いてあるのですが 「Tempfileの場合、数MBのファイルをread,writeするのはあれなので」 という部分の意味が良く分かりません 何があれなんでしょうか
348 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 16:43:40 ] やっぱり、なにがあれなんだろう。
349 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 16:47:04 ] 「数MBのファイルを、わざわざ Ruby の read/write を使ってアップローダ側 のディレクトリの特定のファイルにコピーするのは処理にオーバヘッドがかか るので」 てとこじゃね。
350 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 16:51:16 ] ああでもあれか、 FileUtils.cp ってけっきょく ruby レベルで read/write を繰り返しているわけだよな。まあ、当り前だが。 それに、ソースを見てみると file.size の大小で TempFile かどうか判定し てるね。 is_a? とかを使った方がいいんじゃないかなあ。
351 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 22:39:34 ] multipart/form-dataってファイル毎のデータ長送ってこない上に、次にどのファイル(or フォームのクエリ)が来るか分からないんだっけ。 だから便利性を求めたライブラリは、テンポラリファイル作るとか回りくどい仕様になってるんだよね。 こういうインターフェイスにすれば、少し面倒になるけど テンポラリも要らないし融通が利くのに。 cgi = CGI.new cgi.find_file {|info, fp| # フォームから送られた名前で振り分け if info.name == "upload_file" # fpを使ってファイルに保存する処理 else # 普通のクエリとして扱う cgi[info.name] = fp.read end }
352 名前:デフォルトの名無しさん [2006/09/15(金) 02:07:28 ] def seach(dir, key) ↑ dir(ディレクトリ), key(検索キーワード) で指定したディレクトリ下にある合致するファイルを検索して 合致するファイル名の配列を返す関数のコードお願いします。
353 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 02:52:35 ] 自分で出来ました。お騒がせしました。 def seach(dir, key) a = Array.new Dir.foreach(dir){|f| if f[key] a.push(f) end } a end seach(Dir.getwd, ".txt").each{|v| print v + "\n" }
354 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 04:44:56 ] Dir.glob(dir + "/**/" + key) じゃ駄目?
355 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 09:46:53 ] 合致するファイルって名前だけか。
356 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 12:35:15 ] 353.gsub(/serch/, 'search')
357 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 12:36:53 ] 353.gsub(/seach/, 'search')
358 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 13:35:36 ] 353.gsub /(?=。)/, "お" (^ω^ )
359 名前:デフォルトの名無しさん mailto:sage [2006/09/19(火) 05:01:46 ] 数字に変換できなくなるまで、入力を何回でも受け付けるプログラムを 作りました。入力された文字列が数字に正しいものかどうかをチェック するようなフィルタを作ったんですが、あまりスマートに書けませんで した。もう少し、きれいなコードを書く方法をご存知の方、ご意見を下 さい。 #!/usr/bin/ruby def i2b (i) ;return i.to_s(2) ;end #文字列が数値に変換可能かチェックする 0xffはOK 124ffはNG def analyzer (str) #if str can be converted to number => true else => false str.delete!("\n");str.downcase! case str[0..1] when '0x' num = str.to_i(16) if num.to_s(16) != str[2..-1] ;return false ;end when '0b' num = str.to_i(2) if num.to_s(2) != str[2..-1] ;return false ;end
360 名前:デフォルトの名無しさん mailto:sage [2006/09/19(火) 05:03:41 ] when '0d' num = str[2..-1] if num.to_s(10) != str[2..-1] ;return false ;end when '0o' num = str.to_i(8) if num.to_s(8) != str[2..-1] ;return false ;end else if str[0] == '0'[0] and str.length > 1 num = str.to_i(8) if num.to_s(8) != str[1..-1] ;return false ;end elsif str[0] != '0'[0] num = str.to_i(10) if num.to_s(10) != str ;return false ;end end end return true end puts "please input number." loop{ print ">" ;str = gets() if analyzer(str) == false ;puts "#{str} is not number" ;exit ;end num = str.to_i(0) ;puts i2b(num) }
361 名前:デフォルトの名無しさん mailto:age [2006/09/19(火) 13:54:30 ] age
362 名前:デフォルトの名無しさん mailto:sage [2006/09/20(水) 00:09:54 ] def analyzer(str) Integer(str) true rescue ArgumentError false end
363 名前:359 mailto:sage [2006/09/20(水) 01:36:19 ] ありがとうございます。組込み関数のInteger(str)は見落としていました。 str.to_i()が例外を投げない仕様になっていたので困っていた所です。 あとリファレンスを読むのが不十分でした。すいません、今後は気を付けます。