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


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

Ruby 初心者スレッド Part 22



1 名前:730 [2008/09/15(月) 17:25:21 ]
プログラミング言語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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

684 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:12:44 ]
パスは通しておいてね

685 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:12:47 ]
>>682
パス通して#!rubyでいいんじゃね

686 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:13:15 ]
> パスは通しておいてね
Ruby本体をインスコしたディレクトリにパスは通しておいてね

687 名前:675 mailto:sage [2008/10/26(日) 20:20:11 ]
実験は成功した。普通に動いた。
今度は書き込みを実行したとき何も出力されないバグが出てきたが

688 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:34:55 ]
cgi-exception入れとけ
ttp://cgi-exception.rubyforge.org/

689 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:02:28 ]
>>688
ローカルでは動く。リモートでは動かない
cgi-exceptionをrequireしても(もちろんそのファイルごとアップロード済み)
まったくダメ。

690 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:07:27 ]
この分だと向こうで拡張ライブラリの一部が欠損しているというオチの可能性が
高そう。標準添付のライブラリ(cgi,nkf)しか使ってないのに…

691 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:24:01 ]
CGI.unescape(cgi.params['うんこ']) を CGI.unescape(cgi.params['うんこ'][0]) にするとかさ、
NKF,nkf(略) を NKF.nkf(略) にするとかさ、
変数名やGET/POSTパラメタの名前に誤りがないかよく見るとかさ。

692 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:26:19 ]
環境を疑うよりは、まず自分のスクリプトを徹底的に疑うべき
CGI-Exceptionでエラーが出ないなら次はprintfデバッグだ
スクリプト中の適当な位置で、テキストファイルにログを書き出していけば
たいていエラー箇所を特定できる
(スクリプトが全く実行されない場合は、syntax errorかrubyパス絡みの可能性が高い)



693 名前:692 mailto:sage [2008/10/26(日) 21:37:21 ]
あ、重要なこと書き忘れてた

初心者は(初心者じゃなくても一緒だけど)まず最小限のCGIスクリプトから書き始めろ
小さなスクリプトが動いてから、徐々に機能追加していかないと
ただでさえ特定しづらいCGIのエラーが、余計に特定しづらくなる

少なくとも、そこそこの長さがあって環境変数が関わるような掲示板スクリプトを
一気に書き上げるべきではない

694 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:55:34 ]
>>691
それにはすでに気づいて直した。直したが治らない。
>>692
syntax errorがらみはありえない(-cオプションで検査済み)
パスもチェック済み(/usr/local/bin/ruby)
>>693
一応ローカルで動作確認済みなので

695 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:59:42 ]
これはRubyの問題ではない(まだ)

>>694
だからその方法が間違ってると指摘されてるだろう
CGIは「ブラウザでInternalServerErrorが出なくなるまで書き直す」という手法で開発してはいけない
エラーメッセージを確認しない開発手法は糞だ

696 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:02:14 ]
> 一応ローカルで動作確認済みなので
最小限のCGIスクリプトをサーバー上で動かさないとダメ
「環境変数自分で入れて、systemで実行して動いたから」というのではあまり意味がない

697 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:03:11 ]
結論:

 ・ 馬鹿にCGIを渡すな



698 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:04:18 ]
>>695
とりあえずちょいと方法が思い浮かんだので実験してみる

1.まずは単なるテストスクリプトが動くか確かめる
それすら動かないようならとりあえずこの環境での動作はあきらめたほうがよい
2.次にちょっとした工夫のなされたテストスクリプトを使って実験を行う
3.最後にその結果を見て検証する

699 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:04:55 ]
RubyでWin32弄くる場合に必要な知識はRubyそのものではないのと同様に
RubyでCGIやる場合に必要な知識はRubyそのものではないのだな

ライブラリで吸収隠蔽すべきかどうかというのは悩ましいとこだと思う

700 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:05:14 ]
>>696
Apacheでも動作確認済み
1時間以上前に実験した。

701 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:06:11 ]
bbs.cgi:57: cgi.params['content']をCGI.unescapeに渡している
Arrayが渡ったりしてNoMethodError -> あぼーん
bbs:cgi:58: NKF,nkf('-s',content) カンマとドットのtypo

とりあえず2つみっけ
動作確認済みとは笑わせるな
それともHPのzipからまた弄ってるのか?

702 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:09:26 ]
>>700
どう動作確認したのかkwsk
俺の環境でApache立ち上げて試してみたが、普通にアクセスしただけでエラーが出る
具体的には>>701



703 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:09:46 ]
#!/usr/local/bin/ruby -Ks

print "Content-type: text/html\n\n"
print "<html><head><title>テスト</title></head><body><p>テスト</p></body></html>"

このスクリプトすら動作してないのでもはやお手上げ

704 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:10:02 ]
>>699
だねえ

>>700
小出しにするな
自分で話をまとめられないなら諦めれ

705 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:11:17 ]
> 小出しにするな
> 自分で話をまとめられないなら諦めれ

に一票
そして離脱

706 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:17:59 ]
>最小限のCGIスクリプトをサーバー上で動かさないとダメ

に対して

>Apacheでも動作確認済み
>1時間以上前に実験した。
って…明らかに話噛み合ってないな

707 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:19:34 ]
>>703
自分でApache立ち上げて試すときは、そのパスじゃまず起動しないぞ
#!ruby -Ks
にして試してみ。それでも駄目ならお手上げ

708 名前:675 mailto:sage [2008/10/26(日) 22:21:49 ]
>>706
まったくかみ合わない上に、どうやらこちらの問題ではなさそうだと
判明したのでたぶんこれ以上話し合っても結論が出る可能性は0(正確には)

ただ、根本的バグが見つかったのは皆さんのおかげです。
皆さん、ご協力どうもありがとうございました。

709 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:24:45 ]
>>707
もちろんローカルでやるときはそのためのパスにするわけですけどね。

710 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:31:12 ]
>>707
Rubyの絶対パスを指定して動いてるので、いえるのは
もはやここでは対処しようのない問題だということです。
とりあえずテストスクリプトすら動かないということは
他のところに持っていったのでこれ以上の深入りは
避けたいと思います。

711 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:32:04 ]
>>703
ステータスコード書いてないから動かなくて当然
あと\n\nだとサーバが非winのとき困るんじゃないか?

712 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:33:31 ]
てゆーかbbs.cgi自体も割りと…たぶん2、3個の虫食いじゃないよな、
斜め読みした感じでも



713 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:01:23 ]
パーミッションの設定してませんでした><

714 名前:707 mailto:sage [2008/10/26(日) 23:10:02 ]
>>711
あ、そうか
NPH環境だとステータスコード無しでは動かないのか…

715 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:38:16 ]
超遅レスだけど
>>656 >>668 >>669
ここら辺の話って本当なんですか?
Rubyのライブラリのレファレンスでクラスの説明とか見るとよく::が使われてるけど
あれは本当は間違いなんですか?

716 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:48:43 ]
>>656以外の使い方してるやつなんてあんのか
具体的になんてライブラリのリファレンスのどの部分よ

717 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:17:15 ]
>>676
「vlookupのようなもの」ってのが、一体どんなのか分からんのだが
vpreとvpstではさんで比較してるってことは、ソート済みだと仮定してもいいの?
良いなら二分探索が使える

コードについて
・Range#eachがあるんだからeachを使う。Rubyでforは(めったに)使わない
・不要なbreakが見られる
・異常入力に対して99.9とかを返すのは、これでいいの?

718 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:26:18 ]
>715
マニュアル内でのその記述はクラスの親子関係じゃなくて、大抵モジュールの定数のハズ。

719 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:33:20 ]
例えば、Objectクラス、IOクラス、Fileクラス、File::Statクラスの関係は

IO と File::Stat の直接の親は Object クラス
File は IO の子クラス
File::Stat は File の子クラスではない
File::Stat は File 内のクラス

Rubyのコードで書くとこんな関係。

class Object
end
class IO < Object
end
class File < IO
  class Stat
  end
end

720 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:34:23 ]
言うなれば :: でクラス同士を繋いでいたら、それは親子じゃなくて入れ子の関係ってところか。

721 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:47:29 ]
Railsの質問はここでいいんでしょうっか?
Web画面を共有出来るアプリが作りたいので
実験で5分で動くshootingstar使ったchatのテストアプリみたいなのを
動かしたんですけど自分でブラウザを更新しないと表示画面が更新されません。
バージョンは、shooting_star (3.2.7)とrailsは2.1.2でOSはUbuntuなんですけど。。

722 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 02:10:00 ]
WebProg板にRailsスレあるよ

【Ruby】Ruby on Rails Part6
pc11.2ch.net/test/read.cgi/php/1224838013/



723 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 05:38:49 ]
>>676
>>677-678の気になる点。

1.vの1列目の値が小さい順で並んでいないと動かない
 以後は1列目は昇順ソート済みであるものとする

2.vs == v[0][0], vs < v[1][0] なら (vs>vpre) && (vs<=vpst) は常に偽
 forの最終ループでvpstがvの範囲外となりエラーを起こす
 vpst = v[v.size][0] => vpst = nil[0]

3.VLOOKUPと検索の仕様が違う
 VLOOKUPは完全一致検索または検索値を超えない最大値の検索
 こちらは四捨五入もどきというか、小さい側優先の再近接値検索?
 (ちなみに四捨五入は中間値切り上げ丸め、つまり大きい側優先)

4.VLOOKUPと違って返値の列が2列目固定
 それならMATCH関数にした方がまだ使いやすくない?

724 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 05:45:45 ]
>>677を問題点もそのままで、ちょっとRubyぽく書き直してみた

def Vlookup(vs,v)
 vx = vs.to_f
 return -99.9 if vx < v[0][0]
 return 99.9 if vx > v[-1][0]

 v.each_cons(2) do |vpre, vpst|
  if vx>vpre[0] && vx<=vpst[0] # *1
   return vx-vpre[0] <= vpst[0]-vx ? vpre[1] : vpst[1] # *2
  end
 end
 nil[0] # *3
end

*1 検索対象が昇順なら"vx>vpre[0] && " 部分は不要
  というか、ここを削れば問題点2は解消する
*2 3項演算子といってexcelのif関数のようなもの (cond ? retA : retB)
*3 問題点2のエラーを発生させるためのもの。
  *1の対策を実施すればこの行には到達しないので削除してよし

高速化とか一切していないので悪しからず。
>>717の言うとおり、二分検索するのがいいんでない。
適当にコード見て書いただけなんで、バグとか指摘の間違いとかあるやも。

725 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 05:51:25 ]
>>711
ほぼ参考書のままです。
とりあえずステータスコードをつけて動くか確かめてみます

726 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 05:59:36 ]
結局Content-typeの改行コードを\r\nにしたら動きました

727 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 06:22:47 ]
>>726
それは誤りだ

728 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 07:26:44 ]
>>727
一応めでたく完成して新しい追加機能2つ(日付表示・連投規制)を
付け加えました。たぶんこれで実運用上、書き込みがぶつからなければ
なんとかなると思います。タグ検索機能はなんか変ですが
おいおい何とかします。

729 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 08:20:38 ]
>>727
誤りではないだろう、HTTPの標準改行コードは\r\nだ
出力先がバイナリモードでさえあれば問題はない

730 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 21:40:37 ]
>>716 >>718 >>719
Java出身のruby初心者だったものでクラスライブラリはクラスの継承で繋がってると思い込んでました。
なるほど、rubyはモジュールや入れ子のクラスを多用するんですね。
勉強になりました。ありがとうございました。

731 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:15:18 ]
Javaだってよく使うだろう。

732 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:25:44 ]
RubyやPerlって一体なにに使う言語なんですか?

Htmlに組み込む言語という解釈でいいんですか?



733 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:41:28 ]
>>732
だいたい何にでも使う

734 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 23:02:23 ]
テキスト処理をするのに使う

テキスト処理と聞いて何も思いつかない場合はまだスクリプト言語に用がないということなので
PerlやRubyのことはすっぱり忘れて別なことを楽しみましょう

735 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 00:49:43 ]
rubyはrailsのために使います。
フリーだと現時点で一番効率よく稼げるのrailsです。
3人月の案件で700は固いから月給200万ですよ。

736 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:05:00 ]
日本語でおk

737 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 19:13:55 ]
>>732
>Htmlに組み込む言語

それはPHP

738 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:26:14 ]
>>737
HTMLがPHPになるんですか?
PHPがHTMLになるんですか?
組み込むってそういうことですよね?

739 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:54:46 ]
画面分割はどうやればいいんですか?
自動的に隠したり、分割を×ボタンで消したりする機能のパックになったコントロールとかあるんですか?

740 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:57:37 ]
>>739
Webクライアントの仕組みについて理解してから来なさい。


741 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:58:32 ]
>>739
えーと…
Rubyの仕事ではないので、GUIに何を使ってるか調べて、それに関するスレなりサイトなりに行くといい

742 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 21:18:58 ]
@蠣←これを右クリでコピーする
Aスタート→すべてのプログラム→アクセサリ→メモ帳を起動
B編集→貼り付け
C編集→すべて選択
D変換キーを押す



743 名前:676 mailto:sage [2008/10/28(火) 23:44:49 ]
>>717
説明不足でした。私がやりたいのは、以下のものです。
・1列目にソート済みの数値が入っている
・2列目には1列目の各行に対応する数値が入っている
・ある数値(入力値)が来た時に1列目の中から最も近い値を探し、それに対応する2列目の値を返す
・もし入力値が1列目の数値の上下限から外れていたら、それぞれ99.9か-99.9を返す
です。

>・Range#eachがあるんだからeachを使う。Rubyでforは(めったに)使わない
始めたばかりなもので。。。今後はeachを使います。(ちなみに速度に差はありますか?)

>・不要なbreakが見られる
入力値が上下限から外れていたら、関数の中のif文より後のfor文にいれたくなかったので使いました。これを見てからelseに書き換えました。
(一般的にbreakは多用しない方がよいのですか?)

>・異常入力に対して99.9とかを返すのは、これでいいの?
異常を示す文字列にしようかとしましたが、今、私がやりたいことにおいて99.9で十分なのでこうしました。


744 名前:676 mailto:sage [2008/10/28(火) 23:45:30 ]
>>723
>1.
書き忘れていましたが、ご指摘のとおりソート済みを仮定しています。

>2.
ちょうどそのエラーに出くわしていたところでした。。。

>3.
事前に一応調べてはみたのですが、ちゃんと理解できていなかったです。
また数学がよくわかっていないため、2の事態が発生しました。

>4.
MATCH関数を知らなかったので調べてみましたが、どのように適用すればよいかわかりませんでした。もう少し詳しく教えていただけないでしょうか。

>>724
知らない事がありすぎるのですが、みやすくなったので使ってみたいと思います。
速くなるのも教えていただけると助かります。。。

745 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 05:33:04 ]
forは内部的にeachを呼び出すそうだから、速度差など無いに等しい。
どうしても気になるなら一億回くらい空ループ回して計ってみるといい。

まぁ、仮に10倍の速度差があったとしても、今は気にする必要ない。
プログラムの高速化はまず何よりもアルゴリズムが最優先。
小手先の最適化に手をつけるのはその後だね。


breakは単に使い方が悪い。
>>677の最初の2つは先にreturnするので、絶対に到達しない。
最後のはbreak後returnしかしていないので、returnで置き換え可能。
breakせずに抜けるパターンの場合、必ず範囲外アクセスで落ちる。
つまりすべての箇所で何の役にも立っていないというわけ。


異常入力にマジックナンバーを返すのもありだけど、発生頻度が低く
検査箇所が多いようなら例外(Exception)を発生させたほうがいいよ。
コードの見通しがまるで違ってくるから。


VLOOKUPは検査値に対応する行と指定した列が交差するセルの値を
返すのに対し、MATCHは検査値に対応する値の位置を返す。
VLOOKUPでは検索範囲が左端の列で、かつ対応する値の列の高さと
縦位置が完全に一致しなければいけない。

MATCHとINDEXまたはOFFSETとの組み合わせなら、検査列に対応
する値の列が左にあってもよいし、縦にずれていてもよいし、列でなく
行(対応する値が横に並ぶ)でもよい。
その気になれば対応する値をnマスおきに飛び飛びにだってできる。
それに比べると列指定不可のVLOOKUPなんてあまりに不便すぎる。

746 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 05:37:23 ]
MATCH関数もどき。 返値は0を起点とする点が異なる。
直近値検索方法は>>677と同じ。

def match_liner(val, array) # >>677と同等
 array[0...-1].each_index do |i|
  if val <= array[i+1]
   return val-array[i] <= array[i+1]-val ? i : i+1
  end
 end
 array.size - 1
end

def match_recursive(val, array)
 case array.size
 when 0
  nil
 when 1
  0
 when 2
  val-array[0] <= array[1]-val ? 0 : 1
 else # ↑↓ 不等号に注意のこと
  i = array.size / 2
  val < array[i] ?
   match_recursive(val,array[0..i]) : match_recursive(val,array[i..-1]) + i
 end
end

747 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 05:40:31 ]
ベンチマーク

srand 1.0 * 2008/10/29 * 3*14 * 0xdeadbeaf # 乱数の種を設定
lookup = Array.new(100000){ rand }.sort!
data = Array.new(2000) { rand }

Benchmark.bm do |x|
 x.report { data.each do |v| match_liner v, lookup end }
 x.report { data.each do |v| match_recursive v, lookup end }
 x.report { data.each do |v| match_loop v, lookup end }
end
   user   system   total    real
221.528000  0.040000 221.568000 (237.392000) # 線形検索
 0.501000  0.000000  0.501000 ( 0.550000) # 二分検索(再帰)
 0.140000  0.000000  0.140000 ( 0.141000) # 二分検索(ループ)

748 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 05:57:19 ]
>>746の二分検索は再帰で実装してあるけど、ループに展開すると
もうちょっと高速化できる。(ベンチ中のmatch_loopがそれ)
どうやって展開するのかは自分で考えてみてほしい。
うまく書ければ20行かそこらで済むはず。


ついでにおまけ。 (>>747続き、 match_なんたらはmatchと定義しておく)
def vlookup(val, range, column) # 指定列は0を起点とする
 val = val.to_f
 if val < range.first[0] or val > range.last[0]
  raise ArgumentError, "value out of range"
 end
 row = match val, range.map(&:first)
 # range[row][column] と同じだが、範囲外では例外を起こす。
 range[row].fetch column
end

pairs = lookup.zip(Array.new(lookup.size) { rand 100000 })
data.take(10).each do |v|
 puts vlookup(v, pairs, 1)
end

749 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 07:00:09 ]
全角空白厨は何を言っても説得力がない

750 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 09:42:12 ]
そこが気になるというのは、もしやコードをテストしてみようとしたわけか?
朝早くから実に殊勝な心がけだ。 大変すばらしい。

それだけ向上心があるなら、更なる技術向上のための課題として、全角半角の
変換フィルタでもチャレンジしていただきたい。 (もちろんワンライナーな)

751 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:08:41 ]
>>750
コードは全く読んでない
全角空白かどうかだけをブラウザ上でチェックした
それで充分

752 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:21:12 ]
>>749,751
俺もコード張るときはwebブラウザとかJaneのこと考えて
全角に変換してから張るんだけど何かまずいの?



753 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:21:57 ]
書き込む際に見やすいように、という理由でいわゆる全角スペースを使うのは
割とよくあることだと思うんだが、それをどういう切り口で転がすと「厨」になるんだろ。
それこそ「説得力が無い」よ。

754 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:26:48 ]
全角空白なんて危険なもの使わなくたって &nbsp; があるだろう
初心者がコピペで実行する初心者スレで全角空白みたいなのをコードに混ぜるのはあまりいい気はしない

arr.each do |e|
  puts e
end

755 名前:752 mailto:sage [2008/10/29(水) 10:31:22 ]
>>754
ああなるほどな、サンクス

756 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:34:41 ]
>>754
本人?

よりよい方法がある、という話ならわかるけど、そんなことで厨呼ばわりした上で、
コードなんか見なくても十分とか言ってのけたわけ?
「あまりいい気はしない」とか、なんか急にトーン下がってるけど。

757 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:40:23 ]
>>756
いや全然

検証のために irb にコピペして全角空白でエラーになってピキッとなったことはないか?
せっかく書き込み前に置換する手間を割いてるのに置換先が全角空白だというのはバカっぽいだろ
なんでわざわざ実行不可能なコードにさせるんだよ

758 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:46:17 ]
他人が実行するかもしれないことに気が回らない俺スゴイ系の人は
2chでは厨呼ばわりされても仕方ないかな、という気はちょっとだけする


759 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:01:39 ]
だが、ム板では普通に見かけるけどな。
インデントを全角空白で、ってのは。

760 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:24:51 ]
ソース見れば普通に半角空白残ってるんだお

761 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:35:27 ]
置換の手間は割けなくても長文粘着はありなんだよねこういう人ってw

762 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:47:31 ]
CSV::Writer.generateを使ってCSV出力をしているようなんですが
出力されたCSVを見ると
AAA,BBB,CCC,DDD
と出力されており1データに改行が含まれている場合に正常に解析できなくなってます。
AAA,BBB,CCC,DD
D
本来ですと
"AAA","BBB","CCC","DD
D"
のようにデータが""で囲われてほしいのですが何か方法は無いでしょうか?
ソースは↓な感じですです。
 def issues_to_csv(issues, project = nil)
  ic = Iconv.new(l(:general_csv_encoding), 'UTF-8')  
  export = StringIO.new
  CSV::Writer.generate(export, l(:general_csv_separator)) do |csv|
   # csv header fields
   headers = [ "#",
         l(:my_data1),
         l(:my_data2),
         l(:my_data3),
         ]
   csv << headers.collect {|c| begin; ic.iconv(c.to_s); rescue; c.to_s; end }
  end
  export.rewind
  export
 end



763 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:55:24 ]

 投稿者1人が半角スペースなコードをエディタに書く
          ↓
 書き込み時に全角スペースに置換する
          ↓
 参照者複数人が各々のコピペ時に全角スペースを置換する
          ↓
 エディタに半角スペースなコードができる


まあ、プロトコル的に無駄ではあるな
投稿者が半角スペースを&nbsp;に置換してくれさえすれば参照者はコピペだけでおkなのに

2chブラウザによっては半角スペースを投稿時に&nbsp;に変換してくれるものもあるけどな
navi2ch使いあたりはこのへん全く意識しないはず
というか、全角スペース混じってると範囲実行のM-|ができなくてイラつく(w
いちいち

1 [1,2,3].each do |e|
2 puts e
3 end

と行番号つきで書かれるくらいムカつく

764 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 12:05:00 ]
Jane Doe Styleで >>754 をコピーすると
半角スペースの箇所はクリップボードには &#160 (&#は半角)で保存されるぞ

アプリケーション( 2ch 含む)によって文字参照の扱いなんてまちまちなんだから
文字参照に変換してから貼れって主張にはあまり魅力を感じないんだよな

765 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 12:09:49 ]
コピペ内容に関して意識してる2chブラウザはそう多くないよね
どうレンダリングするかとかはRFCに記述ないんだっけ?

766 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 13:14:44 ]
なにやらえらい騒ぎになってしまったな。

全角半角が問題になるのはコピペする人間だけなのだが、実際それをする人間がどれ
ほどいるのか。
他の板ならともかく、いかに初心者スレとはいえここはム板なんだから、一括置換な
んぞ5秒でこなす
くらいの能力は期待できないものなのか。
学校のセンセじゃあるまいし、その程度は勘弁していただきたい。

まぁ、全角を使っているのは書き込みログが読みにくくなるから、というしょーもな
い理由なので、
こちらも置換すれば済む話ではあるし、専ブラで対処できるものなら導入を検討する
よ。

と、ここで新着見たら、そんな簡単な話しでもないのか。
確かに>>764は以前くらったことがあるな。
どうしたもんかね。

767 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 13:17:44 ]
ノンブレイカブルスペースは \x20 とは別物。常識

768 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 16:32:30 ]
おれも &nbsp; つかってたけど、>>764と同じことがあって、
結局全角スペースのほうが害がすくないと判断してる。

>>767
そうなんだよね。しかも&nbsp;が半角スペースにならない環境だと、
置換が全角スペースより面倒なんだよな。

まあ2chの仕様がクソということで。


769 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 16:33:42 ]
>>762
CSVやめて、FasterCSVを使ってみたらどうでしょうか。
「ruby fastercsv」でぐぐってみてください。

770 名前:デフォルトの名無しさん [2008/10/29(水) 17:08:50 ]
>>769
実は先ほどソースはredmineのものなんです
ファイル名app\helpers\issues_helper.rb
なので簡単にFasterCSVに置き換えて大丈夫なものなのか判断しにくいんです。
変更は簡単ですかね?

771 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:43:51 ]
>>762
CSV::Writer ならエスケープが必要なフィールドだけエスケープされるので、
以下のようになるはずだけど。

AAA,BBB,CCC,"DD
D"

DD\nDだけじゃなくてAAAとかもクォートして欲しいってこと?

772 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 13:30:47 ]
>749-768
先頭の空白に関しては、まだRubyは良いほうでしょ
Pythonなんて先頭の空白が纏められたら話にならんかと



773 名前:デフォルトの名無しさん [2008/10/30(木) 16:17:11 ]
while文の中にif文入れられる?

774 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 16:22:19 ]
a = [1, 2, 3]
while if n = a.shift
    n
   else
    false
   end
 p n
end

# => 1
# => 2
# => 3

775 名前:デフォルトの名無しさん [2008/10/30(木) 18:36:04 ]
msg = "(1+2+3)*2/3" などのように数式の入った変数を
プログラムの構文として処理することは可能でしょうか?
  val = 構文評価(msg)
のようなイメージで、
任意の数式をRubyで処理することを期待してるのですが

776 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 18:53:18 ]
>>775
手っ取り早いのはeval。
でも数式に限らずなんでも実行できてしまうから
四則演算だけ処理したいならraccとそのサンプルのcalc.yあたりとか。

777 名前:775 mailto:sage [2008/10/30(木) 19:31:22 ]
>>776
ありがとうございます。助かりました。

778 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 22:51:35 ]
>>776
> 四則演算だけ処理したいならraccとそのサンプルのcalc.yあたりとか。

正規表現で入力を検査してokならevalに渡す方が楽でない?

779 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 22:58:30 ]
そのへんは入力元がどのくらい信用できてどのくらい調教可能かによるな

780 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 23:07:18 ]
信用できないから検査する。
何によるかというならどれくらい受理する式の文法を限定できるかだろう。
君、バカでしょ。

781 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 23:18:40 ]
検査が必要かどうかという話だろ
自分で電卓代わりに使いたいだけなら入力検査は不要

こんなの完璧にやるか全くやらないかの2択なんだから信用度は重要
2//3 で エラー吐いて落ちるのは困るだろうし
1 2 + 3 で エラー吐いて落ちるのは困るだろうし
1/3*3 で 0 が返るのも困るだろうし
(1..2) で Range オブジェクトが返るのも困るだろう

782 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 00:02:44 ]
>>781
君はバカさ加減の露出癖でもあるのかね。

> こんなの完璧にやるか全くやらないかの2択なんだから信用度は重要

不測の動作をさせないことが保証できればいいんだよ。
エラーはevalのすぐ外で捕捉すりゃいい話。

> (1..2) で Range オブジェクトが返るのも困るだろう

そうならないように検査するんだろうが。



783 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 00:03:55 ]
じゃあraccでやれよ

784 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 00:06:22 ]
は?






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

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

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