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


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

Ruby 初心者スレッド Part 31



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

485 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:00:29 ]
>>483
do はブロック開始の(予約)文字列
メソッドに引数を渡すときの ( と ) それそのものがメソッドではないのとおおむね同じ理屈
文字列だからたまたま読めるだけで、別に <<<<<< >>>>>> でもよかった

486 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:06:57 ]
>>481
eachメソッドがハッシュに対して使われたときは、その引数は
|key,value|という形になるわけですね。

>>482
申し訳ないです。

>>483
481の結果からすると、each(すべての要素にたいして)do以下を行えという
ことだと思いますが、メソッドでないならdoはなんだろう。

487 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:14:30 ]
>>481
実行してみました。
undefined local variable or method `code_words' for main:Object (NameError)
というエラーが出ました。code_wordsが定義されていない?

488 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:20:19 ]
初心者が最初にwhyの感動的rubyガイドで勉強するのは
不適切だったりしますか?

489 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:44:46 ]
>>488
こっちのが無難
www1.tf.chiba-u.jp/~shin/tutorial/index.rb

490 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:56:55 ]
>>486
だから、doは予約語だってば。
ifがメソッドでないのと同じ。

491 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:12:37 ]
> >>483
> 481の結果からすると、each(すべての要素にたいして)do以下を行えという
> ことだと思いますが、メソッドでないならdoはなんだろう。

そのeachはなんですか?
すべての要素にたいして、というおまじないか何かですか?

プログラミング言語はそういうふわふわとしたものではないです。

492 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:21:35 ]
おまいら、ここは初心者スレだ。
初心者っつーのはとんでもない思い込みや勘違いをしていることも多いんだから
あたたかい目でみてください。

>>486
>メソッドでないならdoはなんだろう。

すでに指摘があるように、doは構文を表す予約語のひとつです。
while i < 10 do
 print i
end
では、whileやdoやendが予約語です。なおこの場合ならdoは省略可能。

[1, 2, 3].each do |x| puts x end
なら、each や puts はメソッド名、do と end は構文を表す予約語。

493 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:39:54 ]
do が何だかわかりませんレベルの人には来て欲しくないな
質問するなら最低限、言語の基礎は身に付けておいて欲しい
これくらいは自力で学習、調査しておくのが質問する側のマナーだろう



494 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:42:28 ]
そもそも、動作としては arr.each(ブロック) なんだよ
オブジェクト arr の インスタンスメソッド each に引数でブロックを与えている
ただ、便利なブロックがこのままだとたいそう使いにくいので

[1,2,3].each(do |e| p e endのブロック、ただし実行できるならこのブロックを要素ごとに実行すること)

といちいちテクニカルにする代わりに

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

と平易に書くように Ruby を作ったのだ
このへんの動作が気になるなら

my_block = lambda do |e|
p e
end
[1,2,3].each(&my_block)

とでも書いてみるといい

495 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:58:26 ]
>>493
思考過程の筋が見えるなら特に問題はないと思われ
まあ、つまりは「勝手に省略せず詳しく書け」ということでしかないわけだが
若干のエスパー能力が要るから万人には勧められない

496 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 19:29:15 ]
理解としては>>486でまったく問題ないのになんでこんなことになってるんだ

497 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 20:58:03 ]
申し訳ありません。whyのrubyガイドが
最初の方は、とてもわかりやすかったのです。

読み進めていると、コードが出てきて、ruby ファイル.rbと実行しても
エラーが出たりするようになり、僕はアホなのだろうかと思って質問しました。

初心者向けとして適当でないようなので、もうすこし文法を押さえながら
読んでみようと思います。ありがとうございました。

498 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:29:17 ]
>>493
>do が何だかわかりませんレベルの人には来て欲しくないな

おまえは>>1を声に出して10回よめ。
この程度が我慢できないやつはこのスレくるな。

499 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:41:55 ]
でも>>493程度が我慢できない人は2chに来るべきじゃないよね。

500 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:45:19 ]
せめてネタ系のスレで頑張ってもらえるとありがたいんだけど
そうもいかないんだろうね

501 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 00:48:12 ]
rubyに限らず初心者スレッドは全てを受け入れる糞溜だと思ってる

502 名前:デフォルトの名無しさん [2009/10/02(金) 05:22:34 ]
日本語の文字抽出でうまい方法が分からず困っています。

抽出元のサンプルは下記の通り
11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69
上記サンプルのうち、「この、文字列を抽出したいんdesu.」の部分を抽出したいんです。
抽出対象:日本語、句読点、日本語文字列に付随する半角英数字、半角記号("テスト."等。空白類を挟んだら不要対象とする)
不要対象:半角英数字、半角記号、空白、"○"、"×"等

現在のコードは下記の通り

while line=gets
if /\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*/ =~ line
if $1 != " "
print "日本語抽出:", $1, $2, $3,$4,$5,$6,"\n"
end
end
end

実行結果↓
日本語抽出:○ × ::この&カ字列を抽盾オたいん

(続きます)

503 名前:デフォルトの名無しさん [2009/10/02(金) 05:25:20 ]
(続き)

if文の条件が大変なことになっているのは
if /(\W+)/ =~ line
としてしまうと最初の"○ ×"のみ抽出して終わってしまうためです。
プログラムとして力技で美しくないのは分かっています。
また、日本語が文字化けしてしまっています・・・文字コードの問題だろうとソース先頭に#!ruby -Ksを足してみましたが、
空白類の扱いが変わった?のと記号以外の文字類が表示されなくなりました。

抽出部分を綺麗にするにはイテレータで回せば良いかなと思っています。
→一文字ずつチェックしようと思いましたが、String#each_byteが全半角を問題なく捌けるのか問題が・・・

問題をまとめると
1:文字列の中から上記抽出対象のみ抽出したいが、力技で汎用性がないので改善したい
2:文字化けしてしまうが原因、対策が分からない
となります。

OSはWindows XP SP3でRubyのバージョンは1.8.6です。

長文乱文で分かりにくい質問となってしまい申し訳ありませんが、よろしくお願いします。



504 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 05:32:32 ]
まあrubyはメゾットの様なものが多いのも事実だけどな。
そこらの統一性の無さは、原理追求派よりも教祖信仰派のほうが多いってだけじゃないかと。
メゾットだからこうって寄りも、教祖がこう使う様に教えたから深く考えずに同じ様に使うのほうが、良いruby信者に成れる気がする。

505 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 05:36:40 ]
irb> s = "11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69"
irb> puts s.split[6]
この、文字列を抽出したいんdesu.

空白で区切られた7フィールド目という意味ならこれでいいのでは
フィールド内に半角空白が混じっても構わないという条件だととたんに面倒になるが

506 名前:503 [2009/10/02(金) 06:02:35 ]
>>505
レスありがとうございます。
すみません、確かにサンプルに限定すればそれで解決ですね。

ただ、やりたいのは日本語部分(日本語文字列に付随する記号類、英数字は抽出対象とする)の抽出なのです。
質問の書き方が悪かったのですが、おっしゃる通り、日本語列の中の空白、記号、英数字、
もしくは日本語列の先頭・末尾の半角英数字、記号類は抽出したいんです。
(日本語列と結合していない日本語以外(英数字、記号、空白類)は除外)

507 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 06:13:51 ]
結合ってなんだ?

508 名前:503 mailto:sage [2009/10/02(金) 06:21:11 ]
>>507
付随と同義です。ややこしくてすみません。
文字列の結ご・・・連結ですね。すみません。

509 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 06:46:02 ]
>>507
おそらく、セパレータとフィールドという概念がないんだと思う
だから、元データを作った人の意図を読むことができないし、説明もできてないから俺らもどうにもできん

たとえば、俺らは>>502を見たときに
「番号、マルバツ、マルバツ、英数字、時分秒、英数字、日本語入り文字列、年月日、時分秒、数字」
という空白で区切られた固定の何らかの意味を持った10項目(または年月日+時分秒の9項目)と読むが、
>>503にとってはおそらくそうではないのだろう
ひょっとしたら例示のために出しためちゃくちゃな文字の集まりなのかもしれない

空白の数には全く意味がなく、
形態素解析のように「空白で区切られた、日本語文字を含む文字の連なり」が欲しいのなら
split.find_all{|e| <eがShift_JISの日本語文字を含むということ> }
とすればよい
Shift_JIS (というかたぶん CP932)の日本語文字を含む条件を表す正確な正規表現はどっかから拾え

irb> s = "11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69"
irb> puts s.split.find_all{|e| /[\xa1-\xdf]|[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]/n =~ e}.delete_if{|e| /\A[○|×|△]\Z/s =~ e}
この、文字列を抽出したいんdesu.


510 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:01:18 ]
>>503
>>509のようにsplitで配列にしてからfind_allでもいいし
文字列に繰り返し正規表現をしたいのならscanてのもある
Array,String,Hash,Enumerableあたりのメソッドは軽くリファレンスに目を通しておくといいよ
へぇこんなのあるんだっていう程度でも使う時に思い出せる

511 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:02:44 ]
-Ksを指定するとShift_jis全角文字も\wでマッチするようになる

512 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:18:29 ]
>>511
「も」では駄目だろ
英数字記号だけの場合はマッチしてはいけない
irb> /\w/ =~ "あういえ".tosjis
nil
irb> $KCODE = 's'
irb> /\w/ =~ "あういえ".tosjis
0
irb> /\w/ =~ "a"
0

全角文字(と場合によっては半角カタカナ)にのみマッチする正規表現か、
英数字記号だけにマッチして全角区域に誤爆しないという正規表現が必要

513 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:32:08 ]
>>512
ああすまん-Ksにして結果が変わった原因ってことで書いただけなんだ



514 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:09:04 ]
ruby って、ライブラリやクラスメソッドの使い方を
覚える言語ってことですか?



515 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:10:33 ]
オブジェクト指向言語は大体そんなもんだ

516 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:26:59 ]
大抵のプログラミング言語において、文法なんて数時間で全部理解し終えるもんだからなあ。
後は当然ライブラリの使いこなしってことになるだろう。

517 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:32:04 ]
クラスメソッドよりもインスタンスメソッドのほうが多いよ!
とかそんな話を

別に覚えなくてもいいけど、その場合はライブラリに相当するものを全部自力で作ることになる
どっちか気に入ったほう選んでくれ

518 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:13:39 ]
Windows版のRubyって、OpenSSLも使えるんでしょうか。
知っている人がいたら教えてください。

519 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:22:50 ]
パッケージ次第だった気もするけど、基本的に使える

520 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:24:35 ]
>>518
推奨されてるパッケージでインストールする限りは使えるはず

他の人のWindows版でも絶対に使えるとは限らないのは他のOS版のRubyと同じ

521 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:42:25 ]
ありがとうございます。
RSAの仕組みを勉強するのにRubyを使うことにします。

522 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 14:40:48 ]
rubyでは、値がすべてオブジェクトということは
1という数値や"太陽パクパク"という文字列や、それらを代入した
number,sun_eaterといった変数もオブジェクトということですか?

number = 1
sun_eater = "太陽パクパク"


523 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 14:59:20 ]
>>522
整数とかはさすがに高速処理するように小細工を施してはありますが、
それらも含めオブジェクトは全部クラスのインスタンス(=オブジェクト)です

irb> p 1.class
Integer
irb> p "太陽パクパク".class
String

変数はオブジェクトについたラベルです
ラベル名 → オブジェクトID
というような対応表を Ruby が管理していて、
該当ラベルの変数が呼ばれたときにはその表の対応を参照して該当オブジェクトが使われます
変数というハコが入れ物オブジェクトとして存在するわけではありません

irb> p 1.object_id
3
irb> p "太陽パクパク".object_id
-605838888



524 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:06:21 ]
>>522
>rubyでは、値がすべてオブジェクトということは
>1という数値や"太陽パクパク"という文字列や、それらを代入した
>number,sun_eaterといった変数もオブジェクトということですか?

数値や文字列もオブジェクト。

ただし、「変数」はそれらオブジェクトを格納するもの(あるいはオブジェクトとひもづけるもの)であって、オブジェクトそのものではない。
そのへんは他の言語でも同じ。

525 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:08:38 ]
>>523
変数はオブジェクトじゃなくラベル。
あやうく、間違った認識で通り過ぎるところでした。
ありがとうございます。

526 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:10:25 ]
>>524
他の言語でも同じなんですね。ありがとうございます。

527 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:50:19 ]
C++、Perlでは宣言された変数自体がオブジェクトの実体であるケースもあるけどね
と、話をややこしくしてみる

528 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 17:55:56 ]
他言語がどうであれ、Rubyにおいて変数は箱ではなくラベルなのは間違い無い
沢山あるオブジェクトの中のいくつかに名前を付けるのが変数
1つのオブジェクトに複数の名前があることも珍しくないし
無名のまま役割を終えるオブジェクトも存在する

529 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 17:58:09 ]
だいなみっくえいりあしんぐ

530 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:04:25 ]
2chまとめエディターを作っているのですがどうにもこうにもならなくなってしまったのでヒントをください。
やろうとしていることは
DATの中身をコピペで入力

下ごしらえの置換
アンカー順に並べ替える
チェックボッックスによるdivのclassの追加(文字色を変えたり大きくしたりするため)

ソースを出力
というものです。

ひとまずここまでひとりでつくりました。
tomiya.bne.jp/cgi-bin/upup/src/myg_l2344.zip.html
やっていることは
簡単な置換とレスに1〜1001までの番号をハッシュとして付ける
ことまでです。

教えて欲しいことは
アンカー順に並べ替える方法
 本文をスキャンして「>>○○」を抽出しハッシュのkeyに代入?
チェックしたレスのみ出力する方法
チェックボックスでdivのclassを追加
 <div class="res">を<div class="res aka">や<div class="res aka deka">などに置換?
です、見当がつきそうな方はどうかご教授ください。

531 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:26:40 ]
オブジェクトについて、もうひとつ質問です。
class Gohan
def caree
print "今日のご飯はラーメンだ\n"
end
def natto
print "朝飯は納豆だ\n"
end
end

yuhan = Gohan.new
yuhan.caree

asamesi = Gohan.new
asamesi.natto

この場合、yuhanやasamesiがオブジェクトになるのでしょうか?



532 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:29:10 ]
ARGVで漢字のフォルダ名が展開できず困っています。

英字だと

>ruby -e "p ARGV" hon/*
["hon/新規テキスト ドキュメント.txt"]

となってうまくいきますが、漢字だと

>ruby -e "p ARGV" 本/*
["本/*"]

となってしまい、フォルダ内の新規テキスト ドキュメント.txtが展開されません。
どうすれば展開できるかご教示ください。

OSはWindows XP SP3です。
>ruby -v
ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]

533 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:31:30 ]
Ruby標準のCGIクラスって、どれぐらいの大きさのデータを受け取れるのでしょうかね?
DBの内容をWeb上からバックアップ(DL)したり、復帰させたり(UP)するシステムを考えてるのですが
バックアップするときは、ストリーミングで流せばいいような気がするけど
復帰させるときは、大量のデータが一度メモリに溜め込まれる気がします

たとえば、サーバの実メモリを超えるようなデータを受け取ったときに処理できるのか?っていうのが疑問です。
また、なにか回避策が有るのでしたら、教えてください。



534 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:35:45 ]
ワイルドカードの展開ってシェルの役割じゃ・・・?
と思ったらWinではやってくれないのか

535 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:39:19 ]
>>531
>>523


536 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:42:14 ]
>>532
ARGV の処理は環境依存
コマンドプロンプトで

DIR 本/*

とやって、望みの出力が得られなければ ARGV では無理というかコマンドプロンプトの使い方の知識が足りない

537 名前:532 mailto:sage [2009/10/02(金) 18:50:17 ]
>>536

それはうまくいきます。/の代わりに\ですが。

>dir 本\*
ドライブ D のボリューム ラベルは以下略

>ruby -e "p ARGV" hon\*
["hon/新規テキスト ドキュメント.txt"]

英字は/でも\でもok

>ruby -e "p ARGV" 本\*
["本\\*"]

漢字はどっともだめ

538 名前:532 mailto:sage [2009/10/02(金) 18:55:24 ]
書き忘れ

>ruby -e "p ARGV" */*
["hon/新規テキスト ドキュメント.txt", "本/新規テキスト ドキュメント.txt"]


539 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:56:09 ]
>>530
#!/usr/local/bin/ruby -Ks
class Ch2Thread
def initialize(file)
@dat = file
parse
end
attr_reader :data, :title, :size

def [](v); @data[v]; end
def parse
@data = Array.new
arr = @dat.to_a
arr.each_with_index do |res, i|
@data << parse_res(res, i)
end
@title, @size = arr[0].split(/<>/)[-1], @data.size
end
def parse_res(res, resno)
e = res.split(/<>/)
d = e[2].split
return {:no => resno + 1, :name => e[0], :mail => e[1],
:date => "#{d[0]} #{d[1]}", :id => d[2], :be => d[3], :res => e[3]}
end
end

sure = Ch2Thread.new(File.open('./sample.dat').read)
puts "Title => #{sure.title}"
sure[0..3].each do |res|
res.each{|k,v| puts "#{k} => #{v}"}
end

540 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:59:22 ]
>>532
WinXP SP2 + ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
だけど展開してくれた。なんなんだろうね

541 名前:540 mailto:sage [2009/10/02(金) 19:02:24 ]
SP3だった・・・

あとコマンドプロンプトから動かしてる?
専用エディタとかから走らせたりしてると挙動が違ってくるかも

542 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:03:55 ]
>>532
ren 本 書
ruby -e "p ARGV" 書/*

1.9のglob周りは多バイト文字に関しては腐ってるね。

543 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:04:15 ]
1.9.1リファレンスより
>標準のシェルがワイルドカードを展開しない環境 (Win32)では、Ruby インタプリタが自前でワイルドカードを展開して Kernel::ARGV に設定します。
らしいからできるはずだと思うけど

うち(Vista コマンドプロンプト)でも
1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]だと 本\* 本/* どっちも認識してくれるけど
1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]だとできなくなってるな



544 名前:532 mailto:sage [2009/10/02(金) 19:11:36 ]
ご確認いただきありがとうございます。
うちも1.8.7はokでした。

1.9.1で通る漢字もありました。
>ruby -e "p ARGV" ホン/*
["ホン/新規テキスト ドキュメント.txt"]

>ruby -e "p ARGV" 川/*
["川/新規テキスト ドキュメント.txt"]

>ruby -e "p ARGV" 山/*
["山/新規テキスト ドキュメント.txt"]

545 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:14:53 ]
Ruby Freaks Lounge 第8回 Windows版Ruby 1.9で培う危機回避スキル(前編)
gihyo.jp/dev/serial/01/ruby/0008

Rubyで日本語ファイル名と聞いた瞬間に悪寒がする漏れは正しかった

546 名前:539 mailto:sage [2009/10/02(金) 19:16:56 ]
とりあえずレスの全データを扱いやすい形に整えないと見通し的にどうにもならないような気がしたので、
たとえばこんなクラスを作る
動作は超適当
変数名も適当
レス本文のHTMLタグとかを消したい場合は parse_res のとこで適当に追加してくれ
クラスでなくてもでっかいハッシュや配列を作るのでもいいんだけど面倒だったのでクラスにした

547 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:19:00 ]
日本語とかマジで廃止しろよ
100年前に廃止してくれてれば今頃こんな苦労することも無かった

548 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:23:46 ]
>>547
PC/AT互換機使うのいますぐやめろ
元凶はそれだ
ずっとNECなら日本語処理は完璧だったのだ

549 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:24:14 ]
たいした苦労もしてないくせに

550 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:25:48 ]
悪いのはシフトJISだよ
日本語は悪くないよ
EUCばんざーい

551 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:29:40 ]
もはや現実逃避しかないのか・・・・・・w

552 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:35:07 ]
松江市さんは、rubyのドキュメントをしっかりしたものに
してください。

553 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:40:25 ]
>>533
>たとえば、サーバの実メモリを超えるようなデータを受け取ったときに処理できるのか?っていうのが疑問です。

添付ファイルデータなら、cgi.rb が一時ファイルに書き出してくれるので、実メモリを超えても大丈夫なんじゃないかなあ。

>また、なにか回避策が有るのでしたら、教えてください。

そのような場合は、cgi.rbを使わず、自前で$stdinからPOSTデータを読み出したほうがいいと思います。






554 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:58:15 ]
>>548 78JISに拘泥して混乱を広げた元凶だということも知らずに呑気な馬鹿だ。

555 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:01:03 ]
>>542 で必要最低限のことは全部触れられていそうだな

「本」をShift_JISとして見ると2バイト目が { なので、rubyのglob特殊文字になる。
というわけで、1.9では、2バイト目がrubyのglob特殊文字になる文字列をコマンドライン引数に与えると危ない、と。

556 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:04:04 ]
文字のエンコードが1種だけなら問題ないという話だろ

557 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:14:38 ]
勉強せずにスラスラ英語の文書読めるプログラマと、毎日英語と奮闘してるプログラマ
どれだけ差が開くと思う?
つまり日本がこの業界でアメリカに勝てないのは必然だ

558 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:20:16 ]
単なるrubyのバグの話でしょ

559 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:24:39 ]
Rubyに限らず
引数の文字コードって
どんなふうに判別するものなんだろう?

560 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:35:10 ]
引数の文字列自体はWindows-31Jにしてくれてるぞ

561 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:35:11 ]
インターネット時代なんだしJISで統一すれば何もかもうまく逝ってけどな。
いまからならOSもメールもウェブもUTFで統一。

562 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:42:47 ]
文字コードとかごちゃごちゃし過ぎて分からんから指定できるところはとりあえず全てUTF-8にしてる。
特に問題が起きたことはない。

563 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:43:48 ]
Win32で1.9.2プレビュー1をビルドしようとしたができんw
clにminiprelude.cがないぞゴルァって言われる
あるしちゃんとインクルードパスにも入ってるのに・・・



564 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 01:45:15 ]
>>546
おお、ありがとうございます。
しかしこれからどうしたらいいのか全然アイディアが浮かばないんです。
どういう方向性でいけばいいのでしょうか。

565 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 02:06:27 ]
>>564
わかんねーときは、わかる機能だけで作ってみるといいよ
ゴールを遠くに設定しすぎてるから方向わからないんだよ、チェックポイント作りまくれ

566 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 05:59:16 ]
いきなり無茶し過ぎなんだろ。小さい所から順々にステップアップしないと。

567 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:37:28 ]
とあるフォルダの中のファイル名をずらーっとデータベースに入れたのは良いんですが、
この後ファイルがそのフォルダに追加されるごとにデータベースも更新したいです。
差分を取る方法を教えてください。

568 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:39:12 ]
>> [1,2,3]-[1]
=> [2, 3]

ファイルリスト程度ならオンメモリで余裕だろう

569 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:49:58 ]
データベース自体は Ruby 以外を使うか、pstore に保存して cron とかで毎回読んでくれ

570 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 15:23:49 ]
>>565
>>566
なるほど、そういう考えもありますね。
もうちょっとこつこつやるべきでした、ありがとうございます。

571 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:30:46 ]
requireとかを使って外部のファイルを読み込むときですが

main.rb
class Main
def initialize
@foo = Array.new
require 'sub.rb'
end
end

main = Main.new
[EOF]

sub.rb
@foo.concat ['hoge']
[EOF]

みたいな場合にsub.rbからmain.rbの@fooにアクセスするにはどうしたらいいですか?
よろしくお願いします

572 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:40:01 ]
rquireは、対象コードをその位置に展開するメソッドではない。
中身が何でも気にしないなら eval File.read('sub.rb') とでも。


573 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:43:37 ]
>>571
require はトップレベルにファイルを「追加」する
ファイルを物理的に大きな1枚のファイルにする効果しかない(いや物理的って変だが)

メソッドの「奥深く」で require しても、クラス定義の外で普通に require したのと何も変わらない
それと、Ruby では、単純な行単位の切り取りを行うことはできない

現在のクラスにメソッド定義内で機能を追加するには、たとえば module の include を使う
メソッド単位でしか追加できないので、そこは要領よく機能を分ける

# sub.rb
module Sub
def add_hoge
@foo.concat ['hoge']
end
end

# main.rb
require 'sub.rb'

class Main
include Sub
def initialize
@foo = Array.new
add_hoge
end
end
p Main.new.instance_variable_get('@foo')




574 名前:571 mailto:sage [2009/10/03(土) 19:57:00 ]
>>572,573
レスありがとうございます。言葉足らずですいません・・・
sub.rbにはclassも書いてあるのでその場に展開されるとエラーになります・・・
sub.rbに書いてあるクラスをsub.rb内で初期化してそのオブジェクトをmain.rbの
方に持ち帰りたいです(プラグインシステムみたいな感じ)
グローバル変数を使えば出来るようですがあまりスマートじゃない感じですので
もうちょっとすっきりする方法があればと・・・

よろしくお願いします

575 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:16:58 ]
class Main
  def initialize(plugin_name)
    @foo = Array.new
    require plugin_name
    plugin_mod = Object.const_get(plugin_name.capitalize)
    extend plugin_mod
    do_something
  end
end

Main.new('plugin1')

# plugin1.rb
module Plugin1
  def do_something
    @foo.concat('hoge')
  end
end





576 名前:571 mailto:sage [2009/10/04(日) 15:48:48 ]
>>575
extendで何とかなりました
ありがとうございました

577 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:06:53 ]
ちょっとした質問です。

items.each{ |x| x.destroy }
というようなこう全部の要素にたいしてメソッドを呼ぶのを
もっと簡単に書く方法があったような気がしたのですが、ご存知ありませんでしょうか?

Ruby 1.8.7です。

578 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:09:46 ]
&:destroy


579 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:11:34 ]
>>578
それだ!

items.each(&:destroy)

でいけましたありがとうございました。

580 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:21:21 ]
1.8.6 では動かないから配布には注意な

581 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 21:11:40 ]
1.8.6 なんてもう使わない方がいいよ

582 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:36:26 ]
>>581
なんで?

583 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:49:02 ]
>>581さんがサーバソフトウェアのリプレースを行ってくれるそうです



584 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:38:28 ]
感謝の印におっぱい見せろ

585 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:39:11 ]
ごばくった。すまん






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

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

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