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


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

RUBYの宿題教えてください。



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()が例外を投げない仕様になっていたので困っていた所です。
あとリファレンスを読むのが不十分でした。すいません、今後は気を付けます。






[ 続きを読む ] / [ 携帯版 ]

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

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