Ruby 初心者スレッド ..
653:デフォルトの名無しさん
09/01/21 14:29:03
>>652
i see.
654:デフォルトの名無しさん
09/01/21 18:46:15
データが文字列の内容に数字をふったものを対象にして
数字でソートする場合どんな感じでやればいいでしょうか。
文字数字のままやると小さい数字が後にきたりして、ソートがおかしくなるのですが。
655:デフォルトの名無しさん
09/01/21 19:01:10
全部同じ桁にする
656:デフォルトの名無しさん
09/01/21 19:02:29
sort メソッドの説明は気の利かない書き方をしてるからね
あれはブロックの結果がどうなるかでソートされるんだ
irb> puts ['30歳', '2歳', '10歳'].sort
10歳
2歳
30歳
irb> ['30歳', '2歳', '10歳'].each{|a| puts a.scan(/\d+/)[0].to_i}
30歳
2歳
10歳
irb> puts ['30歳', '2歳', '10歳'].sort_by{|a| a.scan(/\d+/)[0].to_i}
2歳
10歳
30歳
657:デフォルトの名無しさん
09/01/21 19:05:00
>>654
数字を振るというのが文字列と別枠なら
hash = {3=>"c",2=>"b",1=>"a"}
hash.sort.map{|v| v.last}
658:デフォルトの名無しさん
09/01/21 19:12:11
irb> ['30歳', '2歳', '10歳'].each{|a| puts a.scan(/\d+/)[0].to_i}
30歳
2歳
10歳
659:デフォルトの名無しさん
09/01/21 19:25:19
>>658
あ、すまんね
そこのへんだけ直前に書き換えたんだ
案の定間違ってるな
irb> ['30歳', '2歳', '10歳'].each{|a| p a.scan(/\d+/)[0].to_i}
30
2
10
ってことで、ブロック内で数字部分を抜き出して整数にしてるんだということがわかってもらえればよかった
それぞれの要素に対して「数字部分を抜き出して整数にしたもの」で比較してソートすれば、おそらくうまくいく
660:デフォルトの名無しさん
09/01/22 01:31:38
>>600
とりあえずC#(.NET3.5)では
int j = 1;
Thread t = new Thread(new ThreadStart(() => {
while (j < 100) {
Thread.Sleep(1000);
Console.WriteLine(j);
j += 1;
}
}));
t.Start();
while (j < 100) {
String i = Console.ReadLine();
j += Convert.ToInt32(i);
}
これが動いたから、IronRubyなら動くかもよw
661:デフォルトの名無しさん
09/01/22 04:51:23
>>659
そこまで書いたなら最後まで書けばいいのに。
['30歳', '2歳', '10歳'].sort_by {|a| a.scan(/¥d+/)[0].to_i }
または
['30歳', '2歳', '10歳'].sort_by {|a| a =~ /¥d+/; $&.to_i }
662:デフォルトの名無しさん
09/01/22 14:26:38
['30歳', '2歳', '10歳'].sort_by {|a| a[/\d+/].to_i }
663:デフォルトの名無しさん
09/01/22 14:40:21
いや短くすることに意味はないから
そんなこと言ったら
%w.30歳 2歳 10歳..sort_by{|l|l.to_i}
が標準で最短だぞ
664:デフォルトの名無しさん
09/01/22 14:45:30
たぶん単位とかだと思うけど、そういうのデータの中に含めるのってどうなんだろう
「1.5メートル」より「90センチ」の方が大きくなったりするんだろ?
さすがに「2メートル」と「5キロ」とかは混在していないと思うが
665:デフォルトの名無しさん
09/01/22 14:51:57
生のデータを生のまま極力取り込んでおきたいという需要はそこそこあると思うよ
数値だけとかに正規化しとけというのはいやもう全くその通りではあるんだが
666:デフォルトの名無しさん
09/01/22 14:58:56
>>665
そういうのはラッパクラス作って都合の良い方でアクセスできるようにしとく
667:デフォルトの名無しさん
09/01/22 15:11:59
>>664-665の見てる世界と>>666の見てる世界は違うな
668:デフォルトの名無しさん
09/01/22 15:20:43
データがアクセスされるのは一つの言語からだけとは限らないぞ
3つ言語使ってたら全部の言語でラッパークラスを実装するのか?
669:デフォルトの名無しさん
09/01/22 15:32:09
それはまんどくさい(´・ω・`)
670:デフォルトの名無しさん
09/01/22 15:34:58
>>668
1つの言語からだけのことのほうが圧倒的に多いと思うがどうかね
君は移植性の高いC言語を使うべきだと思うよ
671:デフォルトの名無しさん
09/01/22 15:46:13
>君は移植性の高いC言語を使うべきだと思うよ
うむ
672:デフォルトの名無しさん
09/01/22 16:10:58
データきたないと前の担当者に殺意を抱いたりするよなw
673:デフォルトの名無しさん
09/01/22 16:24:45
>>667
全くだ
汎用DBソフトに格納される業務データしか扱ったことがないのだろう
674:デフォルトの名無しさん
09/01/22 16:33:35
ほんとにどうでもいい話なんだけど
>>673
そういう人って稀にいるよね
業務でしかプログラミングに関わってない人
それはそれで仕事として効率もいいし好ましいことも多いが、話が全然合わんので困る
675:デフォルトの名無しさん
09/01/22 20:13:33
仕事でやっててプログラミングを好きな人はまだ良いが
好きでもなく仕事だからってやってる奴のソースはだいたい汚い。
そういう時は殺意抱くなwww
676:デフォルトの名無しさん
09/01/23 01:33:48
>>664
>たぶん単位とかだと思うけど、そういうのデータの中に含めるのってどうなんだろう
Measureというライブラリを使うと単位系を操ることができる
URLリンク(d.hatena.ne.jp)
677:デフォルトの名無しさん
09/01/23 02:30:36
>>675
たしかに
a1=1
a2=2
a3=3
...
と延々と書かれていたことがある
配列+ループにするとか考えろと思ったが
行数で単価計算されるなら上の方が正解なのかも知れない
678:デフォルトの名無しさん
09/01/23 03:00:00
配列として保持するコストを嫌ったのかもしれない
679:デフォルトの名無しさん
09/01/23 03:09:40
世の中には虚しいこともあるんだね
680:デフォルトの名無しさん
09/01/23 03:57:53
>>678がたぶん正解だと思う
行数稼ぎか配列利用法が理解できなかった(または利用禁止)な可能性も充分あるが
681:デフォルトの名無しさん
09/01/23 04:01:09
つか、言語と実行環境に強く依存するな
配列にしてしまうと保持と参照コストが妙に高くなる言語というのはなんかどっかにあったはず
682:デフォルトの名無しさん
09/01/23 04:39:18
array=[a,b2c,d2e,f,g]を[a,[b,c],[d,e],f,g]に分解するにはどうすればいいですか?
683:デフォルトの名無しさん
09/01/23 04:46:41
>>682
標準的な方法はないから、まあ好きにやれ
要素ごとに正規表現で分割して自力で配列を作るしかないな
684:デフォルトの名無しさん
09/01/23 04:55:12
>>682
split("2")とpushでOKじゃね?
685:デフォルトの名無しさん
09/01/23 05:18:20
[a,b2c,d2e,f,g]
は
['a','b2c','d2e','f','g']
という意味なのか?
686:デフォルトの名無しさん
09/01/23 05:23:33
>>685
この文脈ではそう考えるのが自然じゃね
配列の要素が参照している変数名の英字部分を
ネストした配列の要素の参照の変数名に反映したいという込み入った希望かもしれんが
687:デフォルトの名無しさん
09/01/23 05:34:30
こうですか?わかりません
>> ['a','b2c','d2e','f','g'].map{ |e| /2/ =~ e ? e.split(/2/) : e }
=> ["a", ["b", "c"], ["d", "e"], "f", "g"]
688:デフォルトの名無しさん
09/01/23 06:33:01
EOFにマッチする正規表現、または"末尾"がEOFであることを手短にチェックする方法ないですかね
キー1: 値1
キー2: 値2[EOF]
689:227
09/01/23 07:22:40
昔のことになりますが、カテゴリ取得に関して質問したものです。
ログを見ていたら同じようなことが質問されていたのでまた、質問をさせていただきます。
search('a').select{|a| /cat_/ =~ a['href']}.map{|a| a.inner_text}
カテゴリが一つだけ指定されている場合は上のものでうまく言っていたのですが、
一つの記事で二つ以上指定されている場合にうまくいきません。
理想としてはcategory=["A",["A","B"],"A","B",["A","B","C"]]
のようにしたいのですが
690:デフォルトの名無しさん
09/01/23 07:50:36
rubyってhtmlspecialcharsあるの?
691:デフォルトの名無しさん
09/01/23 07:52:37
>>689
もっと具体的なhtmlの例を出してくれないと答えられないような…
692:デフォルトの名無しさん
09/01/23 07:58:05
>>689
selectってなんだっけ、findだっけfind_allだっけ
…allのほうか
カテゴリってのは一番下にあるやつだな、他のブログではタグとか言われてるものだ
>>246では例が悪いので、適当な大手のアルファルアモザイク例に出すぞ
URLリンク(alfalfa.livedoor.biz)
これから
[
["ネット・PC・技術", "短レス"],
["ネット・PC・技術", "短レス"],
["ネット・PC・技術", "知識・薀蓄"],
…
]
という配列を抽出したいという要望でいいか?
「記事単位でsearchかけてから、それの返り値のHpricot::Elemなどに対してmapを使う」が答
なにをどうやって記事単位とみなすかはそのサイトのHTML構造読め
693:デフォルトの名無しさん
09/01/23 08:11:05
>>690
あるよ
694:デフォルトの名無しさん
09/01/23 08:17:26
>>691
>>692さんが例に上げたサイトのようなものです。
>>692さんが書かれたような配列です。記事単位はデザインの雛形によって変わってくるので調査済みです。
今移動中なんで確認できませんが,
記事単位.search('a').select{|a| /cat_/ =~a['href']}.map{|a|a.inner_text}みたいなものですか?
695:デフォルトの名無しさん
09/01/23 08:17:35
require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'kconv'
doc = Hpricot.parse(URI.parse('URLリンク(blog.livedoor.jp)').read)
result = doc.search('div.hentry').map{|div|
[div.at('h3.title%20entry-title').inner_text,
div.search('a').find_all{|e| /archives\/cat_/ =~ e['href']}.map{|e| e.inner_text}]
}
result.each do |post|
puts "#{post[0]}[#{post[1..-1].join(', ')}]".toutf8 # 画面表示のエンコードに合わせること
end
けっか:
FF11、バグを利用してアイテムを複製した500人の廃人を強制退会処分に
[びっくりニュース, ゲーム]
次期ロシア正教会総主教のネット人気投票、日本人大主教がダントツ1位に…「日本アニメのファンが原因」とロシアマスコミ
[びっくりニュース, 国際]
「孫悟空」の起源は韓国のサルだった…韓国教授が主張
[痛いニュース, 韓国・北朝鮮]
パッケージに萌えキャラが描かれた「ツンデレカレー」「萌カレー」他が馬鹿売れ
[おバカなニュース, 食生活]
「若者、結婚が遅い…どんな恋愛してるのか」「日本はなぜ子供産むのが難しいのか」など、小渕大臣が少子化分析チーム
[痛いニュース, 政治・経済]
…
タグのネスト云々はこういうことをやりたいのだと推測
タグが1個しかない場合も要素1の配列になるので注意
696:デフォルトの名無しさん
09/01/23 08:23:21
>>695
ありがとうございます。すぐに確認できませんが,帰宅したら確認します!
697:デフォルトの名無しさん
09/01/23 08:27:31
スクリプト作るの早いな
698:デフォルトの名無しさん
09/01/23 08:30:58
>>697
過去に似たようなの作った経験があれば見当つくから
あとはサイトの特徴調べるだけでこんなもんよ
早い人はもっと早いはず
というか、このスクリプトは見たままの処理しかしてないので泣きたくなるほど遅い
なんかスゴい人がXPathとか駆使して爆速に仕上げてくれることを期待
699:デフォルトの名無しさん
09/01/23 08:32:08
>>693
名前は?
700:デフォルトの名無しさん
09/01/23 08:42:52
>>699
def CGI::escapeHTML(string)
string.gsub(/&/n, '&').gsub(/\"/n, '"').gsub(/>/n, '>').gsub(/</n, '<')
end
ということで CGI::escapeHTML
require 'cgi' して使ってね
シングルクオートをエスケープすることはありません
701:デフォルトの名無しさん
09/01/23 08:50:58
今なら cgialt/util を薦めた方が良いのでは
702:デフォルトの名無しさん
09/01/23 08:52:46
標準でなくていいのならたくさんあるよそりゃ
4つgsubするだけだから自前でやれというのもありだろうし
cgiライブラリがCGI作成に最早使われてないのは公然の暗黙
703:デフォルトの名無しさん
09/01/23 08:56:32
最近は文字列エスケープユーティリティと化してるな
704:デフォルトの名無しさん
09/01/23 09:39:17
ここでスモーカー抜けるのは痛いな
705:704
09/01/23 09:43:02
ごめんなさい
706:デフォルトの名無しさん
09/01/23 10:01:47
>>699
URLリンク(www.ruby-lang.org)
結構いろいろそろってる
707:デフォルトの名無しさん
09/01/23 10:03:15
揃ってるも何も(PHPの)htmlspecialcharsの動作をするのは CGI.escapeHTML だけだぞ
708:デフォルトの名無しさん
09/01/23 10:12:43
>>707
全然知らんようだからほかにもいろいろあるって紹介したのだが
URLエンコードするのありますか?とか追加質問されたらバカバカしいだろ
リロードしてなかったから>>700は気づかなかった
709:デフォルトの名無しさん
09/01/23 10:18:11
Ruby1.9が入っていないと端末に「アナログ」と表示する.bashrc - aikeの日記
URLリンク(d.hatena.ne.jp)
710:デフォルトの名無しさん
09/01/23 10:24:50
Rails1.2.6を使って作成しているのですが、selectを動的に変化させようとすると ActionView::TemplateError (undefined method `number_select' for #<HashWithIndifferentAccess:0xb722adf0>
というのが出てしまいます。回避策があればご教授ください。
<やっていること>
index.rhtmlの中を次のようにしています。
<div id="all">
<table>
<tr><td id="first"><%= render :partial => 'first_info' %></td id="first"></tr>
<tr><td id="second"><%= render :partial => 'second_info' %></td id="second"></tr>
<tr><td id="third"><%= render :partial => 'third_info' %></td id="third"></tr>
</table>
</div id="all">
_first_info.rhtmlには次のような selectがあります。
<%= select(:first_info, :number_select, @numbers, {:selected => @select_value}, {:onchange => remote_function(:submit => :first_info, :url => { :action => :change_select }}) %>
@numbersはコントローラー側で @numbers = ActiveSupport::OrderedHash.new してデータベースから値を格納しています。
_second_info.rhtml のテキストボックスに値を入力し、ボタンを押したら、その値をDBに登録し、_first_info.rhtmlの selectのリストに入力値を追加しようと以下のように処理しています。
1.コントローラーの_second_info.rhtmlから次の関数が呼ばれる
def second
データベースへ登録
@numbers = ActiveSupport::OrderedHash.new
@numbers へデータベースの値を格納
@select_value = 1
end
2. second.rjsは _first_info.rhtmlを更新するため、次のようになっている
page[:first_info].replace_html :partial => 'first_info'
711:デフォルトの名無しさん
09/01/23 10:28:02
>>710
【Ruby】Ruby on Rails Part6
スレリンク(php板)
712:デフォルトの名無しさん
09/01/23 10:42:15
instance_variable_set の 変数名に指定する文字列って、ユーザの入力そのまま渡しても大丈夫?
713:デフォルトの名無しさん
09/01/23 10:51:53
>>712
そのクラスでありえそうな変数名用文字の集合(おおむね英数字とアンダースコア)にマッチしないものは
事前に弾いとくとかしておいたほうがいいと思う
あるいはアクセサの提供を条件にしておいて instance_methods に指定文字列があるかどうかチェックするとか
中のほうでevalしてるんじゃないかという疑問に答える知識はない
714:デフォルトの名無しさん
09/01/23 11:58:26
>>712
既存のインスタンス変数をどうされてもかまわないなら、大丈夫。
>>713
内部でevalとかはしてない。
715:デフォルトの名無しさん
09/01/23 12:19:33
>>710
>ActionView::TemplateError (undefined method `number_select' for #<HashWithIndifferentAccess:0xb722adf0>
エラーの意味は分かってる? HashWithIndifferentAccess のオブジェクトに対して number_select メソッドを呼び出して、それで undefined method になっている。
呼び出すメソッド名を間違っていないなら、呼び出す対象となるオブジェクトを確認してみてはどうだろうか。
もしそれであっているなら、Railsのバグかもね。
716:デフォルトの名無しさん
09/01/23 19:59:53
継承したクラスのオブジェクトの配列で困ってるんだけど
class SuperClass
def <=> other
true
end
end
class Class1 < SuperClass
end
class Class2 < SuberClass
end
arry = []
array << Class1.new
array << Class2.new
array.sort
で、『Class1 と Class2 は比較できねぇよゴラ!』 といわれてしまうんだけど。
どうにかなんないかな?
C++の
SuperClassVecter* array = new SuperClassVecter()
Class1* c1 = new Class1()
array.push((SuperClass*)c1);
Class2* c2 = new Class2()
array.push((SuperClass*)c2);
みたいなことがやりたいんだけど、よくわからんちん。
717:デフォルトの名無しさん
09/01/23 20:10:23
エラーメッセージを勝手に訳す人間に発展の未来はないのでよく覚えておくとええぞ
あとマニュアルくらい見れ
URLリンク(www.ruby-lang.org)
> self <=> other
> self と other を ASCII コード順で比較して、self が大きい時に正、等しい時に 0、小さい時に負の整数を返します。
ということで、<=> メソッドは整数を返すように作らなければ sort で比較できない
718:デフォルトの名無しさん
09/01/23 20:13:46
>>716
Comparableメソッドをインクルードしましょ
719:デフォルトの名無しさん
09/01/23 20:42:21
というか、基本的にはクラスが違うと比較はできないよ
でもそれだと困るので
(10 < 11.1 だとエラーで、いちいち明示的に 10.to_f < 11.1 しなければならないとか超困る)
Rubyではcoerceのようなメソッドを作って汎用的なデータ構造に変換を依頼するというのが普通らしい
でもめんどいので、スーパークラスで自分のデータの大きさを規定するというのはどうだろう
class SuperClass
def initialize(data); @data=data; end
def <=>(other); self.length - other.length; end
def length; @data.length; end
end
class Class1 < SuperClass; end
class Class2 < SuperClass; end
arr = [Class2.new('second'), Class1.new('first')]
p arr.sort
結果
[#<Class1:0xb7c415f0 @data="first">, #<Class2:0xb7c41618 @data="second">]
720:デフォルトの名無しさん
09/01/23 20:53:57
>>719
標準の配列に入ってる状態で標準の sort をすると Class1 のオブジェクトが Class2 より前に出るとか
そういうほのかに邪悪の香りがする処理をしたいのでは
class SuperClass
def <=>(other); self.class::PN - other.class::PN; end
end
class Class1 < SuperClass; PN=1; end
class Class2 < SuperClass; PN=2; end
class Class3 < SuperClass; PN=3; end
arr = [Class3.new, Class2.new, Class1.new]
p arr.sort
[#<Class1:0xb7d0ce94>, #<Class2:0xb7d0cea8>, #<Class3:0xb7d0cebc>]
721:デフォルトの名無しさん
09/01/23 21:04:30
rubyのスレって親切に教えてくれるよね。
PHPは気持ち悪い連中ばっかりで寒気がする
722:デフォルトの名無しさん
09/01/23 21:15:30
どの言語も人気が出て使う人が増えてコモディティに接近するとああなるよ
このへんの待遇は単にユーザーの数の少なさの裏返しというだけに過ぎない
723:デフォルトの名無しさん
09/01/23 21:36:47
ドキュメントが完備されていないから、まだまだまともな質問が来るので、
答える方もまだブチ切れてなわけだ。
724:デフォルトの名無しさん
09/01/23 21:49:05
でもオンラインリファレンスに乗ってることでもみんな寛容に答えてるよね。
新規参入促進にはいいのかな?
俺はまだ初心者だけどrubyは書いてて楽しいね
725:716
09/01/23 22:55:11
みんなありがとう。
継承クラスのどっからでも比較できるようになったよ!
あと、ドキュメントって読みにくいよね。
せめて単語で引けるインデックスがあれば・・・
月曜にRuby始めたばっかりなんだけど
ドキュメント調べてる時間が9割以上ってどういうことなのさ!
しかも知りたいことにはほとんどたどり着けない。
726:デフォルトの名無しさん
09/01/23 22:58:55
ソース嫁ってことなのか。
727:デフォルトの名無しさん
09/01/23 23:04:07
プログラミングなんて8割くらいは調べものだと思うよ
始めたばかりならなおさら
でまあそれとは別にRubyのドキュメントは機能的に非常に貧弱だ
どうにかしないといけないという話は出るが、本当にマシになったことはまだ一度もない
728:デフォルトの名無しさん
09/01/23 23:21:48
>>727
> プログラミングなんて8割くらいは調べものだと思うよ
> 始めたばかりならなおさら
おまいは時代に追い付け
729:デフォルトの名無しさん
09/01/23 23:25:03
>>728
打鍵時間以外はほとんど全部調べ物だと思うんだが
仕様書読んだりマニュアル読んだりRFC読んだりネットの事例読んだり
730:デフォルトの名無しさん
09/01/23 23:27:03
>>725
>ドキュメント調べてる時間が9割以上ってどういうことなのさ!
初心者はまず入門書から始めることをオススメする
Webのドキュメントだけで済まそうとするのは、他の言語に精通している人だけにしとけ
731:デフォルトの名無しさん
09/01/23 23:30:16
半分はテストじゃないのか?
732:デフォルトの名無しさん
09/01/23 23:32:38
そんな時間かかるか?
っていうか、テストやらデバッグってプログラミング作成時間とは別にとって考えるもんなんじゃね?
733:デフォルトの名無しさん
09/01/23 23:36:59
Rubyのドキュメントががっかり品質なのはどう言い訳しても事実
734:デフォルトの名無しさん
09/01/23 23:44:52
どこに言い訳が?
735:デフォルトの名無しさん
09/01/23 23:47:03
思春期後期の症例の一つです<言い訳してる人を見出したい
736:デフォルトの名無しさん
09/01/23 23:52:26
じゃあ>>733は見えない人を相手してるだけか、失礼
737:デフォルトの名無しさん
09/01/23 23:55:50
>>732
「テスト駆動開発(TDD)」「振る舞い駆動開発(BDD)」「継続的インテグレーション」あたりでぐぐれ。
738:デフォルトの名無しさん
09/01/24 00:57:16
>>725
ドキュメントはchm版を見るのがおすすめ
ちゃんとキーワードでインデックスされてるのでメソッドを調べたりするのが早い
739:デフォルトの名無しさん
09/01/24 01:57:46
>>737
それだってカウントしないと思うぞ
740:デフォルトの名無しさん
09/01/24 06:56:49
慣れないうちはchm版リファレンスマジおすすめ
つーかRubyリファレンスががっかり品質だって言われるけど
他の言語のドキュメントってそんなに充実してたっけか?
>>739
テストコード→アプリコード→テストコード→アプリコード→… の手順で進めるなら
両方ともプログラミング時間に含めるべきだろう
741:デフォルトの名無しさん
09/01/24 07:30:00
Ruby ドキュメントといえば
Dave Thomas と Andy Hunt の Programming Ruby の Web 版が
見れたときは感動した。
日本語訳が出たときは、お布施のつもりで買った。
742:デフォルトの名無しさん
09/01/24 09:00:21
>>721
最近、php使い始めたんでphpの質問スレもいってるんだけど、
何故かみんな少しカリカリしているイメージw
ただ、やぱphpはリファレンスマニュアルがしっかりしている(特に公式がすばらしい)
のがいいわ。
マニュアルにコメントがつけられるらしくて(細かいところは知らん)
FAQが補足されてることも多々ある
>>740
chm使ってるけど、がっかり品質ということはないな・・・
サンプルコード的なのをものとか、メソッドに関するFAQとかをもっと載せて欲しいと思うことはあるが
Rubyに慣れるまでは使いにくかったけど、慣れてからはそこそこ使えると思った。
まあ、リファレンスだしね
743:デフォルトの名無しさん
09/01/24 12:09:14
見て、使い方を理解するのに時間がかかる感じだな。
書いてるほうは、こんなの一目見りゃ分かるだろ的ノリなんだろうけど、見てるほうはそうでもないギャップがある。
お腹いっぱいに成るほどにサンプル手繰れてもいいと思うけどね。
でもオブジェクト指向自体が、ある日突然閃くまでは意味不明の苦痛の日々だしなあ。
そういう意味で教典読んでも、修行の後、悟り開けないと付いて行けない感じ。
phpのほうは、思想的な物は無くてどうとでも使える節操無い所があるからな。結果的に出来りゃなんでもいいじゃんみたいな。
便利そうな機能も無節操に突っ込みまくってるし、実際便利ではある。rubyだと便利そうなライブラリを探して読み込む所から始まるし。
744:デフォルトの名無しさん
09/01/24 12:30:50
>でもオブジェクト指向自体が、ある日突然閃くまでは意味不明の苦痛の日々だしなあ。
はぁ?
745:デフォルトの名無しさん
09/01/24 17:22:24
>>744
閃く遥か前の段階で「自分は既に悟っている」と勘違いしてる馬鹿には
縁のない次元の話だから、無理に関わろうとしなくていいです。
746:デフォルトの名無しさん
09/01/24 18:02:39
うわぁ・・・
747:デフォルトの名無しさん
09/01/24 19:12:20
もうやめようぜ!おまいらの好きなアイドルはだれだ?
俺は長島海輝だぜ!
748:デフォルトの名無しさん
09/01/24 19:31:42
ここ↓にあるように、数字を日本語表記にするようなモジュールはありますでしょうか?
そろそろ FizzBuzz に飽きた
URLリンク(blog.livedoor.jp)
749:デフォルトの名無しさん
09/01/24 19:42:31
>>748
特にないと思う
たぶん、世界中で何十回も生産されてるコードだ
どっかであってもいいのにね
750:デフォルトの名無しさん
09/01/24 20:29:35
>>746
俺もネットやりたての中二病真っ盛りの頃、
グウの音も出ないけどそれでも何か「相手に痛いところがある」風に装いたいとき、
よくそういうの書き込んだなー。
751:デフォルトの名無しさん
09/01/24 20:31:30
calコマンドのようにカレンダーを表示したいのですが、定石みたいなのってありますか?
752:デフォルトの名無しさん
09/01/24 20:49:58
宿題スレに書き込んだのが残ってた
calコマンドのように表示するように作ったのは確かなんだが、
ぶっちゃけ表示部で何やってんだかわからん
#!/usr/bin/ruby
require 'date'
### Usage: ./cal.rb [YYYY MM]
### ./cal.rb 2007 3 #=> Mar 2007 calender
### ./cal.rb 3 2007 #=> Mar 2007 calender
### ./cal.rb #=> this month's calender
if ARGV.empty? then
t = Date.today
else
argv = ARGV[0,2].map{|s| s.to_i}
t = Date.new(argv.max{|a,b| a <=> b}, argv.min{|a,b| a <=> b}, 1)
end
(d_one, d_last) = Date.new(t.year, t.month, 1), Date.new(t.year, t.month, -1)
cal = "#{Date::MONTHNAMES[d_one.month]} #{d_one.year}".center(3*7) << "\n"
cal << Date::ABBR_DAYNAMES.inject(''){|days,name| days << name.chop.rjust(2) << ' '} << "\n"
(d_one-d_one.wday).upto(d_last+6-d_last.wday) do |d|
(cal << ' ';next) unless d.month == d_one.month
cal << d.day.to_s.rjust(2) << ' ' << "\n"*(d.wday / 6)
end
puts cal
753:デフォルトの名無しさん
09/01/24 20:55:45
>>749
自分で作ってみて、宿題スレにでも行きます
754:デフォルトの名無しさん
09/01/24 20:55:53
>>752
ありがとうございます。
読んでみますね。
755:デフォルトの名無しさん
09/01/24 21:02:39
>>754
要は、 String#rjust ってのがあるんだよ
これは指定数で右詰めする
"A".rjust(2) は "+A" を返すし(+は本来は空白)
"AB".rjust(2) は "AB" を返す
この2バイト確定の文字を空白で挟んで7つ表示して1週間を作ってる
756:デフォルトの名無しさん
09/01/24 21:04:28
joinでいいじゃんね、これ
757:デフォルトの名無しさん
09/01/24 21:38:17
>>748-749
文字を音声で読んでくれるソフトは結構出回ってる
Ruby 的には不評な Windows 系なら
Microsoft Windows Speech っつーソフトが無料だから試してみれ
日本語・ドイツ語あたりまでならなんとかなるんだが
フランス語だと死にそうだな
758:デフォルトの名無しさん
09/01/24 21:40:18
Wikipedia項目リンク
これをRubyから叩けば良いかも
759:デフォルトの名無しさん
09/01/24 21:47:44
…?
760:デフォルトの名無しさん
09/01/24 21:52:55
松本教信者のみなさん今日は。
761:デフォルトの名無しさん
09/01/24 22:44:08
>>757-758
Rubyの練習として、NabeAtzz問題を解いてみたかっただけなんすよ
762:デフォルトの名無しさん
09/01/25 09:14:59
Rubyのrequireという命令が、使う頻度の高い割に
すごくタイプしづらい文字なので困っています。
COBOLに慣れているので、copyというキーワードで
代替できるようにRubyを改造する方法があれば教えてください。
763:デフォルトの名無しさん
09/01/25 09:19:01
copyという文字列をrequireに置換するスクリプトをかけばいいやん
764:デフォルトの名無しさん
09/01/25 09:21:28
alias copy require
ただし、他の人がいじるスクリプトではお奨めしない
タイプしづらくてもrequireに慣れるべき
765:デフォルトの名無しさん
09/01/25 09:23:42
>>762
COBOLやれ
766:デフォルトの名無しさん
09/01/25 09:30:57
ちょっとしたbotを書いてみましたが、何か変なところがあったら教えてください。
なんか定数まわりで警告が出てますがあまり気にしないでください
ダウンロードキーは2000、2時間で消えます
URLリンク(www1.axfc.net)
767:デフォルトの名無しさん
09/01/25 10:01:25
ワロタ
768:デフォルトの名無しさん
09/01/25 10:03:57
>>762
補完系使えよ
769:デフォルトの名無しさん
09/01/25 10:19:02
require は COPY ではないので、それやりたいなら COBOL やれとしか
770:デフォルトの名無しさん
09/01/25 10:44:01
>>762
copyって入力したらrequireと変換されるように辞書に登録してしまえば
771:デフォルトの名無しさん
09/01/25 10:50:49
def copy arg
require arg
end
772:デフォルトの名無しさん
09/01/25 11:57:24
if then →if {
end → }
に置換するC言語のマクロ思い出したww
さすが、COBOLerは発想が一味違う
773:デフォルトの名無しさん
09/01/25 11:59:45
COBOLer に限った話ではないぜ
URLリンク(www.kojima-cci.or.jp)
774:デフォルトの名無しさん
09/01/25 12:04:59
天下の元祖B shellだってそういう風に書かれていたんだけどな
775:デフォルトの名無しさん
09/01/25 12:05:55
B shell は if 〜 then; ...; fi だ
776:デフォルトの名無しさん
09/01/25 12:15:51
ふぃ〜
777:762
09/01/25 12:22:01
アドバイスありがとうございます。
いろいろ検討したのですが、
あらかじめ先頭行にreqireと打ち込んだ
ひな形テキストファイルを用意しておき、
ソースを書き始める時はそれを読み込む
ことにしました。
778:デフォルトの名無しさん
09/01/25 12:25:22
ほんとにrequireって打つのが苦手なんだな・・・。
779:デフォルトの名無しさん
09/01/25 12:29:39
q以外は、人指し指と中指を単純に動かすだけなんだけど、
まぁ、指の仕様も人それぞれってことなんだろうな。
780:デフォルトの名無しさん
09/01/25 12:34:00
require
781:デフォルトの名無しさん
09/01/25 12:36:57
キーボードを見ずにrequireって打てたら神 その3
スレリンク(toilet板)
782:デフォルトの名無しさん
09/01/25 12:38:17
>>775
こういう意味だよ。
URLリンク(minnie.tuhs.org)
783:デフォルトの名無しさん
09/01/25 12:56:40
requireとloadを逆にしておけばよかったのになあ
784:デフォルトの名無しさん
09/01/25 13:14:08
>>781
requrie
785:デフォルトの名無しさん
09/01/25 13:17:21
余裕だろ。
require
786:デフォルトの名無しさん
09/01/25 13:18:01
require なんてキーの配置と流れは簡単じゃん
req→右から左。キーは隣+一つ飛ばし
ui→左から右。キーは隣
re→右から左。キーは隣
3回にわけてリズムをつかめばすぐに慣れると思う
って全然Rubyの話じゃないな
787:デフォルトの名無しさん
09/01/25 13:19:31
QWERTY
788:デフォルトの名無しさん
09/01/25 13:20:21
英単語的に、qのあとはuが来ることが多いので、その部分はほとんど間違えなく指が勝手に動くな
789:デフォルトの名無しさん
09/01/25 13:23:48
test
require
790:デフォルトの名無しさん
09/01/25 13:36:28
ていうか、スクリプトの一番最初にまとめて、
またはライブラリ追加の必要性があるときにファイル先頭に移動して改めて書くようなもんだから、
その時だけゆっくり(手元見ながら)打ち込めばいいじゃんね
キーボード全体から強い光が発せられていて注視できないような構造になってるとかそういうのですか?
791:デフォルトの名無しさん
09/01/25 13:37:17
私の好きなフィギュアスケートの澤田亜紀ちゃんの名前は打ちにくい
792:デフォルトの名無しさん
09/01/25 13:43:48
| │ 〈 !
| |/ノ二__‐─ァ ヽニニ二二二ヾ } ,'⌒ヽ
/⌒!| =彳o。ト ̄ヽ '´ !o_シ`ヾ | i/ ヽ ! Require ...
! ハ!| ー─ ' i ! `' '' " ||ヽ l |
793:772
09/01/25 14:19:58
>>773
それそれw そのことだよまさに
>>777
俺ならエディタのスニッペにrequire登録しておいて、
r(スニペット補完キー)
でrequrieを補完するな
794:772
09/01/25 14:20:39
スニッペってなんだww
「スニペット」な「コードテンプレート」とかエディタや開発環境で呼び名は違うと主ウケ緒d
795:デフォルトの名無しさん
09/01/25 14:25:24
落ち着け。
796:デフォルトの名無しさん
09/01/25 16:12:24
require よりも、elsif の方が、打ちにくい。
エディタの設定で、*.rb ファイルで、elseif と書いたら、
elsif に置換しているけど。
797:デフォルトの名無しさん
09/01/25 16:13:27
ZAQ のうちにくいこと
798:デフォルトの名無しさん
09/01/25 16:28:50
ZAQは小指の爪を使ってキーボードの下から上へすべらすように
z
za
zaa
z
za
・・・できねえ
799:デフォルトの名無しさん
09/01/25 16:32:16
そんなん右手薬指で右Shift押さえながら左薬指でzaw押せばいいじゃん
ホームボジションなにそれ
800:デフォルトの名無しさん
09/01/25 16:42:36
>>799
押せてねぇw
ホームポジションなにそれは同意で、小指薬指中指で順にZAWと押せば
( ゚Д゚)・・・。
ところで>>771みたいなことするよりは>>764のほうがいいよね?
>>771みたいにラップしたほうがいいときってある?
801:デフォルトの名無しさん
09/01/25 17:49:11
requireは上段に集中してむしろ打ちやすいような。
どうしても打てないなら、つ 最終兵器dvorak
802:デフォルトの名無しさん
09/01/25 18:47:55
req(単語補完(ry
だろ、JK
803:デフォルトの名無しさん
09/01/25 19:13:48
URLリンク(www.sanspo.com)
804:デフォルトの名無しさん
09/01/25 19:17:12
>>803
誰もそんなんrequireしとらん。
805:デフォルトの名無しさん
09/01/25 19:50:19
word = ["apple", "orange", "lemon"]
を検索のキーとして
sentence = ["apple is red","orange is not blue","lemon is yellow","apple is not orange","lemon is not red"]
から何個、検索結果が出てきたか知りたいのですが、どうすればいいでしょうか?
806:デフォルトの名無しさん
09/01/25 20:03:10
>>805
配列要素をeachで枚挙することを厭ってはいけない
特にRubyではね
words = ["apple", "orange", "lemon"]
sentence = ["apple is red","orange is not blue","lemon is yellow","apple is not orange","lemon is not red"]
counts = {"apple"=>0, "orange"=>0, "lemon"=>0}
sentence.each do |s|
words.each do |word|
if /#{word}/ =~ s then
counts[word] = counts[word]+1
end
end
end
p counts
結果:
{"orange"=>2, "apple"=>2, "lemon"=>2}
807:デフォルトの名無しさん
09/01/25 20:14:18
counts = {}
words.each do |word| counts[word] = 0 end
808:デフォルトの名無しさん
09/01/25 20:15:04
>>807
スレタイ6回くらい読め
809:デフォルトの名無しさん
09/01/25 20:43:13
unko
810:デフォルトの名無しさん
09/01/25 21:52:42
久しぶりにスレみたら>>747で吹いた。
男じゃん。と思って検索したら、こんなに可愛い子が女の子なわけないじゃないか
811:デフォルトの名無しさん
09/01/25 22:18:03
ググってしまったじゃないかww
812:デフォルトの名無しさん
09/01/25 23:26:45
調べたらショタアイドル。ぐぐr必要なし
813:デフォルトの名無しさん
09/01/25 23:38:45
>>812
ぐぐってしまったじゃないか
814:デフォルトの名無しさん
09/01/25 23:45:15
密林で注文したじゃないかw
815:デフォルトの名無しさん
09/01/26 03:25:48
puts "文字"
puts "文字"
puts "\n"
srand
require 'readline'
def try_answer(prompt)
while buf = Readline.readline(prompt, true)
yield buf
end
end
difficulty = ($*[0] || 1).to_i
difficulty >= 1 or raise "#{difficulty}: Invalid difficulty direction"
answer = rand(30 * difficulty + 1)
judge_table = ["文字1","文字2","文字3"]
try_answer("文字 > ") do |line|
try = line.to_i
result = try <=> answer
puts "#{try}#{judge_table[result]}"
break if result.zero?
end
プログラミングに興味が出て、いろいろさがしてたら
学校の過去の資料にこんなプログラムがありました。
これはどんなプログラムなんでしょうか?
一文一文の意味を教えていただけないでしょうか?よろしく
おねがいします。
816:デフォルトの名無しさん
09/01/26 03:31:54
マルチは感心しないな
817:デフォルトの名無しさん
09/01/26 03:32:21
ruby経由でwgetしつつ出力を表示しつつ、log.txtにもはきつつってことをやりたいのですが、上手くいきません。
画面には表示されますが、log.txtには何も書き込まれないという・・・
これは何がおかしいものなんでしょう
Dir::chdir("/work") do
system("wget URLリンク(example.com) | tee log.txt")
puts "read log.txt"
puts File.read("log.txt")
end
818:デフォルトの名無しさん
09/01/26 03:45:55
>>817
wget の出力は標準エラー出力に表示する
tee は標準出力を取り込むことしかできないから、そもそも log.txt にはなにも書き込まれない
wget URLリンク(localhost) 2>&1 | tee log.txt
Ruby あんま関係ないな
819:デフォルトの名無しさん
09/01/26 03:57:25
>>818
いけた!そっかwgetエラー出力だったのか・・・
基本的なところをうたがうべきなのにすっかり忘れてた
820:デフォルトの名無しさん
09/01/26 04:00:33
これを意識してる人はまずいないよ
これはむしろ wget の欠陥だと思う
821:デフォルトの名無しさん
09/01/26 05:47:44
Rubyでwebサーバーにアクセスしたとき
そのサイトにどんなファイルがあるか調べる方法はありますか?
822:デフォルトの名無しさん
09/01/26 06:03:15
index許可してあればリスト取り出せるけど
そうじゃなければ_
823:デフォルトの名無しさん
09/01/26 09:16:34
robotでも作るつもりなのかな
824:デフォルトの名無しさん
09/01/26 11:26:53
>>820
wget の場合、標準出力は -O - で取ってきたものを出力するためにあるので
(他のツールにパイプで直接流し込んだりとか)、そういう時にも一貫性を保てる
ように、メッセージは標準エラー出力というのは理にかなっている。
メッセージをファイルに取りたいなら -o filename オプションを使うという手もあるが。
Ruby 関係ないな。
825:デフォルトの名無しさん
09/01/26 11:30:37
>>822
Ruby関係ないよね
っていうか、HTMLやHTTPの勉強はしてもらってるのかね
Rubyは魔法じゃねえぞ
826:デフォルトの名無しさん
09/01/26 11:39:31
Ruby関係ないということがわかるだけでも勉強としては前進だから、どんどん聞くだけ聞いてもらってもいいけどな
回答としても「ちげーよRuby関係ねーよ」と答えるだけでいいから楽だし
Ruby内でwget使ってログ管理しようとして嵌るというのは順調なテンプレの範囲だと思う
827:817
09/01/26 12:24:18
そもそも、コマンドラインで
wget URLリンク(example.com) | tee log.txt
ってやってみてRubyの問題なのか、そうじゃないのか切り分けるべきでしたね
なにあれ、解決したので助かりました。
828:デフォルトの名無しさん
09/01/26 13:40:37
Ruby 1.8でDir.globに複数のパターン(というか拡張子)を指定する方法は
ありませんでしょうか?
(Dir.glob("**/*.css") + Dir.glob("**/*.html")).each do |file|
:
end
のようにするしかない?
829:デフォルトの名無しさん
09/01/26 13:44:36
>>828
マニュアルに初心者お断りな感じできちんとわかりにくく書いてあんじゃんよ
irb> Dir.glob("*")
["002.txt", "001.txt", "aaa.jpg", "bbb.jpg"]
irb> Dir.glob("*.txt")
["002.txt", "001.txt"]
irb> Dir.glob("*.txt\0*.jpg")
["002.txt", "001.txt", "aaa.jpg", "bbb.jpg"]
830:デフォルトの名無しさん
09/01/26 13:49:16
あれわかりにくいよね
素直に第一引数は配列受け取るようにすればよかったのに
831:デフォルトの名無しさん
09/01/26 15:37:35
ネットワーク上にあるExcelファイルを、
open-uriを使わずにnet/httpを使ってFileオブジェクトに格納する方法はあるでしょうか
832:デフォルトの名無しさん
09/01/26 15:52:09
>>831
bodyをそのままwriteするだけじゃダメなんだっけ?
833:828
09/01/26 15:52:40
>>829
本当だ!
> パターンを "\0" で区切って 1 度に複数のパターンを指定することもできます。
>
> p Dir.glob("f*\0b*")
> => ["foo", "bar"]
マニュアルみたつもりで見落としていました。
ありがとうございました。
834:デフォルトの名無しさん
09/01/26 15:57:50
>>832
bodyメソッドを実行すると「string contains null byte」とエラーが出てしまいます・・
835:デフォルトの名無しさん
09/01/26 16:05:54
めんどくへえ
イントラ限定のサーバかなんかで変な形式で送られてきてると予想
ヘッダはなんて言ってる?
836:デフォルトの名無しさん
09/01/26 16:10:15
レスポンスのヘッダでしょうか?
HTTP/1.1 200 OK
Date: Mon, 26 Jan 2009 07:08:59 GMT
Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) mod_ssl/2.8.12 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26
Last-Modified: Mon, 26 Jan 2009 00:11:23 GMT
ETag: "3f1629-48000-497cffab"
Accept-Ranges: bytes
Content-Length: 294912
Content-Type: application/vnd.ms-excel
こんな感じです
837:デフォルトの名無しさん
09/01/26 16:10:22
>>834
エラー箇所どこ?
win32なのにバイナリモードでFile.openしてないとかいうオチはない?
838:デフォルトの名無しさん
09/01/26 16:14:04
>>837
さすがにそれはないと思いたい
839:デフォルトの名無しさん
09/01/26 16:23:08
>>837
orz おさわがせしました
840:デフォルトの名無しさん
09/01/26 16:29:17
>>838-839
初心者スレだしこんなミスもいいんじゃね?w
解決したならなによりだし(あのエラーを見たことは無いから自信はなかった)
騒がせたと懲りてるようなら、もう同じミスをしてもすぐ自分で気づくだろうから。
841:デフォルトの名無しさん
09/01/26 17:16:29
>>833
glob 構文だけを純粋に使って、*.{css,html} これでもいんじゃない。
842:デフォルトの名無しさん
09/01/26 17:29:56
>>833
・{ } コンマで区切られた文字列の組合せに展開します。
Dir.glob("**/*.{css,html}") do |file|
puts file
end
1.9だと配列で複数のパターンを渡せるようになった
843:デフォルトの名無しさん
09/01/26 17:39:27
あらら、かぶっちゃった
Dir[pattern] 形式だと1.8でも複数のパターンを指定できるよ
Dir["**/*.html","**/*.css"].each do |file|
puts file
end
844:828
09/01/26 17:40:13
>>841-842
おお、便利だ!
> { } コンマで区切られた文字列の組合せに展開します。
> 例えば、 foo{a,b,c}はfooa, foob, foocに展開されそれぞれに対してマッチ判定を行います。
> 括弧は入れ子にすることができます。例えば、 {foo,bar{foo,bar}} は
> foo, barfoo, barbar のそれぞれにマッチします。
これですね。ありがとうございました。
845:デフォルトの名無しさん
09/01/26 20:20:17
>>843
完全に単なるエイリアスだと思い込んでた…
glob構文めんどいから
["**/*.html","**/*.css"].inject([]){|r, i| r.concat Dir.glob(i) }
こんなことしてたぜ…横から感謝
846:デフォルトの名無しさん
09/01/26 22:36:34
>>843
すげー。知らんかったわw globとは別なのね
847:デフォルトの名無しさん
09/01/26 23:20:28
>>843はオレも知らんかったので助かるんだけど、でもこれっておかしいよね。
ほんとはglob()と同じにすべきだよな。わざわざこんなふうにしている意味が分からん。
848:デフォルトの名無しさん
09/01/26 23:24:54
> ほんとはglob()と同じにすべきだよな
いまさらglobを変えるわけにいかないからせめて関数的メソッドDir[]は配列を受け取るようにしたという流れだと思った
よく覚えてない
849:デフォルトの名無しさん
09/01/27 02:16:31
Dir[]とDir.globの違いはなんだろ(引数以外)
Dir[]全部列挙で、Dir.globはブロック渡すと逐一処理可能ってことか?
850:デフォルトの名無しさん
09/01/27 03:32:53
glob2とか作ってコンパチ目指したほうが。
なんか先に作った香具師の実装がアレでみんな迷惑してるの多いよね。cgiとかwww
Content-Transfer-Encoding: base64とか付いてるとか?
851:デフォルトの名無しさん
09/01/27 09:23:26
>なんか先に作った香具師の実装がアレでみんな迷惑してるの多いよね。cgiとかw
あほか
それは事実だが結果的にそうなった
つまりそういう開発ポリシーだからそうなる必然
文句云うな
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5503日前に更新/246 KB
担当:undef