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


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

Ruby 初心者スレッド Part 30



1 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 08:21:23 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.1 は初心者には時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
   (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に未対応であるためです。)
 なお 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 で勉強すれば将来スムーズに 1.9 系に移行できるでしょう。

関連スレや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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

10 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 11:49:28 ]
>>8
なんでも屋という表現が不安だが、投資のシステムから言ってたぶん Elona だろうと思われる
*band の見た目をちょっと綺麗にして非戦闘メインの生活もできるように作ってみたら
*band にハマるような人によってはヤバい依存度になる可能性があるものができたという話

ちなみに HSP 製だが、ファイル構成を見ないと HSP で作ったようには見えない

あと、回答は前者の「商品ページが増えて安い杖から高い杖までずらっと並ぶ(可能性がある)」だ

11 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 11:59:47 ]
>>9
次スレからテンプレだな

12 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 12:23:45 ]
Ruby 1.8.7 は
Ruby 1.9の新機能の中であまりにも便利だから、とても自然な機能だから、と言われていたものを
Ruby 1.8.6に追加(フィードバック)したバージョン

13 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 12:33:39 ]
>>9
> Rubygem 0.x
これって、パッケージで入れた後、gem update --systemでアプデトして使ってるんだけどマズイ?

14 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 12:35:21 ]
>>10
サンクス Elonaか。昔、延々徹夜でお使いやってて、俺何やってんだろ、と思ったゲームだw
またやってみたくなったわ

スレ違いスマソ

15 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 12:43:47 ]
>>13
gem --version できちんと最新版なら問題ない
apt を利用してると「apt 経由以外でプログラムを更新するのはやめてください」と言われるというだけ
主張はまったく正しいんだが、そう思うならパッケージの rubygem のバージョンとっとと上げろ(w

 ・ apt は勝手にプログラムが更新されることを許可しない
 ・ rubygem は自力更新がポリシー違反になるシステムを考慮してない

という結果だ

16 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 13:31:49 ]
>>7

ttp://doc.okkez.net/
でもほぼ同じものが見られますよ。

17 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 18:09:04 ]
>>15
なるほど、そういうことかサンクス

> パッケージの rubygem のバージョンとっとと上げろ(w
そうだわなww

18 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 21:04:57 ]
CentOS 5.3 で yum install ruby したら入ったのが 1.8.5 でびびったw
こういう場合野良ビルドもやむなしだわな



19 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 21:30:14 ]
Debian のtable, ubuntu9.04は 1.87 なんだな
この辺が一番多いのかな。

20 名前:デフォルトの名無しさん [2009/08/08(土) 23:00:31 ]
正規表現の範囲指定繰り返し{m}のmの部分に、
\1, \2とかの後方参照を埋め込むことってできませんか?

例えば以下のような文字列strがあって、

str = "2foofoo"

2回fooが繰り返すということを意味しているときに、

str =~ /(\d)(foo){\1}/

というような書き方が0を返すようなことがしたいです。
後方参照の\1を数値の2と解釈させるような書き方ってありますか?


21 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 23:19:59 ]
むしろできて欲しくない気もするな
数値をマッチさせてそれから正規表現を新規に作るしかあんめえ

22 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 23:22:43 ]
str = "2foofoo"
str =~ /(\d)/
str =~ /\d(foo){#{$1}}/
=>0

2行に分ければできるけど、1行でできるのかな?

23 名前:デフォルトの名無しさん [2009/08/08(土) 23:55:29 ]
>>20です。

>>21
>>22

回答ありがとうございます。

んー、2回に分けないとできなさそうですね。

24 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 00:24:59 ]
>>20
仮に出来たとしても本来の意味の正規表現の能力を逸脱しすぎてて
逆に気持ち悪い機能だな

25 名前:デフォルトの名無しさん [2009/08/09(日) 01:23:12 ]
www::mechanizeに関する質問はスレチですか?

26 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 01:51:29 ]
(\d)の部分が1-9なら、
/1(foo){1}|2(foo){2}|3(foo){3}|4(foo){4}|5(foo){5}|6(foo){6}|7(foo){7}|8(foo){8}|9(foo){9}/
でいける(マテ

27 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 01:59:09 ]
> (マテ

28 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 05:02:53 ]
>>25
別に構わないよ
Rubyでスレ違いになる可能性があるのはRailsの機能を使った場合だけ
それにしたって「Railsスレで聞けバカ」という誘導兼ツッコミが入るだろうし
質問一発目くらいは誰でも大目に見るだろ



29 名前:25 mailto:sage [2009/08/09(日) 05:09:10 ]
ありがとうございます
じゃあ早速ですがfromのボタンを押すのは
agent = WWW::Mechanize.new
agent.get(uri).form_with(nameとかactionとか){入力する物}.click_button
って形ですよねこのとき、nameが無くてactionも同じformがある場合はどうすれば良いんでしょうか?

30 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 05:23:08 ]
いくらでも複雑に記述することは可能だが、ごく単純には抽出条件なしの配列を使う
ブロックつきメソッドが動作しないのでメソッドチェーンできないことにだけ注意
Ruby 1.9.1 および 1.8.7 の Object#tap を使えば可能なはずだが、 tap はそういう用途に使うもんじゃねー

# 従来(抽出条件記述が難しい)
 agent.page.form_with(抽出条件){|f|
  f.入力指示
 }.click_button

# 配列版(出現順だけ考える)
 f = agent.page.forms[2]
 f.入力指示
 f.click_button

# 配列要素を tap
 agent.page.forms[2].tap{|f|
  f.入力指示
 }.click_button

Page#forms は、Form オブジェクトを含む配列を HTML 上での <form> の出現順に返す
あくまで配列なので、agent.page.forms[2] は HTML 上での 3 番目のフォームになるぞ

31 名前:25 mailto:sage [2009/08/09(日) 05:31:34 ]
なるほど、配列だから出てくる順番だけ考えて数を入れてやればいいわけですね。
やってみます。

32 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 18:48:00 ]
Ruby 逆引きレシピとRuby逆引きハンドブックなら、どちらがおすすめですか?

33 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 18:51:06 ]
>>32
個人的だが著者的に逆引きレシピをオススメしておく。

34 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 19:01:47 ]
どうせどっちも読むようになるからどっちも買えというのが答ではあるんだが
逆引きのほうでいいんじゃねえの

35 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 19:17:40 ]
どっちだよw

36 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 19:30:51 ]
>>32
ttp://d.hatena.ne.jp/kimuraw/20090724/p1

37 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 19:51:26 ]
>>35
ワロタw

38 名前:32 mailto:sage [2009/08/09(日) 22:06:05 ]
>>33
>>36
ありがとうございます。

36さんに紹介していただいたブログを読むと、
どっちも買って損はなさそうなので、両方買うことにしました。



39 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 00:21:00 ]
知っておくとちょっと得をするもんなにか教えてくれ。

当たり前すぎるが、pp。データ構造を見やすく出力。


40 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 00:28:25 ]
||= 演算子
rakeの使い方
sortよりsort_byの方が劇的に速い

41 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 01:08:06 ]
Module0::Class0 を継承して
Module1::Module0::Class0 を作るにはどうすれば?

どうしても無理ならクラス・モジュールの名前変えます。

ダメ元で試したコード:
module Module0
class Class0
end
end
module Module1
module Module0
class Class0 < Module0::Class0
end
end
end

エラー:
NameError: uninitialized constant Module1::Module0::Class0
from (irb):7
from :0

環境:
OS: Ubuntu 5.0
Kernel: 2.6.28-14-generic
ruby: 1.8.7
irb: 0.9.5


42 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 01:46:15 ]
>>41
名前変えた方がいいと思うけど
class Class0 < ::Module0::Class0

43 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 02:54:21 ]
>>40
> sortよりsort_byの方が劇的に速い
「sortが遅い場合は」な

44 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 08:46:23 ]
>>39
hashやstructを構造体みたいな使い方で大量に使う時の注意点
速度: Hash(キーがsymbol) > Struct > Hash(キーがstring) >>>(超えられない壁)>>> OpenStruct

45 名前:デフォルトの名無しさん [2009/08/10(月) 10:32:18 ]
ちょっとお聞きしたいのですが、
rubyでのgui開発で、
タブによって選択肢を選んだり、数値を代入して、
それをある形式で複数のテキストファイルに出力することはできますでしょうか。
いままでfortranしか触ったことがないのですが、
guiを作る必要がでてきまして、どのプログラムがいいか選んでいる状態
なのですが、もしよろしければ教えていただけると幸いです。

46 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 10:40:35 ]
その程度どんなGUIでもできるでしょ
>どのプログラムが・・・
言語から選んでるってこと?
自分が使うだけ(もしくは使う人みんなRuby使い)ならRuby+何かGUIでもいいけど
そうでないならコンパイルして実行形式にする言語を個人的には勧める

47 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 11:06:09 ]
>>46
ありがとうございます。そういうのはどれでもできるんですね
実行形式できる言語というのをちょっと勉強してみます

48 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 11:08:24 ]
>>45
jp.rubyist.net/magazine/?0001-RubyGUI
を読め



49 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 11:25:45 ]
IronRubyはダメ?

50 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 11:30:18 ]
Ruby中級者であるなら何使ってもよい
初心者がRubyでGUIやるのはただのバカ

51 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 11:49:28 ]
なんでもそれひとつで済ませられる何か、を求めてこそ
何か最後のひとつ以外を学んだら死ぬ、という呪いをかけられていてこそ
プログラミング初心者

老害は立ち去れ

52 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 12:02:35 ]
BASIC(接頭詞はなにでもなんでも可)であらゆる全てを作っていたあのころの夢を
今の人たちはRubyに見ているのだよ

53 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 12:28:22 ]
使いやすいGUIビルダーと、充実した日本語ドキュメントがあれば
もはや「全部Ruby」で問題ないレベルまでは来てるんだけどな
最後に残った二つの関門が大きい

>>45
とにかく動けばいいと言うのなら、VisualBasicあたりをオススメする
後のことを考えてRubyでやりたいのなら
VisualuRuby+FormDesigner、WxRubyあたりを使うのがオススメ

54 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 12:33:36 ]
>>53
winの話なの?それにしてもC#のほうがいいと思う

55 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 12:39:29 ]
他のGUI言語でAPIの使い方を学び
その知識を利用してRubyからAPIを直に呼ぶ

というのが基本だと思う

56 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 17:18:45 ]
Windowsの場合、APIを直に呼べばGUIプログラミングができるってもんでもないしなあ。
ウィンドウプロシージャをWindowsからどう呼ばせるかという最大の問題がある。

57 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 07:22:00 ]
foo.xxx = foo.xxx + 123
で xxx に何入れても代入できる仕組みってできますか?
property_missingで検索したらGroovyしかヒットしない…

58 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 07:27:33 ]
Rubyに言語仕様としてのプロパティやアクセサというものは存在しない
あくまで「遠目に見ればそのように見えるかもしれない動作」を
単なるインスタンスメソッドで代用しているに過ぎない

>>57
設計思想自体に何か重大な誤りがあるようにしか見えないが、
とりあえずは foo の属するクラス定義の method_missing の中で分岐書くしかないな



59 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 08:02:55 ]
「インスタンス変数が初めて使用されたときにアクセサメソッドを定義させることはできませんか」
というような質問は年に何回か見るな
動的言語を名乗ってる以上できても面白そうだが、現行では残念ながらできない

クラス設計者が @foo = 100 とする代わりに毎回 instance_variable_initialize(:foo, 100) と書くようにする、みたいな
予防法的なめんどくさい手順しか思いつかん
あ、 instance_variable_initialize は自作してね

60 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 09:13:07 ]
OpenStructは?

61 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 09:16:51 ]
そのへんは
> foo.xxx = foo.xxx + 123
を実現するということがどんだけ重要で取替不可かによるな
これの実現のためにどんだけの不便を強いる覚悟があるかみたいな

62 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 10:01:18 ]
>>59はostruct.rbを写経してこい


63 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 10:58:56 ]
>>57
デフォルトの値が0っぽいから…
fooのクラスがFooとすると
class Foo
def initialize
@vals=Hash.new(0)
end
def method_missing(name,*args)
x=name.to_s
if name[-1..-1]=='=' then
@vals[name[0..-2]]=args[0]
else
@vals[name]
end
end
end

これでよかろうか(引数の数の検証は自分で書いてちょ)

64 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 12:16:11 ]
class ZeroStruct < OpenStruct
def initialize(*) super; @table.default = 0; end
end

foo = ZeroStruct.new


65 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:03:30 ]
vim使っている人ってマイナーな人?
それともメジャー?

オススメってある?

66 名前:デフォルトの名無しさん [2009/08/11(火) 14:05:22 ]
エディタの話題は荒れるって

67 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:26:38 ]
小学校の野外授業の注意プリントみたいだが、普段使っているものでよい
Rubyのためだけに新規操作を覚えるとかマジキチ

68 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:34:15 ]


  ┏┳┳┓     ハイ.     ┏┳┳┓
┏┫┃┃┃ .エディタの話は ┃┃┃┣┓
┃┃┃┃┣┓   ここまで ┏┫┃┃┃┃
┃      ┃┃┏━━━┓┃┃      ┃
┃スレチ   ┣┫ . ・∀・ ┣┫. STOP!┃
┗━━━━┛┗┳━┳┛┗━━━━┛
            ┏┻┓┃
        ┏━┛  ┣┻┓
        ┗━━━┫  ┗━┓
.             ┗━━━┛



69 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:34:50 ]
AA厨うぜえ

70 名前:デフォルトの名無しさん [2009/08/11(火) 14:38:00 ]
厳密には「アスキー」アートではない。

71 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:38:21 ]
ほら荒れた

72 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:41:48 ]
×荒れた
○荒らした

73 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:44:31 ]
専門板といえども、数行程度の目障りでないAAなら構わないと思うのだが。
それが嫌なら何で2chにいるの?
2ch以外にもコミュニティはあるよ?

74 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:49:14 ]
>>42
Thx!

75 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 16:37:25 ]
久々に伸びてると思ったらこの内容かw
気に入らないレスをスルーできないと
(掲示板を利用するのは)難しい

76 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 16:39:38 ]
そもそもコピペでしか喋れない人間に価値はない

77 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 16:50:59 ]
>>76
「そもそも」の使い方間違ってるぞ
スレの流れに沿って喋れない人間には価値が無いんだよ、これが

78 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 16:54:25 ]
Matz曰く「Vimは史上最も無意味なプロジェクト」

ぼくの Vim への憎悪が意味するのは、ぼくが Vim のことを史上最大の
無意味なプロジェクトだと見ているということだ。
Vim がしばらくの間スローガンにしていたのに、
「ちゃんとした Vi」みたいなのがあったよね。
そんなスローガンでスタートしたら、もうどこにも行くところがない。
Vi をちゃんとすることなんて不可能だからだ。



79 名前:デフォルトの名無しさん [2009/08/11(火) 17:05:26 ]
>>78
それウケると思ったの?

80 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 17:10:51 ]
>>76
>>78のことかw

81 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 17:15:09 ]
>>78
s/Vim/Emacs/g にしてもあまり違和感がないと思うのは俺だけ?w

82 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 18:38:49 ]
LinusがSubversionについて言った発言


83 名前:デフォルトの名無しさん [2009/08/11(火) 18:42:24 ]
つまんねーよ

84 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 21:38:18 ]
ruby使いって性格最悪な人多いですね^^

85 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 22:11:09 ]
ID出ないから自演し放題

86 名前:デフォルトの名無しさん [2009/08/12(水) 09:31:23 ]
www.skuare.net/2007/07/ruby_5.html
の一行掲示板にescapeをかけたいのですが,
表示部分を#{CGI.escapeHTML(message)}とすると,
改行したい<br>まで出力してしまいます.
単純に使い方わかってないこともありますが,ご指摘お願いします.

87 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 10:01:32 ]
>>78
s/Vim/Ruby/g にしてもあまり違和感(ry

88 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 10:03:39 ]
>>86
escapeしたいのは何故?
escapeしたいものは何?



89 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 10:47:21 ]
>>86
#!/usr/bin/ruby -Ke
require 'cgi'
require 'kconv'
# 仕様:1行掲示板なのでユーザーはHTMLタグを使えず、改行の自動置換等も行わない
# ログファイルがプレーンテキストでなくてもいいなら、ファイルにエスケープしたものを保存したくない
logfile = 'bbs_test.log'
log = File.open(logfile ,'r'){|f| f.read} rescue ''

post = CGI.new["datapost"]
if post
log = CGI.escapeHTML(post.toeuc) + "<br>\n" + log # postデータを追加
File.open(logfile, 'w'){|f| f.print(log)}
end

print "Content-type: text/html\n\n"
print <<EOF.toeuc
<html>
<head>
<title>rubyで一行掲示板</title>
</head>
<body>
<form method="POST">
一言:<input type="text" name="datapost">
<input type="submit" value="送信">
</form>
<hr>
#{log}
</body>
</html>
EOF

90 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 10:48:18 ]
>>86
1. messageを行ごとに分解
2. 行ごとにescapeHTMLする
3. 行末に<br>をつける
4. 出力する

という処理をする必要があるんじゃないかな。

def text2html(str)
str.collect {|line| CGI.escapeHTML(line).sub(/$/, '<br>') }.join()
end

#{text2html(message)}


とかでどうでしょうか。


91 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 11:02:58 ]
>>89
面影残ってねえ

92 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 11:18:51 ]
>>91
いまだに cgi-lib を使ったままのスクリプトを再利用してやる義理はねえよ

irb> require 'cgi-lib'
Warning:(irb):1: cgi-lib is deprecated after Ruby 1.8.1; use cgi instead
true
irb>

93 名前:デフォルトの名無しさん [2009/08/12(水) 11:43:55 ]
>>90
やってみましたが,変わりありませんでした..

94 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 11:46:32 ]
>>92
これは元記事がそもそもかなり悪いな
わざわざ悪いやり方で学ぶ必要もあるまい

95 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 11:54:59 ]
Ruby ユーザは CGI を書くなと言いたい (c) 弾

96 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 12:25:18 ]
不足なのなら順に説明すればいいんじゃね夏休み、と思ったが 1ページ目であっさり挫折した
ttp://www.skuare.net/2007/06/ruby_1.html

CGI の入力・出力構造は基本的に通常のスクリプトと変わらない
ブラウザからのデータをサーバが解釈した環境変数 QUERY_STRING の中身が標準入力に既に入っていて
標準出力を行うとユーザーに送る HTML などのデータとみなされてサーバが一旦受け取るという違いしかない

ただ、環境変数 QUERY_STRING を直接アクセスすることは今となってはまず無い
たいていは適度に使いやすく変換してくれる肩代わりライブラリ、Ruby では標準添付の cgi 、を使う

Web ブラウザは、HTML 上の送信ボタンが押されたときには、そのボタンを含む FORM 要素の
INPUT 要素や TEXTAREA 要素の name 属性と value 属性をペアにしてまとめ、適当にエンコードしてサーバに送る
上記サイトでは HTML 上で value が省略されているが、普通にユーザーが入力すればその値が value としてサーバに送られる

そして、サーバが受け取ったデータというのは通常
 name1=値1&name2=値2…
というようなひと連なりのテキストというか英数字記号の巨大な塊となっている
これをいちいち安全かつ適切に自力分解復元するのは面倒だし不安なので、 cgi ライブラリにその仕事をやってもらう
CGI.new とすると QUERY_STRING が読み込まれ、わかりやすく分解されて、[ ] メソッドで参照できるようになる
たとえば HTML 上で name1 だった入力欄の値を利用したい場合は

 cgi = CGI.new
 cgi['name1']

とすればよい
なお、標準出力はサーバが全て受け取るので、何かをユーザー向けに表示させたい場合は、
本来 Web サーバが行っていたことも全て自力でする必要がある(CGI はそういうふうになっている)
HTML を表示したいのなら、 サーバが自動で行っていた Content-Type という HTTP ヘッダ等の表示も自前で行わなければならない

 print "Content-type: text/html\n\n"

CGI#out のブロックで括るとこれを自動で行ってくれるのだが、まあそれは別の話

97 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 13:02:32 ]
まずCGIの仕様をちゃんと紹介すべきだろう。

98 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 13:03:48 ]
小飼先生が猛然とアップを始めました



99 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 13:20:22 ]
>>96
標準入力経由でQUERY_STRINGを渡したり
標準出力への出力が勝手にHTMLとみなされるWebサーバなんてあるの?

100 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 13:25:29 ]
まあ、作ればあるんじゃないかねえ

101 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 13:41:41 ]
とりあえずあれだ、QUERY_STRING は HTTP GET で、標準入力は HTTP POST だ
そういやなんでわざわざ分けたんだろうな、これ
GET も POST も全部標準入力に渡せばよかったんじゃねーかと思うんだが、当時なんかあったのか

102 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 14:37:04 ]
RESTでこのあたりの考えが再認識されてるけど、本来の意図は、

GETはリソースを取りに行くメソッド。
リソースの位置(※)を特定する情報としてquery stringが付く。

POSTは指定リソースに対して新たなリソースを作成させるメソッド。
作成する情報はリソースの位置(※)ではないのでURLのquery stringで
はなくHTTPリクエストのBODYで指定する。

※ URL = Uniform Resource Locator





103 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 16:51:40 ]
文字列をマッチするときに
=~ の右辺を別ファイルから参照させたいんだけど,どうすればいいですか?


104 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 16:54:57 ]
いまいち質問がよくわからんけど
re = Regexp.new("$d+")
if s =~ re
みたいにすれば動的に正規表現作れる

105 名前:103 mailto:sage [2009/08/12(水) 17:48:43 ]
例えば word.txtのなかに
apple
banana
cat

が入っていて,それが今後どんどん追加されていくときに
=~の右辺がwordのなかを一行ずつ読み込んでマッチしているか確認してほしいのです.


>>104
$dは特殊変数かなにかですか?

106 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 17:53:34 ]
だからマニュアルか解説本くらい読めよ
たいてい書いてあるからさ

文字列を正規表現オブジェクトにする方法はいくつかある
リテラルとして直接書き込む方法
 /hoge/
変数として // 内で展開する方法
 str = "hoge"
 /#{str}/
Regexp オブジェクトの明示的な生成
 Regexp.new("hoge")

好きなの選べ

107 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 18:02:47 ]
>>106
すいません.wordの中をgetsで取得しながらやってみます.
ありがとうございました.

108 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 18:44:30 ]
>>105->>107

なにか話がすれちがっている気がする
>>103
ストップワードっていう奴ににているのかな?それを用意しておきたいの?





109 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 18:51:43 ]
/¥b#{Regexp.union(File.read('words.txt').split)}¥b/
という話?


110 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 18:52:55 ]
あああ、yen になってしまった。 ¥ ← これもなっちまうかな……






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

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

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