Ruby初學者スレッド Part 9

このエントリーをはてなブックマークに追加
1紅寶石
まずはマニュアル

マニュアル
http://www.ruby-lang.org/ja/man/
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
逆引きRuby
http://www.namaraii.com/rubytips/
Ruby リファレンスマニュアルの Windows HTML Help版
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
Rubyリファレンスマニュアル刷新計画
http://doc.loveruby.net/


前スレ
Ruby初心者スレッドPart8
http://pc8.2ch.net/test/read.cgi/tech/1159424939/

>>2-10
2デフォルトの名無しさん:2006/11/21(火) 08:35:57
「初心者」で検索できないから板として許可できない
3デフォルトの名無しさん:2006/11/21(火) 08:39:22

Rubyについて Part 24
http://pc8.2ch.net/test/read.cgi/tech/1159315598/
【Agile】Ruby on rails相談所 part2【DRY】
http://pc8.2ch.net/test/read.cgi/php/1151254378/
RUBYの宿題教えてください。
http://pc8.2ch.net/test/read.cgi/tech/1106572657/
【最高言語】 Rubyist Magazine創刊 【ルビま!】
http://pc8.2ch.net/test/read.cgi/tech/1094825807/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc8.2ch.net/test/read.cgi/tech/1155031689/
4デフォルトの名無しさん:2006/11/21(火) 08:39:54
5デフォルトの名無しさん:2006/11/21(火) 08:41:42
Ruby Home Page
http://www.ruby-lang.org/ja/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
日本Rubyの会 公式Wiki - 日本Rubyの会Wiki
http://jp.rubyist.net/

RAA - Ruby Application Archive
http://raa.ruby-lang.org/
RubyForge
http://www.rubyforge.org/

Matzにっき … Ruby作者の日記
http://www.rubyist.net/~matz/
Ruby hotlinks 五月雨版 … Ruby関連の日記やblog
http://www.rubyist.net/~kazu/samidare/

Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2
<rubyXML/>
http://www.rubyxml.com/
Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/
6デフォルトの名無しさん:2006/11/21(火) 12:55:44
Rubyコミュニティの特徴が遠回しに表れたスレタイ
7デフォルトの名無しさん:2006/11/21(火) 12:57:06
キ○○イが寄ってきやすい、とかか。
8デフォルトの名無しさん:2006/11/21(火) 13:11:48
凝る対象がスタート地点から間違えてるところとか
9デフォルトの名無しさん:2006/11/21(火) 14:23:48
Ruby初信者スレッドになる日も近いな
10デフォルトの名無しさん:2006/11/21(火) 14:44:30
Ruby/NArrayを使いたいのですが、導入方法がわかりません。
ドキュメントには、
Rubyの標準的な拡張ライブラリと同じです。ソースを展開したディレクトリで、

ruby extconf.rb
make
make site-install
(または make install)

と実行します。

とあるんですが、windowsXPなのでmakeが使えずインストールできません。
11デフォルトの名無しさん:2006/11/21(火) 15:30:39
じゃ、nmake。
12デフォルトの名無しさん:2006/11/21(火) 15:41:42
>>11
それも認識されません。
13デフォルトの名無しさん:2006/11/21(火) 15:42:59
じゃ、諦めろ。
14デフォルトの名無しさん:2006/11/21(火) 15:43:45
↓これにnmake付いてるYO

http://www.microsoft.com/japan/msdn/vstudio/express/visualc/
Visual C++ 2005 Express Edition 日本語版
Platform SDK
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/

Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
15デフォルトの名無しさん:2006/11/21(火) 15:52:24
ruby -v も知らせないような奴にいきなりそんなもん教えても無駄無駄
16デフォルトの名無しさん:2006/11/21(火) 19:15:52
まあ、こればっかりは導入マニュアルが悪いと言えなくもない
makeが標準で入ってるという前提でマニュアルを書くべきではない


makeの導入の仕方とかいちいち書くのも面倒だけどな
17デフォルトの名無しさん:2006/11/21(火) 20:00:21
そう言っても、拡張ライブラリ作者が、rubyが動くほとんどの
プラットフォームでのそれぞれのコンパイル方法を説明する
ってのも無茶だろう。
18デフォルトの名無しさん:2006/11/21(火) 20:14:26
これはRubyに限った話ではないんだが、総じてマニュアル書くの下手だよな

「インストールに必要なもの」という項目くらいあってもよさそうなもんだんだが、
「とにかくmakeして下さい」といった説明しかなかったりする

そりゃmakeでは必要なプログラムやライブラリのチェックはしてくれるが、
make自体がない可能性を考慮してないとか
いちいちmakeで躓くまで待たないとわからんとかそういうのはよくないだろ

makeのインストール方法の説明なんざ自前でする必要はない
とにかく、makeを始めとしてあれとこれが無いと動かない、ということはちゃんと文章化しろ
19デフォルトの名無しさん:2006/11/21(火) 21:59:06
make すら無い環境なんか使ってるクズがゴチャゴチャ偉そうに文句言ってんじゃねえよ。
20デフォルトの名無しさん:2006/11/21(火) 22:15:17
うーん、そんなレスで乱せる安いスレだと思われてるのか、ちょっとショックだ
21デフォルトの名無しさん:2006/11/21(火) 22:20:49
>>18
そう思うなら、お前が全部やればいいじゃない。
おまえ以外は誰もそんなもん必要ないからさ。
22デフォルトの名無しさん:2006/11/21(火) 22:24:10
はっきり言ってRubyはスゴイです。
間違いなく一生遊べるおもちゃです。はい。
23デフォルトの名無しさん:2006/11/21(火) 22:25:16
ああっいい!Rubyになりたい!!!
24デフォルトの名無しさん:2006/11/21(火) 22:26:58
もう一度!もう一度っ!!
25デフォルトの名無しさん:2006/11/21(火) 22:34:44
makeしろって書いてありゃ、よほどの池沼じゃない限りmakeが必要なことくらいはわかると思うが
26デフォルトの名無しさん:2006/11/21(火) 22:55:59
>>18
極めて正しい

が、個々のメンテナに求めるクオリティではないな
マニュアル書式を統括すべきだろう
それこそDebianパッケージみたいに
27デフォルトの名無しさん:2006/11/21(火) 23:48:17
>>18
お前、自分でやってみろよ。ごくたまに居るんだよな、こういう図々しい奴。
28デフォルトの名無しさん:2006/11/22(水) 00:08:33
>>27
でも、自分の環境だから、作成者本人ならやれるぞ、これ。それほど難しい作業でもない。
それこそ「やってみればわかる」。
29デフォルトの名無しさん:2006/11/22(水) 00:11:39
つうか、>>18を否定すると>>10はバカという話がもれなくくっついてきて
「makeすら自分で考えて用立てできん奴は使わんでよし」ということにならんか
30デフォルトの名無しさん:2006/11/22(水) 00:20:48
流石ハッカー御用達のRubyだな!
31デフォルトの名無しさん:2006/11/22(水) 00:51:23
まあそのへんは昔からだしな
説明だの事前用意だのの面倒くさがりがRubyを選ぶのだろう
ドキュメントやマニュアルの不親切や不備は直りそうにない
今年の6月だか7月にはどうにかなってるはずだったんじゃないん?
32デフォルトの名無しさん:2006/11/22(水) 00:56:50
英語サイトは親切だよ。
33デフォルトの名無しさん:2006/11/22(水) 02:51:35
テンプレを読まない>>31が言っても説得力ないなあ
34デフォルトの名無しさん:2006/11/22(水) 08:32:57
>>28
「自分の環境だから」って、自分の環境にmakeがあるからそういうドキュメントになってんじゃないの?
なんか読み違えてる?
35デフォルトの名無しさん:2006/11/22(水) 09:03:35
make がデフォで入ってない環境も考慮してドキュメント書くなんてダルそうだな。
そういう所では make 以外にも足りない物が色々ありそうだし。

頑張って書いたとしても、「それほど難しい作業でもないから書いて当然だろ」とか
言われちゃうんだろうなorz
36デフォルトの名無しさん:2006/11/22(水) 09:33:33
ruby-lang.orgにWindowsユーザー向けのチュートリアル用意すれば済む話じゃないの?
37デフォルトの名無しさん:2006/11/22(水) 09:50:36
で、結局のところ、>>10 の使ってるrubyは何版なわけ?
38デフォルトの名無しさん:2006/11/22(水) 10:15:27
つーかWindowsではふつうは用意されてるバイナリを使うんじゃないのか?
39デフォルトの名無しさん:2006/11/22(水) 10:16:10
と思ったら元の話はRuby自体じゃなく拡張ライブラリか。
40デフォルトの名無しさん:2006/11/22(水) 11:06:40
>>35
マニュアルなんだし必要なものくらい最低限明記しとけよ、という主張なんだろうし、
いちいち入手方法や導入方法にまで言及する必要はないのでは。
箇条書き程度だろう。
てか、適度に箇条書きしてるマニュアルのほうが多いような気もするが。


なんて言ってると>>10の拡張ライブラリにのマニュアルには
REQUIREMENTSとかの項がしっかり書かれてたりするんだよな
41デフォルトの名無しさん:2006/11/22(水) 12:13:39
元々RubyはいってるMac買えばOK.
頭使えない人はお金を使うべし。
42デフォルトの名無しさん:2006/11/22(水) 12:14:25
と思ったら元の話はRuby自体じゃなく拡張ライブラリか。
43デフォルトの名無しさん:2006/11/22(水) 23:40:46
質問させてください。
コマンドラインで使うスクリプトを書いています。
スクリプトにオプションを渡したいのですが、
オプションの処理をおこなうライブラリはあるのでしょうか。
44デフォルトの名無しさん:2006/11/22(水) 23:43:36
OptionParser
45デフォルトの名無しさん:2006/11/23(木) 00:11:29
#!/usr/bin/ruby

p ARGV

-----

./test.rb -a aaa -b bbb

["-a", "aaa", "-b", "bbb"]


これで用が済む場合も少なくない
4643:2006/11/23(木) 00:41:02
>>44
>>45
ありがとうございます。
やってみます。
47デフォルトの名無しさん:2006/11/23(木) 12:00:23
optparse
48デフォルトの名無しさん:2006/11/23(木) 12:20:21
Rubyスクリプトのメモリ使用量や占有CPU時間を調べる方法はありますか? OSはLinuxです。

「readlinesで一気に配列として読み込むよりeachで各行処理したほうがこんなにメモリに優しいじゃん」
とかいうことを数値として実感して納得したいです
49デフォルトの名無しさん:2006/11/23(木) 12:28:13
参照カウントじゃないからGCを動かしまくらないと・・・
50デフォルトの名無しさん:2006/11/23(木) 12:34:40
シェルからコマンドとして実行して全体量を調べてもらって、readlines版とeach版の差分見れば?

…いや、どうやればコマンド単体のメモリ使用総量を調べられるのかわかんないけど
topを注視し続けるというのも現実的ではないしなあ
51デフォルトの名無しさん:2006/11/23(木) 14:33:01
ulimitでいろいろメモリ関係に制限をかけて実行させてみるとか。
多くメモリを食う方はより緩い制限で実行できなくなるだろう。

と思ったが、どのオプション使えばいいんだ。
52デフォルトの名無しさん:2006/11/23(木) 16:25:36
time コマンド使えば良いんじゃないかな。
bash組込みのtimeじゃなくてtcshのtimeとか/usr/bin/timeとか。
53デフォルトの名無しさん:2006/11/23(木) 16:27:28
>>48
libgtop2
54デフォルトの名無しさん:2006/11/23(木) 18:11:46
文字を数字に置き換えて配列にする処理をしているのですが、
効率のいいやりかたを教えてください。

例えば、"a"を2に、"b"を6に、"c"を11に、"d"を15に置き換える場合、
"aabdc"は[2,2,6,15,11]になるような処理です。
今は1文字づつcase〜whenで処理しています。
55デフォルトの名無しさん:2006/11/23(木) 18:29:34
こういうのはどうだろう。

h = {?a => 2, ?b => 6, ?c => 11, ?d => 15}
p "aabdc".unpack("C*").map{|c| h[c]}
56デフォルトの名無しさん:2006/11/23(木) 21:49:28
ハッシュで表引きするところが肝なのであとはバリエーションでしかないけど、
こんなのも。

(hのキーが?aとかの場合)
require 'enumerator'
"aabdc".enum_for(:each_byte).map{|c| h[c]}

(hのキーが"a"とかの場合。Ruby 1.9だと ?a == "a" だっけ?)
"aabdc".split(//).map{|c| h[c]} # //は空の(中に1文字もない)正規表現

# irbから動かしてString.each_charがないと騒いだのは秘密。
# ActiveSupportめ。

57デフォルトの名無しさん:2006/11/23(木) 21:54:31
define_method でブロックを受け取るメソッドを定義したいんですけど、なんとかなりませんか?
よろしくおねがいします。
58デフォルトの名無しさん:2006/11/23(木) 21:59:22
それはこっちのセリフだ
59デフォルトの名無しさん:2006/11/23(木) 22:05:29
書きかけの自作メール振り分けプログラムにこんなの(以下は断片)があった。

def register_action(sym, &block)
__send__(:define_method, sym) do |*options|
options = options.shift || {}
block.call(options)
end

register_action(:to_folder) do |options| ... end

引数の受け取り方になんか制限つきそうな気が……

60デフォルトの名無しさん:2006/11/23(木) 22:26:47
>>59
トン! なるほどん
61デフォルトの名無しさん:2006/11/23(木) 23:21:30
>>55
ありがとうございました。
時間も半分以下に短縮できました。
62デフォルトの名無しさん:2006/11/24(金) 00:32:00
Mac板にRubyスレないのでここでいいのかな?

まったくの初心者なんですけど(;・∀・)
ターミナルに ruby ファイル名.rb でリターン押しても
ruby: No such file or directory -- ファイル名.rb (LoadError)
ってなります ファイルの保存場所とかにルールとかでもあるのですか?
63デフォルトの名無しさん:2006/11/24(金) 00:44:18
>>62
カレントディレクトリは確認した?
pwd
64デフォルトの名無しさん:2006/11/24(金) 00:50:38
>>63
カレントディレクトリ!?
すいませんほんとに初心者なんで…絶対パスの事かな

仮にデスクトップにそのファイルがあるならばそれを指定しなければダメと言うことですか?
ターミナル自体始めて動かしたもので
65デフォルトの名無しさん:2006/11/24(金) 01:10:44
>>63
ヒントサンクス

おお 自己解決しました Ruby自体の問題ではなくターミナルの問題でした ターミナルちっと勉強するかorz
ファイルの場所をちゃんと指定して大丈夫でした

66デフォルトの名無しさん:2006/11/24(金) 03:09:21
MacならファイルをFinderからターミナルにドロップすれば絶対パスが出てくる。
67デフォルトの名無しさん:2006/11/24(金) 11:56:39
>>65
Rubyに限らず,Macを使いこなすにはターミナルの使い方(bash シェルの使い方)に詳しくなっておくと便利だよ。
かくいう自分は,ターミナル上でRubyを楽しんでるマカーです。
ちょっとした日常の繰り返し作業も,AppleScriptやシェルスクリプトではなくRubyスクリプトを書いて処理してます。
68デフォルトの名無しさん:2006/11/24(金) 15:07:23
スクリプトファイルの冒頭に、
#!/usr/bin/ruby -Ku -Ilib
とかくとエラーになる。ただ、
#!/usr/bin/ruby -Ilib -Ku
と、順序を変えると大丈夫。コマンドラインだと順序関係なく動くんだけど…
何か制約があるの?それとも前者だとオプション解釈上問題でも生じてる?
69デフォルトの名無しさん:2006/11/24(金) 16:42:45
~$ ruby "-Ke -Ilib"
ruby: invalid option - (-h will show valid options) ←たぶんこのエラーが出たはず
~$ ruby "-Ilib -Ke"
ruby: Interrupt   ←エラーなし、終了のためにここでEOF
~$

スクリプトの第1行目(俗称shebang)では、複数の引数は解釈が保証されない。
たとえばLinuxでは「空白後をひとまとめにした1個の文字列」として渡される。

#!/usr/bin/env ruby -Ke がうまく動作しないのもこれが理由。

ということで、「Rubyでは-Kオプションを最初以外に書いておくとたまたま動く」が正解。
70デフォルトの名無しさん:2006/11/24(金) 16:48:37
補足。

Rubyの場合、起動したインタプリタが改めて#!行を自分で解析して
自前である程度は処理してる。

$ cat hoge
#!/bin/sh -x
echo "$@"
$ ruby hoge
とかやると、rubyがshをexecする。
71デフォルトの名無しさん:2006/11/24(金) 17:15:45
perl.pl
---------------------
#!/usr/bin/perl
die "OOPS! IT'S PERL!"
---------------------

~$ ruby ./perl.pl
OOPS! IT'S PERL! at ./perl.pl line 2.


なにこの素敵無駄機能
72デフォルトの名無しさん:2006/11/24(金) 18:05:41
>>69
判りやすい解説thx。-KuIlib としてやったらうまくいった。
-IlibKuだとダメみたい。libじゃなくてlibKuディレクトリを探しにいっちゃうんだろうなぁ。
こんなことドキュメントに書いてあったかな…。

くっつける処理が謎だ。普通にくっつけたら、
先の例、前者のほうが「たまたま」動きそうなもんだが…。

それと、-Cと-Iを同時指定とかしたいときはどうするんだろう…?
73デフォルトの名無しさん:2006/11/24(金) 18:40:46
>71
__END__(Perlでもスクリプト終端)を
組み合わせると混ぜコード書けるが
素敵過ぎてオススメできないんだぜ
74デフォルトの名無しさん:2006/11/24(金) 21:36:07
>>72
shebangに書かない。
シェルスクリプトから起動するようにする。

#!/bin/sh
ruby <好きなだけオプション> <Rubyスクリプトファイル>

こんな感じ。
あんまりよろしくないけど。
ってか、そんなにオプション付けたくなるようなことってあるか?
俺の場合は、あって-Kくらいだけどなー。
-lも-CもRubyのスクリプト内でできるしな。厳密には意味が違うかもしれんが。
75デフォルトの名無しさん:2006/11/25(土) 01:19:34
>>69
はじめてしった

スクリプトの第一行目は、
#!/usr/bin/ruby -Ku -Ilib
と書いても
#!/usr/bin/ruby "-Ku -Ilib"
とひとくくりにされるわけね・・・

引数が一個だと、「一応は」動いているわけだ
76デフォルトの名無しさん:2006/11/25(土) 10:18:58
>75
違う。そこは実装依存。
Linuxはそうなるというだけで、ほかのUNIXだと適切に解釈してくれるものもある。
77デフォルトの名無しさん:2006/11/25(土) 14:38:06
間違いなく言えることは、
「shebangでは複数の引数を書くべきではない」
ということ。
どうしても複数の引数を与えたい場合は、>>74のように一ひねりすること。
78デフォルトの名無しさん:2006/11/25(土) 15:04:54
>>76
そうなん?
これって、どのレベルで決定されるものなんでしょ?
OS?shell?ruby?
79デフォルトの名無しさん:2006/11/25(土) 16:19:54
Ruby/Tkをサブルーチン的に使いたいので教えて下さい。概要は後記のように,
MAINスクリプトから,SUBスクリプトに値(オブジェクト)を受け渡ししたいのですが,
いろいろサンプルを読んでもウィジェット側からサブルーチンを呼び出す方法しか無く,
その逆の方法の参考がありません。
Ruby/Tkを子プロセス的というか関数的に使うにはどうしたらよいでしょうか?

#!ruby
# MAIN
require 'sub.rb'
include Submodule
val = String.new
result = sub(val)
resultについての処理
...
__END__

#!ruby
# SUB
moduel Submodule
require "tk"

def sub(val)
v = TkVariable.new(val)

TkRadioButton.new { text 'top'; variable v ; value 'top'; anchor 'w'
pack('side' => 'top', 'fill' => 'x')}
TkRadioButton.new { text 'middle'; variable v ; value 'middle' ; anchor 'w'
pack('side' => 'top', 'fill' => 'x')}
TkButton.new { text 'Quit' ; command 'exit' ; pack }
Tk.mainloop
end
__END__
80デフォルトの名無しさん:2006/11/25(土) 16:29:48
>>78
shebang の処理は kernel が行ってるはず
81デフォルトの名無しさん:2006/11/25(土) 17:43:35
開いたファイルに文字を書き込む場合はどうしたらよいのでしょうか?

openメソッドをwモードでファイルを作成して
どうすればよいのでしょうか?
82デフォルトの名無しさん:2006/11/25(土) 17:48:31
>>81
>>1の逆引きRuby見たか?
83デフォルトの名無しさん:2006/11/25(土) 18:10:10
>>81
はい。
.writeメソッドではないですし。
84デフォルトの名無しさん:2006/11/25(土) 18:17:39
85デフォルトの名無しさん:2006/11/25(土) 18:42:18
>>84
すみません。ありがとうございます。無事解決いたしました。

また、続きの質問なのですがこのようなプログラムで実行すると
出力ファイル名が、outputになります。標準入力から入力した文字にしたかったのですが・・・

output = $stdin.gets.chomp
up = File.open("output","w")

"output" を"#{output}" にして式展開すると入力した文字になりますが
#{} をしなくて入力した文字にすることはどうすればよいのでしょうか?
#{}だと面倒なのですが・・
86デフォルトの名無しさん:2006/11/25(土) 18:44:15
>>85
"output" のクォートを取ってみな
87デフォルトの名無しさん:2006/11/25(土) 23:42:37
>78
その三者で言えば OS。 shebang 行の解釈はシステムコールがやる。どっちみち77が正しい。
88デフォルトの名無しさん:2006/11/26(日) 17:07:36
>>79
そりゃexitしたらそれ以上実行されんわな。
89デフォルトの名無しさん:2006/11/26(日) 17:20:09
subから何も返してないし。

module Submodule
  require "tk"

  def sub(val)
    v = TkVariable.new(val)
    root = Tk.root

    TkRadioButton.new {text 'top'; variable v; value 'top'; anchor 'w'
      pack('side' => 'top', 'fill' => 'x')}
    TkRadioButton.new {text 'middle'; variable v; value 'middle'; anchor 'w'
      pack('side' => 'top', 'fill' => 'x')}
    TkButton.new {text 'Quit'; command {root.destroy}; pack}
    Tk.mainloop
    v.value
  end
end

include Submodule
result = sub("")
p result
90デフォルトの名無しさん:2006/11/26(日) 18:17:06
どうせRubyスクリプト書いたことないんだろうな、と思う
91デフォルトの名無しさん:2006/11/26(日) 18:58:38
その気持ちはわからんでもない

Rubyスクリプトをある程度書けるようになった人で
GUIがどうしても必要になった人が仕方なく止むに止まれぬ理由で使うのがRuby/Tkだよな

少なくとも、Ruby部分で躓くような人はまだ使ってはイカン
92デフォルトの名無しさん:2006/11/26(日) 19:19:29
文字を置換したいのですが

文字列中のAをBに、EをFに、MをNに、OをPに 置換したいのですが
どうすればできるのでしょうか?
gsubメソッドだと
string.gsub(/AEMO/,'BFNP') じゃ、AEMOをBFNPと固まった文字列で置換してしまいます。
一度で各文字を置換指定するにはどうしたらよいのでしょうか?
93デフォルトの名無しさん:2006/11/26(日) 19:30:39
1. gsub を4つ繋げる
2. gsub にブロックを渡して、マッチした文字ごとに分岐する処理を書く
3. tr を使う
http://www.ruby-lang.org/ja/man/?cmd=view;name=String#tr

"ABCDEFGHIJKMNOPQRSTUVWXYZ".tr("AEMO", "BFNP") # => "BBCDFFGHIJKLNNPPQRSTUVWXYZ"
94デフォルトの名無しさん:2006/11/26(日) 21:48:55
out = "ARAFAFAFAFFFAFATRWTATQWTWQTRQWTQTQTQTQTQWTQWEFTQWETQWTQWTTAFAFAFRATRARTA"

start = 1000
moji = ""
(0..15).step(3){|i|
moji << #{out[i,3]} + "(" + "#{start.to_i - 150 + i}" + ")" + ","
p moji
}


すみません、7行目に文法エラーと出てしまましたが、どう間違って?

ARA(850),FAF(853),・・・ みたいに表示したく。
そして、最後の文字列の , は削除したいと思っておりますが、それ以前にエラーがでてしまいます。
どうぞよろしくお願いいたします。
95デフォルトの名無しさん:2006/11/26(日) 21:53:43
>>94
> moji << #{out[i,3]} + "(" + "#{start.to_i - 150 + i}" + ")" + ","
      ^^^^^^^^^
ここが違う。
#{} は文字列に変数を埋め込むときに使う。
この場合out[i,3]だけでいい。

↓のようにしても(・∀・)イイ!!。

moji << "#{out[i,3]}(#{start.to_i - 150 + i}),"
96デフォルトの名無しさん:2006/11/26(日) 21:56:32
>>95
というか、前者の書き方が見にくいからこその#{}だよな。
97デフォルトの名無しさん:2006/11/26(日) 22:03:34
>>95
ありがとうございます!無事できました。
#{}を式展開とだけ覚えていたのですが、文字列中で有効なんですね。勉強になりました。
98デフォルトの名無しさん:2006/11/26(日) 22:04:36
なんか気持ち悪いな

j = start.to_i - 150 + i
moji << "#{out[i,3]}(#{j}),"

埋め込むのは変数やメソッドだけにしてこう書こうぜ
99デフォルトの名無しさん:2006/11/26(日) 22:53:57
俺は#{}なんて滅多に使わないな
括弧やクォートの囲みは浅くしたい
10099:2006/11/26(日) 22:56:11
+ を多用するようなら sprintf してる
101デフォルトの名無しさん:2006/11/26(日) 23:58:59
質問。

make_the_file unless Filetest.exist?(file)
file読み込み処理



begin
 file読み込み処理
rescue Errno::ENOENT
 make_the_file
 retry
end

ってどっちが「普通」ですか?

前者は Filetest.exist? が毎回必ずディスクを余分に読みますよね
例外を待ち構えて例外が起こったときに対処したほうが素直ですか?
102デフォルトの名無しさん:2006/11/27(月) 00:25:48
>>101
俺は上が好み。
103デフォルトの名無しさん:2006/11/27(月) 00:44:54
>>101
後者はretryの取り扱いミスが怖いので前者
確かにディスクアクセスが余分で気持ち悪いけどね

本当は後者がウツクシイんだろうな、と思う
104デフォルトの名無しさん:2006/11/27(月) 00:51:22
db=PStore.new(file)で存在しないファイルを指定してもdb['hoge']がnilを返すので
泣いたことを思い出した
105デフォルトの名無しさん:2006/11/27(月) 10:03:46
文字列の最後の1文字や2文字を消すにはどのメソッドを使えばよいのでしょうか?
106デフォルトの名無しさん:2006/11/27(月) 10:28:05
sum_string.slice!(-1, 1)とかslice!(-1, 2)とか
107デフォルトの名無しさん:2006/11/27(月) 10:50:54
>>106

(-1, 2) で試したところ、(-1, 1) と同じ結果がでてきたのですが・・・
108デフォルトの名無しさん:2006/11/27(月) 11:44:03
>>105
普通、Rubyでは一発ではできない。
Rubyの文字列枚挙操作は、1バイトを単位として動作し、日本語2バイト文字列を「1文字」として解釈しない。

が、1バイトの英数字だけならStringのsliceメソッドが使える。
>>106はよくある間違い(というかこれ仕様が意地悪)なので注意。
109デフォルトの名無しさん:2006/11/27(月) 11:46:36
>>107
う。すまんボケてた。
後ろ二文字ならslice!(-2, 2)とか、
めんどくさけりゃstr.slice!(-2, str.length)だな。
というかリファレンスのString#slice!を参照
110デフォルトの名無しさん:2006/11/27(月) 11:48:36
>>108
仕様で最後のslice(-1, 1) でしか無理ってことかな。
111デフォルトの名無しさん:2006/11/27(月) 11:50:08
>>105
$KCODEをきちんと指定+実行コスト度外視だったら、
arr = str.split(//)
arr.pop
str = arr.join
とか。
112デフォルトの名無しさん:2006/11/27(月) 11:57:28
>>108-109
ありがとうございました。無事できました。
日本語でも一発でできるようなメソッド装備すればいいのに。
113デフォルトの名無しさん:2006/11/27(月) 11:58:15
>>110
Rubyのstr[-m,n]は「末尾から数えてmバイト目から右→に向かってnバイトを範囲とする」だからね。
直感的には「末尾から数えてmバイト目から左←に向かってnバイト分」だと思うんだが。

>>111
日本語含んだ文字列ではやっぱり正規表現で分割して配列にするしかないのかな。

irb> str="ねこだいすき"
irb> puts str.scan(/(.+?).$/e)
ねこだいす
irb> str2="hoge"
irb> puts str2.scan(/(.+?).$/e)
hog

うーん。
114デフォルトの名無しさん:2006/11/27(月) 13:01:27
文字列を前に追加する場合はどうすればよいのでしょうか?

<< または + を使って

私は 猫が とても 大好き です という各単語(word)を順次イテレータで追加していくと
str = ""
str << word

で、「私は猫がとても大好きです」という文字列になりますよね。 これを
「です大好きとても猫が私は」のように後ろにあるやつを前にしていきたいのですが・・・
115デフォルトの名無しさん:2006/11/27(月) 13:07:51
>>114
そのwordを何で保持してるかに拠るだろ。
Arrayならreverseすればいいし。
116デフォルトの名無しさん:2006/11/27(月) 16:10:51
# self[nth, len]=val
str[0,0] = prefix
# self[regexp]=val
str[/^/] = prefix
# sub!(pattern, replace)
str.sub!(/^/, prefix)
117デフォルトの名無しさん:2006/11/27(月) 16:48:04
>>104
db.root?('hoge')を使うしか。
db['hoge']すると例外が発生してほしいってこと?
118デフォルトの名無しさん:2006/11/27(月) 17:48:53
「トランザクションの対象のファイルを読み込めません」という例外が欲しいんだろう

irb> h=Hash.new
irb> p h['hoge']
nil

これにあわせた動作なんだろうけどな
119デフォルトの名無しさん:2006/11/27(月) 19:35:52
すみません。rubyからshellを使用する場合についてお聞きしたい
ことがあります。
環境:ruby 1.8.5 (2006-08-25) [i386-linux]
Vine Linux 2.6.16-0vl15

自分は、rubyからshellを呼び出すときShellクラスを使っています。
今やっている事は、あるprogram1で作成したテキストファイルをgnuplot
に読み込ませてグラフを自動生成するというものです。

簡単に例を示すと・・・

#Rubyでの処理
==============
==============
==============
#Shellでの処理
sh = Shell.new
sh.system("program1") #gnuplot用スクリプトscript1生成
sh.system("gnuplot","script1") #epsファイルを出力する
#終了

のようにgnuplotを実行させたいんですが、epsファイルが作成されません
でした。しかし、ターミナルから手動でgnuplot script1を実行すると正常
にepsファイルが出力されたので、恐らくsh.system()を呼び出す時のタイミ
ングの問題かと思うのですが、詳しい方の意見を頂けたらとありがたいです。

ちなみにscript1を作成した状態でsh.system("gnuplot","script1")だけを実
行させると正常にepsファイルが作成されました。また、sh.system("gnuplot",
"script1")の前にsleep()で0.2[sec]ほど待つと正常に出力されるのですが、eps
ファイルを作成する数が多いため時間がかかり過ぎてしまいます。最終的にはル
ープを使用して複数のepsファイルを作成するので。
120デフォルトの名無しさん:2006/11/27(月) 20:03:02
>>119
system("program1")
system("gnuplot script1")

とか

`program1`
`gnuplot script1`

じゃダメですか?
121デフォルトの名無しさん:2006/11/27(月) 20:41:05
ファイルから読み込む時、そのファイルの最後の行だけ読み込むにはどうすればいいでしょうか。
大きなファイルを扱うのですが、最後の行だけ欲しいのです。

後ろから100バイト読んで、改行コードが無かったらまた100バイト読む。
という感じで出来るかな?と思ったのですが、
「後ろから読み込む」やり方がわからないです。
122デフォルトの名無しさん:2006/11/27(月) 21:10:25
line = IO.readlines(filename)[-1]
123デフォルトの名無しさん:2006/11/27(月) 21:15:37
>>122
大きなファイル扱うってかいてるじゃんか。
File#seekで読み込み位置ずらしていくのがベストじゃないの?
124デフォルトの名無しさん:2006/11/27(月) 21:17:55
>>121
IO#seek(offset, IO::SEEK_END)
あたりが使えそう…だろうか。
まぁ、めんどいことになるのは確かだ。
125121:2006/11/27(月) 21:26:39
>>122-124
なるほど・・・
かなり面倒な事になりそうなんですね。
とりあえず>>124を参考にしてやってみます。
126デフォルトの名無しさん:2006/11/27(月) 22:51:01
>>125
レシピブックにそういう話が載ってたような気がする
127121:2006/11/27(月) 23:45:06
>>126
レシピブック、今手持ちに無いので明日見てみようと思います。

それともう一つ問題が。
無限ループしてる訳では無いのですが、巨大なファイルを扱っているので
C:/workshp/test01.rb:142:in `clear': stack level too deep (SystemStackErro
r)
というエラーが出てしまいます。
これについては、
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/29569
これが参考になったのですが、gc.c(rubyのソースですよね?)を変更しないといけないし、
そのあとコンパイルも必要になるので、私が触れるレベルじゃなさそうです・・・。
何か解決策はありますでしょうか。
128デフォルトの名無しさん:2006/11/28(火) 01:04:37
>>127
普通の手法で書いてる限り巨大なファイルとスタックオーバーフローは全くなんの関係もない。
Rubyがstack level too deepと言うのは、Rubyがバグってないかぎりは関数呼び出しの階層が深すぎる場合だけ。
噛み砕いて言うと、関数から関数を呼び出してその関数から関数を呼び出して、ってのを数千回繰り返すと起きる。
つまり自分が書いてるコードが悪いだけだ。

プログラムをよく眺めて考えろ。頭の中で実行してみろ。マニュアルを読め。
ところどころでpして結果を確かめろ。思い込みでコードを書くな。
あと思い込みで質問するな。
129119:2006/11/28(火) 01:36:42
>>120
レスありがとうございます。
sh.systemをsystem()もしくは``で置き換えたところ、その症状は改善されました。
ただ、組み込み関数sytem()やバッククオート記法``を使用する場合、Pathはプログ
ラム開始時のカレントディレクトリからの相対パスしか受け付けてくれません。

例えば、
$PWD=top/にいるとき・・・

system("mkdir under/")
system("chdir under/")
system("program1")
system("gnuplot script1")

を行うとtop/under/にではなく、top/にファイル群ができてしまいます。
絶対パスを通せば何とかなりそうですが、後の都合上、相対パスが使いた
い所です。リファレンスなどを当たってみましたが、うまい方法が見付か
りません。カレントディレクトリを変更するのはsystem("chdir under/")
ではダメなのですかねぇ。バッククオートに関しては`cd under/`でエラー
が出てしまい、困っている所です。

度々、質問して申し訳ありません。system()を使った場合、カレントディ
レクトリを変更する方法をご存知の方がいらっしゃいましたら、ご意見を頂
けると助かります。
130デフォルトの名無しさん:2006/11/28(火) 02:01:40
>>129
system()で呼び出されるシェル環境は呼び出される都度
別のサブプロセスになるんじゃなかったけか。
#だから2番目のsystem()でカレントディレクトリを変更しても
# 3番目以降のsystem()にはその影響が及ばない。
system("mkdir under; cd under; program1; gnuplot script1")
としてみたらどうよ。
いやおれはRubyは知らないんだけどね。
手元の環境では上のようにして動いたぞ。
131デフォルトの名無しさん:2006/11/28(火) 02:09:15
>>129
system の中身はシェルなんだから chdir じゃなくて cd。
cd 自体の返り値を使うわけじゃないんだからバッククォートじゃダメ。

system("mkdir under; cd under; program1; gnuplot script1")
132デフォルトの名無しさん:2006/11/28(火) 02:10:55
あ、かぶった。
133デフォルトの名無しさん:2006/11/28(火) 02:18:03
>>129
どうせプログラムの構造について考えないなら黙ってshでやりゃすぐじゃね?
覚えてて損はないし、生きてるうちは廃れないだろ。
134デフォルトの名無しさん:2006/11/28(火) 03:01:14
Rubyで1日悩むものもシェルスクリプトで割り切って作ると1時間くらいでできたりするよな
Rubyとのインターフェースもファイル作ってパイプとかリダイレクトとかで済んだりする
135127:2006/11/28(火) 04:59:41
>>128
質問の仕方が悪かったですね。ごめんなさい。
ある研究で、巨大なファイルに10万程度の要素があって、その要素を繋げていくプログラムを作っています。
要素を繋げる為にいくつかの関数を用意してるのですが、関数を1000回程度呼び出した所でstack level too deep
になります。
が、こちらとしては正常な動作なので、もっと要素を繋いで行って欲しい。という訳なんです。

Linuxで動かしてみたら2000回程度呼び出したところでメモリ(2G)から溢れてスワップするようになったので、
仰るとおりプログラムを見直してみようと思います。
Windowsでは、stack level too deepを回避する手段は無さそうですね。
136デフォルトの名無しさん:2006/11/28(火) 06:24:31
呼び出しが再帰になってるんじゃないの?
再帰を非再帰の繰り返しに変更してみな
137119:2006/11/28(火) 09:43:00
>>130,131

レスありがとうございました。教えて頂いた方法で解決しました。
解説をして頂いて、どこが問題なのか理解できました。

fork()は、サブプロセスが立ち上がることは知っていたんですが、
system()がサブプロセスになることを知りませんでした。

>>133,134
確かに、最初からshellでやった方が楽だったような気がします。
Rubyで行う処理もあり、shellをRubyから呼び出した方が手っ取
り早いかなぁと最初は思っていたので。

この度は、お手数をお掛けしました。m(_ _)m

138デフォルトの名無しさん:2006/11/28(火) 11:47:14
mkdir程度なら
require 'fileutils'というのもあるがな。
139デフォルトの名無しさん:2006/11/28(火) 11:54:22
おお、mkdir_p があるのか。
140デフォルトの名無しさん:2006/11/28(火) 18:02:27
>>135
再度書くがスタックオーバーフローが起こるのは自分の責任。
そもそもスタックがあふれるようなコードを書くべきでないだけの話。
正常な動作というのも勝手な思い込み。
WindowsもLinuxもその他色々もスタックは有限。
書き方が悪ければいずれにせよいつか起こる。
起こるまでの時間が短いか長いかの違いがあるだけ。
141デフォルトの名無しさん:2006/11/28(火) 18:10:24
winではpython使えってことだな
142デフォルトの名無しさん:2006/11/28(火) 18:11:46
再帰関数でつないでいってるのかな。
143デフォルトの名無しさん:2006/11/28(火) 18:29:17
Rubyは8000行ぐらい以上読ませたりすると
行番号がループする
って話をどっかで聞いた。RHGだっけ。
144デフォルトの名無しさん:2006/11/28(火) 18:37:08
[ruby-dev:29569]に、
Windowsなプラットフォームで、実際に使えるスタックを十分使わな
いうちにstack level too deepになってしまうという問題が…(略)

って話が。
145デフォルトの名無しさん:2006/11/28(火) 19:13:23
カモン186
146デフォルトの名無しさん:2006/11/28(火) 19:27:06
>>144
それは本質ではない。
安直にスタック食い潰して死亡するコードはイクナイという話。
147デフォルトの名無しさん:2006/11/28(火) 21:12:05
50万行程のファイルがるのですが、そのうちの5万行を読み込んで作業する
プログラムを作成しています。


流れとしましては、
50万行ファイルオープン

指定された5万行を配列に格納。

ファイルクローズ

を考えているのですが、配列に5万行を入れて作業するのと
5万行に分割したファイルを読み込むのとではどちらが軽く処理できるのでしょうか?

しょうもない質問ですが宜しくお願いします。
148デフォルトの名無しさん:2006/11/28(火) 21:14:19
>>147
しょうもないと思うなら自分で両方実装してベンチとれや
149デフォルトの名無しさん:2006/11/28(火) 22:04:28
スタックの残りを意識しないといけないプログラミングを強要するプログラム言語はゴミ

とか言ってみる
150デフォルトの名無しさん:2006/11/28(火) 22:41:52
スタックの残りを意識しなくても書けるプログラミング言語って、たとえばなに?
151デフォルトの名無しさん:2006/11/28(火) 22:50:40
チューリングマシン?
152デフォルトの名無しさん:2006/11/28(火) 22:58:03
こういうプログラムを書くとスタックが足りなくなるので注意しましょう

というような解説はあってもいいな
153デフォルトの名無しさん:2006/11/28(火) 23:41:05
>>152
再帰。
154デフォルトの名無しさん:2006/11/28(火) 23:49:51
>>152
入門書では見たことないな
その辺のフォローはあってもいいよね
155デフォルトの名無しさん:2006/11/29(水) 01:30:45
チューリングマシンはプログラミング言語ではありません
156デフォルトの名無しさん:2006/11/29(水) 07:30:22
>150
関数定義もサブルーチンからのリターンもできない言語か
ループは大丈夫だとしても、キツいなw
gotoまみれになりそうだ

配列で仮想スタック作って自前で管理すれば
サブルーチンを扱えるかも知れんが
それはそれでどうなんだろうw
157デフォルトの名無しさん:2006/11/29(水) 08:06:16
スタックレスPythonってあったな。あとレジスタマシンを実装するとか。
158デフォルトの名無しさん:2006/11/29(水) 12:09:24
brainf**kとかだな。
159デフォルトの名無しさん:2006/11/29(水) 13:27:26
ルートウィジェットを表示せずにTk.getOpenFileできる方法ってありますか?

require 'tk'
p Tk.getOpenFile

だとルートウィジェットが表示されてしまいます。

Tk.messageBox(:icon=>'warning', :type=>'ok', :message=>"Hello")

の場合は都合よくルートウィジェットは表示されないのですが,
同じようにできないだろうかと思ってます。
160デフォルトの名無しさん:2006/11/29(水) 13:28:39
pythonをフィヨンと読んでいた俺
本当はパイソンらしい。
161デフォルトの名無しさん:2006/11/29(水) 14:33:42
>>159
Tk.root.withdraw
162デフォルトの名無しさん:2006/11/29(水) 15:03:36
>>161
Thanks
163デフォルトの名無しさん:2006/11/29(水) 17:08:46
10年以上前に卒論のプログラムPythonで書いたが、
指導教官はぜんぜん言語名をまともに呼んだことがなかった。
「ぺいとん」とか「ぴてぃおん」とか。

164デフォルトの名無しさん:2006/11/29(水) 17:17:30
どなたか参考になるサイト、TIPSをお教え願います

rubyで、画像に文字列を表示したいのですが(サウンドノベルゲームみたいなものの、メッセージが表示される枠のイメージ)
また、複数音声のファイル(mp3など)を、ランダムで読み込んで再生といったことをしたいのですが

参考になるようなところお願い致します。。。
vrubyのTIP系はどこをあたればよいのかわからず
165デフォルトの名無しさん:2006/11/29(水) 17:55:18
>>164
そういうのは、Ruby/SDLとか、Miyakoとか使うんじゃない?
166デフォルトの名無しさん:2006/11/29(水) 18:29:38
なるほど、そういうものがあったのですね。
プログラムの関係でvrubyだけで実装しようとしております。
vrubyでの実装方法などとかはないでしょうか?
167デフォルトの名無しさん:2006/11/29(水) 19:59:40
>>166
まあ一度、MIyako使ってみろ。
Windowsでもちゃんと動く。
168デフォルトの名無しさん:2006/11/29(水) 20:02:00
>>166
SWin::Windowのメソッドをみろ。
使い方は、vr/をdopaintで検索すれば概ねわかるだろ。

音声関係は、VisualuRubyの守備範囲じゃなかろう。
169デフォルトの名無しさん:2006/11/29(水) 20:28:53
rubygemで

gem environment

とすると、

$RUBYLIB/rubygems/custom_require.rb:35:in `require': No such file to load -- sources (LoadError)

とでてしまいます。

何かヒントでもいいので、ご教授よろしくお願いします。
170デフォルトの名無しさん:2006/11/29(水) 21:01:06
sources gemはある?

ruby/gems/1.8/gems/sources-0.9.0
とか。
171169:2006/11/29(水) 21:12:16
>170
ないです。
172デフォルトの名無しさん:2006/11/29(水) 21:23:50
>>171
ちゃんと用意しろ。
173デフォルトの名無しさん:2006/11/29(水) 21:26:36
>>165 >>167-168
ありがとうございました。やれるだけやってみます。

174169:2006/11/29(水) 22:04:03
すみません。rubygemのintsll errorでした。
175デフォルトの名無しさん:2006/11/29(水) 23:26:21
>>146
それは本質ではない。
たった1000程度でスタックを食いつぶす実装はイクナイという話。
176デフォルトの名無しさん:2006/11/29(水) 23:41:01
趣味の言語で何いってんだよ
PUSHは男のロマンだぜ
177デフォルトの名無しさん:2006/11/29(水) 23:44:01
ということ
178デフォルトの名無しさん:2006/11/30(木) 00:51:13
>>113
> 直感的には「末尾から数えてmバイト目から左←に向かってnバイト分」だと思うんだが。

それは俺の直感には思いっきり反するんだが、どうしてくれる。
179デフォルトの名無しさん:2006/11/30(木) 07:15:21
Rubyで他の関数に配列引数を渡したいときはどうすればいいですか?
Cだと

int gauss(int A){
hoge
}

int a(){
int C[10][10],i,j;

for(i=0;i<10;i++){
for(j=0;j<10;j++)
C[i][j]=1;
}

gauss(C);
}

で配列Cの中身はそのまま渡されるんですが・・・
180デフォルトの名無しさん:2006/11/30(木) 07:56:52
>>179
Cでは関数に配列を渡すというより
単なるアドレスを渡すという事になると思うんだけど。
#include <stdio.h>
int array_size(int *p)
{
return sizeof(p);
}
int main(void)
{
int a[] = {0,1,2};
printf("%d\n", sizeof(a));
printf("%d\n", array_size(a));
return 0;
}

それにそのコードだとコンパイルエラーでしょ?
181デフォルトの名無しさん:2006/11/30(木) 08:37:12
173ですが
画像に文字を表示させるのは
フレーム型のbitmappanelを下に表示して、文字を出すことでなんとかいけました。
あとは音だけなのですが
ttp://vruby.sourceforge.net/samples.html のマルチメディア再生でいけると踏んでいるのですが
任意のフォルダ以下(sound/○○.mp3)のmp3ファイル(連番)をランダムでENTERを押したときに再生といったことをやろうとしていて
ディレクトリを読み込む段階で倒れてしまいました。。。
ご指導お願い致します。
182デフォルトの名無しさん:2006/11/30(木) 08:52:09
どうやって配列引数渡すのか早く教えろ
183デフォルトの名無しさん:2006/11/30(木) 09:03:48
>>182
ヒント:google
184デフォルトの名無しさん:2006/11/30(木) 09:09:47
>>182
どうして配列が渡せないと思うのか早くコードで示せ
185デフォルトの名無しさん:2006/11/30(木) 09:11:45
配列に対する操作しか乗ってない。
具体的に配列を如何生成するかとか、他の関数に如何渡すのかとか、
添え字はどう参照されるのか基本的なことが何もかかれてない。
これじゃ他言語から新しく覚えたくてもわからん。
186デフォルトの名無しさん:2006/11/30(木) 09:13:12
渡せるコードのサンプルが全然落ちてないから。
187デフォルトの名無しさん:2006/11/30(木) 09:23:36
少なくともCと同じやり方では渡せない。
188デフォルトの名無しさん:2006/11/30(木) 09:41:05
>>185
def print_array(a)
a.each{|v| print v, ' ' }
end

a = [2,3,4,5,6]
print_array(a)
189デフォルトの名無しさん:2006/11/30(木) 09:57:14
添え字の範囲を間違えていた・・・orz
スマソ
190デフォルトの名無しさん:2006/11/30(木) 12:52:22
>>181
Dir.glob
191デフォルトの名無しさん:2006/11/30(木) 13:07:12
>>179
「Cもまったくわかってません。」まで読んだ。
192デフォルトの名無しさん:2006/11/30(木) 13:49:37
勉強のため、rubyでsuffix arrayを作っています。

----
str = "hogehoge"
sarray = Array.new(str.size){ |i| i }.sort_by{ |i| str[i..-1] }
sarray.each{ |i| puts str[i..-1] }
----
e
ehoge
ge
gehoge
hoge
hogehoge
oge
ogehoge
----

これで動作するんですけど、マルチバイトの場合はもちろん失敗します。
マルチバイト対応で何とかならないですかね?
193デフォルトの名無しさん:2006/11/30(木) 19:14:38
>>192 自己解決しました。

----
str = "ほげhogeほげ"

i = 0
sarray = []
while i < str.size
  sarray.push i
  if str[i].chr =~ /[\xA1-\xFE]/ then i += 2
  else i += 1 end
end
sarray = sarray.sort_by{ |i| str[i..-1] }

sarray.each{ |i| puts str[i..-1] }
----
eほげ
geほげ
hogeほげ
ogeほげ

げhogeほげ
ほげ
ほげhogeほげ
----

単純に2バイト文字の場合インデックスを飛ばせば良いんですね。
194デフォルトの名無しさん:2006/11/30(木) 21:19:29
str = "ほげhogeほげ"

$KCODE = "S"
sarray = []
s = str
until s.empty?
  sarray << s
  s = s.sub(/\A./, '')
end
sarray.sort!
puts *sarray
195デフォルトの名無しさん:2006/12/01(金) 10:08:57
すみません教えてください。
class A
 def foo
  処理 A
 end
end
class B < A
 def foo
  super
  処理 B
 end
 def bar
  処理 C
 end
end
hoge = B.new

で、
hoge.barでBではなくてAのfooメソッドを呼びたいのですが
メソッドbarの処理Cは、どのように書けば良いでしょうか。

196デフォルトの名無しさん:2006/12/01(金) 10:31:08
class A
def foo; puts "foo in A"; end
end
class B<A
alias :foo_A :foo
private :foo_A
def foo; super; puts "foo in B"; end
def bar; foo_A; puts "bar in B"; end
end

irb(main):012:0> B.new.bar
foo in A
bar in B
197デフォルトの名無しさん:2006/12/01(金) 10:57:25
def bar
a_foo_unbound = self.class.superclass.instance_method(:foo)
a_foo = a_foo_unbound.bind(self)
a_foo.call
end

もっと簡単に書けるかしら。
198195:2006/12/01(金) 10:57:57
>>196
ありがとうございました、できました。

classBでaliasをdef foo〜endの前に記述したのでfoo_Aはオーバーライド前の
classAのfooを示しているという理解でよいでしょうか?
private宣言をする意味が良くわかりません。
199195:2006/12/01(金) 11:01:29
>>197
ありがとうございます、動きました。
でも、難しすぎてワケわかりません、精進します。
200デフォルトの名無しさん:2006/12/01(金) 11:06:17
>>199
>>197はinject並だから安心しろ
>>196のほうがなんぼか素直だ
201195:2006/12/01(金) 11:13:12
>>200
ありがとうございます。
後々のことも考えて理解できる>>196を使用します。
202デフォルトの名無しさん:2006/12/01(金) 17:26:58
aliasの引数はメソッド名が2つ。構文なので区切りの,は入らない。
alias_methodはシンボル2つ。メソッドなので,で引数を区切る必要あり。

なんで二通りあるんだろう。
203デフォルトの名無しさん:2006/12/01(金) 17:55:19
前者は構文なんだから引数ってのとはちょっとちがう。

二通りある理由は、機能が違うから、としか言いようがないかな。
204デフォルトの名無しさん:2006/12/01(金) 19:07:07
ifのthenとか省略可能なものって省略した方が処理速度速いんですか?
205デフォルトの名無しさん:2006/12/01(金) 19:30:26
>>204
変わりません。
206デフォルトの名無しさん:2006/12/01(金) 21:05:02
>198
その通り。

private にしているのは、意図せず foo_A で外から呼ばれないようにしたいなあという意思表示です。深い意味はありません。

ところで、

class C<B
def foo_A; puts "foo_A in C"; end
end
とすると、

irb(main):006:0> C.new.bar
foo_A in C
bar in B
=> nil

うーん、これはまあ仕方ないが。これ以上頑張るなら>197
207204:2006/12/02(土) 02:44:54
>>295
ありがとう
208デフォルトの名無しさん:2006/12/02(土) 03:39:14
ロングパスだ
209デフォルトの名無しさん:2006/12/02(土) 13:54:31
作者著のRubyの本amazonで買った!楽しみだな〜!
210デフォルトの名無しさん:2006/12/02(土) 14:12:30
Rubyの初心者です
timesメソッドの中にif文を入れて,もし条件を満たしていれば
timesメソッドから抜けたいのですが,どうすればいいのでしょうか。
if文の中でbreakしてもtimesメソッドからは抜けられなかったので質問しました
どうかよろしくお願いします
211デフォルトの名無しさん:2006/12/02(土) 14:33:54
>>210
3.times do |n|
  break if n%2 == 1
  puts n #=> 0だけ表示される
end
#=> 全体として nil が返る

一体どんなコード書いたんだ?
212デフォルトの名無しさん:2006/12/02(土) 16:49:13
実はProcess.timesだったとか。
213デフォルトの名無しさん:2006/12/02(土) 19:53:39
csvファイルのレコード数(行数)を簡単に得られるメソッドか方法はありますか?
メージ的にはこんな感じ

csv = CSV.open('file.csv', 'r')
p csv.size ##-> 行数

Arrayにしてから数えるしかないのでしょうか?
214デフォルトの名無しさん:2006/12/02(土) 21:02:29
>>213
csv を扱うライブラリーに"csv.rb"がある
マニュアルは下記、HPで。( rubyのマニュアルにあるHPはリンク切れ)
http://dev.ctor.org/doc/csv/

行数だけなら↓のようになるかな
require "csv"
filename = 'hoge.csv'
i = 0
CSV.open(filename, 'r') do |x| i += 1 ;end
p i
215デフォルトの名無しさん:2006/12/02(土) 21:04:06
それは単にテキストファイルの行数とどう違うの?

nlines = open('file.csv').read.delete("^¥n").size
全部読んで、改行以外を抹殺して改行だけになったら文字数を数える。

つーかsystem("wc")するとか…
216デフォルトの名無しさん:2006/12/02(土) 22:30:15
GNU textutils-2.0.tar.gz の wc.c
----
case '\n':
lines++;
/* Fall through. */
case '\r':
case '\f':
if (linepos > linelength)
linelength = linepos;
linepos = 0;
goto word_separator;
case '\t':
linepos += 8 - (linepos % 8);
goto word_separator;
case ' ':
linepos++;
/* Fall through. */
----
だそうなので、Rubyが自前で\nを数えても wc とやってることは結局いっしょっぽい。
というか、wc だからといって何かすごい小細工があるわけでもない模様。

ファイルを全部メモリに保持するときのメモリの圧迫が気になるなら
ファイルを数百バイトずつ読んで捨てつつ改行だけカウントすれば。
217デフォルトの名無しさん:2006/12/02(土) 22:40:48
地味だね

まあ、ファイルの改行をカウントするためだけに
ファイル開いて全部舐めてカウントして捨てて閉じるというのは
なんとなく無駄というかもったいない感じはしなくもない
218デフォルトの名無しさん:2006/12/02(土) 22:46:06
>>181です >>190さん、ありがとうございました。
すみません。。。ボタンを押すとフォルダの中のファイル(0000.wav〜0009.wav)をランダムに再生するものを作りたいのですが
Dir.globでの操作が上手くいかず。。。お願いします。
下のはとりあえず、1個ずつ読み込んで再生しようと思ったのですが、最後しか再生されません。
VRMediaViewをmmとして、読み込むファイルをfnとして再生させています

def open_clicked
@mm.mediaclose
dirname = "sound/hoge"
Dir.glob("#{dirname}/*.wav").sort.each do |fn|
@mm.mediaopen(fn) if fn
@mm.play
end
end

これをランダムにしたいのですが、どのようにすればよいのか。。。お願い致します
219デフォルトの名無しさん:2006/12/02(土) 22:49:31
>>218
ランダムにしたいというのはどういうことなのか考える
次に、ランダムを表現するためのメソッドとかを探してみる
んで、そのメソッドをどう利用すればランダムに「なる」か考えてみる

即っとコード出しちゃう人もいそうだけど
220デフォルトの名無しさん:2006/12/02(土) 22:56:31
ランダムに選ぶ練習ってしてないのかな?
入門書や解説サイトには必ずある例題だと思うんだけど…

組み込み"関数"の rand を使うと乱数がもらえるぞ
221デフォルトの名無しさん:2006/12/02(土) 23:05:37
randを使うのは了解しているのですが
Dir.globとの組み合わせのところでうまくいかず。。。
それからディレクトリが1個読み込んで再生ではなく、一度に全部読み込んで最後だけ再生となってしまって
色々試行していたのですが、、、助け舟を頂きたく
222デフォルトの名無しさん:2006/12/02(土) 23:13:48
>>221
君が参考にしてる解説本あるいは解説サイト晒せ(w

p で色々調べるといい。
Ruby では、ドットの「前」にあるオブジェクトがどういう状態になってるか常に意識しれ。
具体的に言うと Dir.glob("#{dirname}/*.wav") がどういう風になってるか p で調べてみ。

調べたら、それをランダムに選ぶにはどうしたらいいか考える。
223デフォルトの名無しさん:2006/12/02(土) 23:31:16
ここを基本に見ております
ttp://www.osk.3web.ne.jp/~nyasu/software/vrproject.html

p ですか…すいません。。。仰っている意味が理解できずです
もう一度 print("hello world\n")からやり直してきます。。。
ただ、時間がもうあまり無く、解答だけでもいただけるとありがたいです。
224デフォルトの名無しさん:2006/12/02(土) 23:41:35
時間?
225デフォルトの名無しさん:2006/12/02(土) 23:43:34
時間(笑)
226デフォルトの名無しさん:2006/12/02(土) 23:57:38
list = Dir.glob("#{dirname}/*.wav")
target = list[ (list.size() * rand()).to_i ]
p target
227デフォルトの名無しさん:2006/12/03(日) 00:06:03
ありがとうございますm(_ _)m
ソースのとおり変更したら上手くいきました。

ただこれでは自分の身にならないので、どこのサイトで勉強をすればよいのかお教え願えますでしょうか
自分ではこのソースは書けないので。。。

本当にありがとうございました
228デフォルトの名無しさん:2006/12/03(日) 00:06:13
そこは to_i ではなく truncate と書くべきだと思う
つーか rand(list.size) で用済まないか
229デフォルトの名無しさん:2006/12/03(日) 00:06:54
時間ってw
230226:2006/12/03(日) 00:08:24
やはり、使い慣れん言語使うと、しくじるな。>>228 のとおりだ。
231デフォルトの名無しさん:2006/12/03(日) 00:10:26
truncateってto_iとどう違うの?
232デフォルトの名無しさん:2006/12/03(日) 00:15:34
>>231
動作は一緒

英単語上のニュアンスの違いしかないんじゃないかな
「整数にする」と「切り捨てる」の違い

"3.14"を3にしたい場合は"3.14".to_i
3.14を3にしたい場合は3.14.truncate

ただ、こういうくだらないとこに拘る奴が中にいるとプロジェクトは混乱する(w
233デフォルトの名無しさん:2006/12/03(日) 00:18:00
def yomikomi
教えてください。
Ruby/Qteなのですが、

dic = open("/home/zaurus/.anthy/private-dic.src")
dictxteuc = dic.read
dictxtu8 = dictxteuc.kconv(Kconv::UTF8,Kconv::EUC)
@dicedit.setText(dictxtu8)
#$defaultCodec.toUnicode
end

とすると、@diceditとしたQmultiLineEditの中の感じがすべて文字化けしています。
なにがわるいんでしょうか?教えてください。

ちなみに/home/zaurus/.anthy/private-dic.srcの中身は、EUC-JPのハズです。
234デフォルトの名無しさん:2006/12/03(日) 00:29:35
>>226
1.8系だと Dir.glob("#{dirname}/*.wav") はwin環境だとちょっとまずい。
まじでさっさと対応版出して欲しい。
235233:2006/12/03(日) 00:36:55
すみません。順番がめちゃくちゃだったので、もう一回書き込みしておきます。

教えてください。
Ruby/Qteなのですが、

def yomikomi
dic = open("/home/zaurus/.anthy/private-dic.src")
dictxteuc = dic.read
dictxtu8 = dictxteuc.kconv(Kconv::UTF8,Kconv::EUC)
@dicedit.setText(dictxtu8)
end

とすると、@diceditとしたQmultiLineEditの中の感じがすべて文字化けしています。
なにがわるいんでしょうか?教えてください。

ちなみに/home/zaurus/.anthy/private-dic.srcの中身は、EUC-JPのハズです。

236デフォルトの名無しさん:2006/12/03(日) 00:42:10
>>235

Qte のことは分からんが、どこが悪いか、まずは、各行の後でデバッグ出力出してみろ
(文字化け避けるため、それぞれ別のファイルに出した方がいいな)
まずは「どこ」が悪いのか特定するんだ。
237デフォルトの名無しさん:2006/12/03(日) 00:58:31
>>234
どうまずいの?
238235:2006/12/03(日) 01:04:37
それが、エラーは出したようではないのですよ。
出力された物はは確かに思った出力ではないのですけどね。
239デフォルトの名無しさん:2006/12/03(日) 01:19:19
どこで習うべきなんだろうね、こういうの

def errlog(text,name)
File.open("/home/zaurus/rubyerror-#{name}.txt",'w'){|f|
f.write(text)
}
end

def yomikomi
dic = open("/home/zaurus/.anthy/private-dic.src")
dictxteuc = dic.read
errlog(dictxteuc,'euc') # 確認用出力
dictxtu8 = dictxteuc.kconv(Kconv::UTF8,Kconv::EUC)
errlog(dictxtu8,'utf8') # 確認用出力
@dicedit.setText(dictxtu8)
end

こうしてみろってことだろ、要は。
rubyerror-euc.txtがちゃんとEUC-JPかどうか、
rubyerror-utf8.txtがちゃんとUTF8かどうか確かめろってことかね
240デフォルトの名無しさん:2006/12/03(日) 01:26:28
別にエラーメッセージを出せと言ってるわけじゃない。

dic = open("/home/zaurus/.anthy/private-dic.src")
open("1.txt","w").print dic
dictxteuc = dic.read
open("2.txt","w").print dictxteuc
dictxtu8 = dictxteuc.kconv(Kconv::UTF8,Kconv::EUC)
open("3.txt","w").print dictxtu8

まぁ、デバッガとか使えば、もっと楽なんだろうがな。
241240:2006/12/03(日) 01:27:12
くそ、かぶった。はずかし
242デフォルトの名無しさん:2006/12/03(日) 01:31:16
>>240は面白い書き方してるな
仮に出力してる感がわかりやすくていい
243235:2006/12/03(日) 01:36:22
>236, >239

ほんとにありがとうございます。
ちなみに、ファイルは正確に変換されていたようです。
とすれば、最後の方の@dicedit.setText(dictxtu8)と
送られた先のQmultiLineEditのあたりがあやしそうですね。

ちなみに、これが初めてのプログラムなので習うというよりも、
習熟度がきわめて低いのが発想力のなさの一因なのでしょうねorz
244デフォルトの名無しさん:2006/12/03(日) 01:39:40
>>243

悩め、苦しめ、ジタバタしろ。
それが貴様の血となり肉となる。
orz する必要は全くない。
245デフォルトの名無しさん:2006/12/03(日) 01:46:53
>>243

QTe のことは分からんが、そのソースで理論上うまくゆく「はず」
ということであれば、環境変数とか設定ファイルとか、
初期化ルーチンあたりで設定するパラメータとかの値が悪いんでないかい?
(そんなもんがあるとしたらの話だが)
246デフォルトの名無しさん:2006/12/03(日) 01:48:35
>244
ありがと。もう少しがんばってみるよ。

QmultiLineEditクラスは、マルチバイト扱ってくれんのかなぁ。
247デフォルトの名無しさん:2006/12/03(日) 01:52:47
「QTe 文字化け」でぐぐると何か書いてたりしないかね
248デフォルトの名無しさん:2006/12/03(日) 01:58:14
>247
それやってみます。m(. .)m
249デフォルトの名無しさん:2006/12/03(日) 02:25:39
>>237
sjisのbyte目が []{} なんかと被ると誤動作する。
250235:2006/12/03(日) 02:26:13
解決。

@dicedit.setText(tr(dictxtu8))
~~~
翻訳(translate)しなきゃだめだよね。
これ、一回こうなおしたと思ったのに・・・・
みんなありがと。とりあえず寝ます。
251デフォルトの名無しさん:2006/12/03(日) 12:11:20
しつもーん。
nil.to_s が "" を返すということは積極的に使っていいもんですか?

「キー hoge がハッシュ h に登録されてないか登録されてても値が空("")のとき true」を

 h['hoge'] == nil or h['hoge'].empty?

ではなく

 h['hoge'].to_s.empty?

と書くのは邪悪?
252デフォルトの名無しさん:2006/12/03(日) 12:28:06
devでnil.to_s = "nil" になるという話が出たり引っ込んだりしてたので
やめといたほうがいい。あれは結局引っ込んだのかな。引っ込んだとしても
またいつ復活するか分からんしなー。

railsの構成要素である active_support の blank? を使う方がいいかもしれない。
nil, 0, "", [] などに対して真を返す。
253デフォルトの名無しさん:2006/12/03(日) 12:29:01
げ、0.blank? は偽だった。
254デフォルトの名無しさん:2006/12/03(日) 16:42:22
すいません。
ミニゲームを作ってHPで公開してみんなに遊んでもらう
(javaアプレットのような。)にはどうしたら良いのでしょうか。
255デフォルトの名無しさん:2006/12/03(日) 16:48:50
勉強すればいいと思う。
「javaアプレットのような」はほぼ不可能。
256254:2006/12/03(日) 16:53:52
そうなんですか?
いっそjavaに乗り換えたほうが楽なのか…
ありがとうございます。
257デフォルトの名無しさん:2006/12/04(月) 10:23:11
213の続きです。CSV::to_a.sizeが一番シンプルでスマートのようです。
ところで,to_a,メソッドの振る舞いですが
#!/usr/local/bin/ruby
require 'csv'
outfile = File.open('csvout', 'wb')
CSV::Writer.generate(outfile) do |csv|
csv << ['c1', nil, '', '"', "\r\n", 'c2']
end
outfile.close
csv = CSV.open("csvout", "rb")
p csv.to_a #1->[["c1", nil, "", "\"", "\r\n", "c2"]]
p csv.to_a #2->[]
csv.close
上記のように変わってしまいます。これはそんなものなのですか?
「!』がついていないので,変化しないと思っていたのですが,知らないとうっかりしそうです。
258デフォルトの名無しさん:2006/12/04(月) 12:48:14
そのcsvはFile(IO)のインスタンスなので、to_aはファイルを全部読んで配列にして返す。次の呼び出しではファイル末尾にいるので、空になる。
259デフォルトの名無しさん:2006/12/04(月) 15:27:21
>>251
正確には hash.key?('key') || hash['key'].empty? だけど
このばあいだったらHash#fetch()を使って hash.fetch('key', '').empty?
(ただし hash['key'] == nil ならエラーになるかな)
いちばんいいのは
def nil.empty?; true; end
hash['key'].empty? # nilか空文字列ならtrue

nil.empty? は標準化してほしい。
260デフォルトの名無しさん:2006/12/04(月) 21:05:01
HTMLコーダーですがイントラネット内で使用する小ツールを作ることになりました。
Rubyを習得して作りたいと思っているのですが、
以下のようなアプリをRuby作ることは難しいでしょうか(向いているでしょうか)?

・作りたいもの
HTMLで作られたフォーム部品を選択、もしくは入力して実行ボタンを押すと
入力した内容に沿った形式の帳票を印刷する。(帳票の形式は複数ある)
また、印刷履歴を管理し、ブラウザで参照できるようにする。

・やりたいこと
IE6上で動作し、インターフェイスと処理結果はHTMLとCSSで作る。
データ形式はXMLで値の取出しにはXPathを使う。

・制限
サーバに何かプログラム(例えばApacheなど)をインストールすることは許可されていない。
できればクライアントにも特別何かを導入したくない。(WindowsXP+IE6+ネットワークがあれば実行できるようにしたい)
クライアントの環境はWindowsXP+IE6のみ。その他の環境は考慮しなくてOK。


以上になります。
261デフォルトの名無しさん:2006/12/04(月) 21:10:45
>>260
> サーバに何かプログラム(例えばApacheなど)をインストールすることは許可されていない。
この時点で、ほぼ何も出来ないんだけど。
鯖にはRubyがインストールされていて、CGIとかで動かすことができるの?
鯖スペック詳しく。

> WindowsXP+IE6+ネットワークがあれば実行できるようにしたい
Rubyはどこで動きますか?電子の海で?

HTML+CSSで帳票ってあまり向かないような気がするんだけど大丈夫?
# 日本の帳票は変態仕様が多い

帳票のための入力データはどこから来ますか?
もしXMLなのであれば、XSLTで変換してやればおしまいのような気がするけどどう?
262260:2006/12/04(月) 21:40:46
>>261
サーバにRubyはインストールされていません。
Exerbというツールでスクリプトをexe形式にすれば
特別実行環境がなくても使えるようなので、
それを使いつつ、インターフェイスなどはIE6上でHTMLとCSSでできたら
効率的かなぁと考えたのですけれどもそんな虫のいいことはできないのでしょうか。

イメージ的には
1.イントラネット上の共有フォルダ上にあるexeを実行。
2.ブラウザが起動してフォームページが表示される。
3.フォームに必要事項を記入して実行。
4.帳票プレビューが表示される。
5.確認して印刷。

CSSならある程度使いこなせるので紙に合わせて作れると思います。
入力データはXMLです。
XPathでデータを取ってきてプログラムからHTMLを書くことを考えていましたが
ページ自体はXSLTで実現させることもできますね。気が付きませんでした。

HTML,CSS,XML,XSLTはそこそこわかるので積極的に利用しつつ
処理の部分でRubyを使っていきたいのですが上記のようなことはできないのでしょうか?
263デフォルトの名無しさん:2006/12/04(月) 21:41:28
>>260
VBAで印刷や入力補助を小細工したえくせるの帳簿ファイルを
Windowsネットワークの共有フォルダに置いてみんなに共有させる
264デフォルトの名無しさん:2006/12/04(月) 21:57:11
作れると思います、ではなく実際に作ってみてから言うんだな>CSSで帳簿
265デフォルトの名無しさん:2006/12/04(月) 22:05:51
net/httpを使ってホームページにアクセスするプログラムを作っているのですが
ページによってはCookieが有効でありませんと弾かれてしまう事があります。
これを解決できる良い方法は何かないでしょうか?
266デフォルトの名無しさん:2006/12/04(月) 22:13:39
クッキーのやりとりがどうやって行われているか調べればよいのでは?
etherealでもなんでもいいからパケット覗けばわかるっしょ。
267デフォルトの名無しさん:2006/12/04(月) 23:15:55
>>262
クライアントにexeを置くだけでは、それは無理。
IEを捨てて、アプリでなんとかするなら可能。
どちらにせよ、Rubyは不向き。
HTMLコーダのチミにも不向き。
268デフォルトの名無しさん:2006/12/05(火) 00:15:26
JScript or VBScript で HTA あたりを書いとくのが無難でないかい。

まぁ、ActiveScriptingRuby 使えば、Ruby でもできなくはないだろうが、
exerb 使えたっけ?あれ

 
269デフォルトの名無しさん:2006/12/05(火) 09:51:13
>>262
そういうアホな仕様の実現方法を考えるのは嫌いじゃないのだが考えられるのは
* ASRのHTA
* Webrickとかを使ってHTTPサーバとして動作するexeを作る
* WIN32OLEでなんとかする(フォームイベントがとれるかどうかが肝だが怪しい)
ぐらいか。
ブラウザだとHTAかHTTPしか手段がないからな。

>>268
1.8.4ならだいたい確実にできるらしい。
ttp://arton.hp.infoseek.co.jp/indexj.html
270デフォルトの名無しさん:2006/12/05(火) 10:25:52
>>269
仕様を素直に実現するなら、HTAを使うのが正解だと思うんだが、
その場合ActiveScriptEngineとしてのASRをインストールというか
登録する必要がある。
それは問題ないのかねえ?

もし俺がやるなら、2番目のWEBrickでHTTPサーバ立てる、を選ぶな。
楽だし。
271デフォルトの名無しさん:2006/12/05(火) 14:37:43
>>270
あーそりゃ問題だ。
無理。
実行時に必要なファイルだけインストールしちゃえばいいかも。
272デフォルトの名無しさん:2006/12/05(火) 17:42:22
>* Webrickとかを使ってHTTPサーバとして動作するexeを作る

これを詳しく教えてください。
273デフォルトの名無しさん:2006/12/05(火) 17:55:36
>>272
WEBrickを使ってHTTPサーバとして動作するスクリプトを作る。
そしてそれをExerbでexe化する。
以上。
274デフォルトの名無しさん:2006/12/05(火) 18:08:04
>>273
それはrailsでつくったアプリケーションでもできますか?
275デフォルトの名無しさん:2006/12/05(火) 18:53:03
>>274
やってる人はいるよ。
Rails製のデスクトップアプリを作った人がいる
276デフォルトの名無しさん:2006/12/05(火) 21:50:21
すまんが教えてくれ棒だす
WindowsXPでruby-1.6.8使っててnet/httpsを使いたいんだが
Netで探したhttpsサンプル動かそうとすると
uninitialized constant Net (NameError)
とエラーがでるんだよ。
でNet-1.2.0だかが必要なのかなと(あてずっぽで)思って
そいつを探してるんだけど、
これってNet上どこにあってPCのどこにおけばいいの?
それともそもそも大間違い?

サンプルコードはこれ
require 'net/https'
Net::HTTP.version_1_2
https = Net::HTTP.new( 'www.foo.var', 443 )
https.use_ssl = true
https.ca_file = '/ca-bundle.crt'
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
https.verify_depth = 5
https.start { |w|
response = w.get('/')
puts response.body
}
277デフォルトの名無しさん:2006/12/05(火) 21:58:13
opensslとnet/httpsが追加されたのはruby 1.8.0からだな。
どっかに単独配布時代の落ちてればいいんだが、ミツカンネ。
頑張って探すかRubyのバージョン上げてくれい。
278デフォルトの名無しさん:2006/12/05(火) 22:00:05
>>276
1.8.5 使いなさい。
279デフォルトの名無しさん:2006/12/05(火) 22:00:36
http://www.nongnu.org/rubypki/
ここが単独時代の跡地らしいが、ダウンロードリンク切れになってるな。
280276:2006/12/05(火) 22:30:38
277,278,279
ありがとう(号泣しそうです
にちゃんで久しぶりに親切な人たちを見た!お前ら大好き!
素直に1.8.Xにするずら
281デフォルトの名無しさん:2006/12/06(水) 08:17:37
Ruby始めて1年以上経つんですが、(日曜プログラマです。大学でJavaを軽くやった程度です)
1.ローカル変数、インスタンス変数、(あと、Classクラスのインスタンス変数ですか)、クラス変数のスコープが、
  複数ファイルにクラス定義が分割されてたり、
  クラスやモジュールがネストされた関係にあったり、
  後から特異的に定義されたりすると、何が何かわからなくなってしまいます。
  一応、自分なりに、色々動かして、こんな感じじゃないかなぁとは思うようになったんですが
2.このことを、動的言語っていうこととか、宣言文とか、
  そういう話も含めて、
  こういう原則というか、思想に基づくから、
  この変数は、ここまでがスコープなんだよとかいう風に
  説明してくれてるような、本とかドキュメントとかないでしょうか。
3.例としては、カプセル化したいから、publicとかprivateとかあって
  インスタンス変数は、元々privateなんだよ、というような説明があればいいんですが。

こういう理解は、C言語覚えて、ソース読まないといけないんでしょうか。。
それとも、アプローチの仕方が悪いんでしょうか。


読んだ本は以下の感じです。
たのしいRuby(1版)、
Rubyレシピブック
Ruby on Rails関連の本
282デフォルトの名無しさん:2006/12/06(水) 08:38:32
1.2.3.の使い方が意味わからない
283デフォルトの名無しさん:2006/12/06(水) 08:46:10
>>282
Excelでおk
284デフォルトの名無しさん:2006/12/06(水) 11:59:01
>>283
はいはいLotusLotus
285デフォルトの名無しさん:2006/12/06(水) 14:12:19
咲け〜輪廻のOh〜
286デフォルトの名無しさん:2006/12/06(水) 19:37:58
>>281
プログラミングRuby第二版言語編
初めてのプログラミング

この二冊は読んでおいて損はないはず
287デフォルトの名無しさん:2006/12/06(水) 23:12:05
cronからruby/tkスクリプトを動かしてwindowを開かせるには、どうすればいいんでしょう?
cronからwindowを開かせるには、例えば
xterm -display :0.0
のようにXサーバを指定しなければならないようですが、
その方法が分かりません。
288デフォルトの名無しさん:2006/12/06(水) 23:52:29
>>287
RubyよりもXの質問になるね。
DISPLAY環境変数exportしておけば?
あと xhostとかで使用許可を出しておかないとたぶん表示させてくれない。
289デフォルトの名無しさん:2006/12/07(木) 00:18:48
つーかcronからじゃどのDISPLAYに出したらいいか、
そもそもあるのかどうかすらわからんだろう。

~/.xsessionとか~/.xinitrcあたりで、時間がくるまで眠ってるプロセスでも
バックグラウンドで走らすとか。
290デフォルトの名無しさん:2006/12/07(木) 00:43:51
php5なんて誰も使ってないから
291デフォルトの名無しさん:2006/12/07(木) 18:08:09
292デフォルトの名無しさん:2006/12/08(金) 02:01:33
初心者すぎてすみません。

CSVのファイルを開いて

1,2,3,4
5,,3,6
2,,,3
↑このように保存されている

split使って
1
2
3
4
5

3
6
2


3

のように新しくCSVファイルを作りたいんですけど
どうやってやればいいですか?
すみません。。。
293デフォルトの名無しさん:2006/12/08(金) 02:40:25
>>292
まず、p を使ってスクリプト途中のデータの構造や状態を把握。把握したら適当に処理。
294デフォルトの名無しさん:2006/12/08(金) 02:55:30
宿題っぽいやかん
295デフォルトの名無しさん:2006/12/08(金) 03:00:22
これでいい?
puts File.read('csv').split(/,|\n/)
296デフォルトの名無しさん:2006/12/08(金) 03:30:26
宿題っぽい質問にはやらしい解法の回答しか返ってきません
297デフォルトの名無しさん:2006/12/08(金) 03:45:11
ちょっとくらい教えてあげればいいのに。
ケチやな。

まぁおれにはできないけど(爆
298デフォルトの名無しさん:2006/12/08(金) 04:48:30
どうやって新しく "CSV" ファイルを作るんだろう
299デフォルトの名無しさん:2006/12/08(金) 07:19:27
朝のお祈りを忘れなければできる
300デフォルトの名無しさん:2006/12/08(金) 10:03:29
>298
結果を新たに作った csv ファイルに書き込むんじゃないのか?
301デフォルトの名無しさん:2006/12/08(金) 13:04:20
でも csv っていうくらいだから(ry
302デフォルトの名無しさん:2006/12/08(金) 13:26:02
だよな・・・・
303デフォルトの名無しさん:2006/12/08(金) 23:25:10
フォルダの最終懇親時間を書き換えようと思って File.utime() を使ったんだけど
Permission denied で書き換えられなくてちょっと困ってます。
どうすればいいでしょう。
環境は ruby 1.8.5 (2006-08-25) [i386-mswin32] の win2000 です。
304デフォルトの名無しさん:2006/12/08(金) 23:30:49
クラスメソッドを定義するのに
特異メソッドの定義方法を用いると
どうなります?

なんか、どこかで見かけた気がするんですが。。
305デフォルトの名無しさん:2006/12/08(金) 23:43:00
どうなります? とは
class << self; endの中に定義するのとの違いは? ってこと?

306デフォルトの名無しさん:2006/12/08(金) 23:46:20
こういうのを期待しているんじゃないかな。
obj.class.define_method(new_method_name, defined_method)
307デフォルトの名無しさん:2006/12/08(金) 23:52:59
Rubyではクラスメソッドとは
「Classクラスのインスタンスである何らかのクラス定数」
に対する特異メソッドである。なので、通常の特異メソッドと同様、

def String.new_with_upcase(src)
new(src.upcase)
end

と出来て、

greeting = String.new_with_upcase("hello, world")
puts greeting #=> HELLO, WORLD

こういう、「書き方」を質問しているのかしらん。

308デフォルトの名無しさん:2006/12/08(金) 23:53:55
http://shugo.net/jit/20050328.html

この記事、理解できないんですけど、
どういうことなんでしょう??
309303:2006/12/08(金) 23:56:51
自己解決しました。

explorerでフォルダ開いてたせいでPermission deniedが出てたようでした。
310デフォルトの名無しさん:2006/12/09(土) 00:01:46
>>304
こんな感じじゃない??

class Example
class << self
def show
puts "SHOW"
end
end
end

Example.show
311デフォルトの名無しさん:2006/12/09(土) 03:30:44
>>308
forを使った場合、midはforの外も含むスコープに含まれる。
ということは、define_methodに渡しているブロック内のmidもそれになる。
で、for終了時点でmidの中身は:getcなので、せっかく定義した
readもgetsもgetcも、全部getcを呼び出してしまう。

eachを使ってブロックの引数としてmidを使った場合は、
midのスコープはeachのブロック内で閉じる。
だから、define_methodに渡しているブロック内のmidは、
ちゃんとそれぞれ別々の物になる。

言葉で説明するとどうもうまく書けないけど、これで通じるかな?
312デフォルトの名無しさん:2006/12/09(土) 15:10:16
あるページのJAVAスクリプトからデータをサーブレットにPOST?して
検索結果のページを取得したいのですが、rubyではどうすればよいのか
ヒントをお願いします。
************************************************
 function postApmtData( actNamS, actMthdS , aptIdS ){
  var formC   = eval( "document." + frmNamS ) ;
  var tempAction = formC.action ;

  formC.actNamS.value  = actNamS ;
  formC.actMthdS.value = actMthdS ;
  formC.aptIdS.value = aptIdS ;
  formC.action = 'http://xxx.jp/yyy/Servlet/zzz' ;
  formC.submit( ) ;

  return false ;
 }
************************************************
 onClick="JavaScript:postApmtData('ArrNormalSearch'
                 ,'topFromApLst'
                 ,'588');return false;"
313デフォルトの名無しさん:2006/12/09(土) 18:29:52
以下のスクリプトで”不正なアクセスです。”となります… orz

require 'net/http'
Net::HTTP.version_1_2

File.open( 'result.html', 'w' ) {|f|
 Net::HTTP.start('xxx.jp', 80) { |http|
  response = http.post('/yyy/Servlet/zzz', \
        "actNamS=ArrNormalSearch&" + \
        "actMthdS=topFromApLst&" + \
        "aptIdS=588")
  f.write(response.body)
 }
}
314デフォルトの名無しさん:2006/12/09(土) 19:04:47
getはどうすか
315デフォルトの名無しさん:2006/12/09(土) 19:42:33
見づらいから ¥ やめれ。その位置ならいらない。
316デフォルトの名無しさん:2006/12/09(土) 20:03:04
通常の特異メソッド、って何だか変なひびき。
317308:2006/12/09(土) 21:44:32
>>311
ありがとうございます。
スコープの問題なんですね。

forを使った場合は
readメソッドの定義内では、@input.send(mid,*args)
getsメソッドの定義内では、@input.send(mid,*args)
getcメソッドの定義内では、@input.send(mid,*args)
で、結局 mid は:getc だということでしょうか。

blockを使った場合は
readメソッドの定義内では、@input.send(:read,*args)
getsメソッドの定義内では、@input.send(:getc,*args)
getcメソッドの定義内では、@input.send(:gets,*args)

という風になってるようなんですが、
スコープというより、定義するタイミングの問題でもあるんでしょうか。

ちょっと、理解できなかったですorz
318デフォルトの名無しさん:2006/12/10(日) 00:43:17
クラスの特異メソッドとインスタンスの特異メソッドはほんとは違うんだけどな。
319デフォルトの名無しさん:2006/12/10(日) 00:50:21
クラスもClassクラスのインスタンスなんだから、
同じなんじゃないの?
320デフォルトの名無しさん:2006/12/10(日) 04:30:55
特異クラスの作られ方とかが違う気がするが複雑すぎてわからん
321311:2006/12/10(日) 05:19:57
>>317
いや、スコープのせいで、forの場合のmidは全部同じ変数、
eachの場合のmidは3回繰り返すそれぞれで別の変数、になってる。

だから、forの場合は最後にmidに代入された:getcがmidの値になるし、
eachの場合はそうでない。
322デフォルトの名無しさん:2006/12/10(日) 15:58:46
>>318
クラスの特異メソッドは継承されるとかそういう話?
323デフォルトの名無しさん:2006/12/10(日) 18:13:15
string::index や string::gsub が
HTMLコメントの<!-- -->を無視するんですが
どうすれば検索できるんでしょうか?
324デフォルトの名無しさん:2006/12/10(日) 18:44:04
>>323
まずコードをコピペしなさい。
325デフォルトの名無しさん:2006/12/10(日) 18:46:00
>>324
了解
326323:2006/12/10(日) 18:58:45
スクリプト"index.rb"
f = open("index.html","r")
d = f.read
f.close

p d.index("<!--link_file-->")
p d.index("<--link_file-->")
gets


検索するファイル"index.html"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Ruby</TITLE></HEAD>
<BODY>
<CENTER>
<TABLE border="1" cellspacing="0" cellpadding="0">
<TBODY>
<TR>
<TD width="200" colspan="2"><--link_file--></TD>
<TD width="590"><!--file_data--></TD>
</TR>
</TBODY>
</TABLE>
</CENTER>
</BODY>
</HTML>

結果
nil
225
327323:2006/12/10(日) 19:00:25
ああ!まちがいました。これ違いますorz
328323:2006/12/10(日) 19:02:38
サンプル作って検索したら成功します・・・
別の問題かも・・・ごめんなさい・・・あぁ
329323:2006/12/10(日) 19:18:08
原因わかりました

検索する前に置換しちゃってました・・・
330デフォルトの名無しさん:2006/12/10(日) 21:25:10
おもろいなおまい。
331デフォルトの名無しさん:2006/12/10(日) 23:13:54
string = "ajtalktjalgjalkjclkklfgjaklgajkltatataagagagaga"

このような文字列があったとして

string[num - 10,10]
このようにして配列を抽出するとき、numが10だと10から10個手前の文字10文字を抽出しますが
numが1だと-9,10 numが7だと-3,10となり後ろから数えた文字を抽出してしまいます。
そうではなくて、numが7だとすると 7から10個手前の文字といきたいところですが
10文字もないのである分の7文字を抽出するにはどうしたらよいのでしょうか?

普通に、[num - 10 ,10] のようにやるとnumが10より小さいと[-3,10]のようにマイナス指定になってしまいます。
マイナス指定するのではなく、10より小さいとnumから10までの文字を抽出するようにしたいのです。
332デフォルトの名無しさん:2006/12/10(日) 23:22:22
>>331
場合分けするしかないのでは?
333デフォルトの名無しさん:2006/12/10(日) 23:31:45
string[(num - 10).abs, 10]

でいいのかな?
334デフォルトの名無しさん:2006/12/10(日) 23:32:45
あああ、10-numじゃなくてnumそのものなら場合分けするしかないね。
string[ num < 10 ? num : num - 10, 10]とか。
335デフォルトの名無しさん:2006/12/10(日) 23:42:28
質問です

渡された引数が
true か false ならそれをインスタンス変数に保存し
それ以外(nilも)なら例外を出す

って処理を書きたいのですが

def test(b)
  if b == true || b == false then
    @b = b
  else
    raise TypeError
  end
end

って冗長な気がします。
TrueClass と FalseClass を纏めるクラスもなさそうなので
クラスでの判別にすると更に冗長になりそうですし。

短い書き方無いでしょうか?
336デフォルトの名無しさん:2006/12/10(日) 23:43:24
string[[0,num-10].max, [10,num].min]
337デフォルトの名無しさん:2006/12/10(日) 23:46:01
あるいは string[0...num][/.{0,10}$/] かな。
338デフォルトの名無しさん:2006/12/10(日) 23:48:48
>335
[true, false].include?(b) くらいかな。

しかしたぶん、そのような処理を書かなきゃならんという考えが
何かの間違いだと思う。
339デフォルトの名無しさん:2006/12/10(日) 23:56:01
舞波のひとが似たようなことで悩んでたがあれは
0 or 1にする話だったからちょっと違うな。
ttp://wota.jp/ac/?date=20061121#p01
340デフォルトの名無しさん:2006/12/10(日) 23:58:59
>>338
うむ

いっそ全体を書き直したほうが今後のためにもいいかもしれん
習作的なものや作り始めたばかりなのなら思い直せ
341デフォルトの名無しさん:2006/12/11(月) 00:19:17
>>331
--- [nth, len]
nth バイト番目から長さ len バイトの部分文字列を返しま
す。nth が負の場合は文字列の末尾から数えます。
nth が範囲外を指す場合は nil を返します。

ということなので、何か根本的な勘違いしてないかい?
irb(main):004:0> 'abcdefghijklmnopqrstuvwxyz'[0,10]
=> "abcdefghij"
irb(main):005:0> 'abcdefghijklmnopqrstuvwxyz'[10,10]
=> "klmnopqrst"

# 文章で説明するよりもテストコードなり何なりで期待する結果を書いた方が
# いいような気がする。
342デフォルトの名無しさん:2006/12/11(月) 00:33:42
if ARGV.empty?
$stderr.puts "引数なし"
exit 1
end

これを設定したのですが、
ruby プログラム 引数1 引数2 でプログラムが正常に動作するプログラムを付くっ単おですが
引数2 を指定せずに実行すると
引数なし と設定したエラーが出ずに 引数2がないため開けないので別のエラーがでます。

if ARGV.empty? どうやらこれでは第1引数だけしか判断しないようなので
ARGV[0]
ARGV[1] をそれぞれif文で指定したのですが、できませんでした。

一括で、引数のempty? の判定をする方法はないのでしょうか?
よろしくお願いします。

343デフォルトの名無しさん:2006/12/11(月) 00:37:09
>>335
module BoolClass; end
class TrueClass; include BoolClass; end
class FalseClass; include BoolClass; end

def test(b)
@b = b if b.kind_of?(BoolClass) or raise TypeError
end
344デフォルトの名無しさん:2006/12/11(月) 00:50:22
>>342
まず、一括で引数のempty?ってのはなんか誤解してる気がする。
ARGVってのは配列で、ARGV.empty?ってのはその配列の中に
何かが入っているかどうかを判別しているんだよ。
だから、引数がまったく与えられなかったときにtrueになる。

よくわからんけど、引数の数が丁度2のときに処理をするの?
だったら、

raise 'usage: ruby プログラム 引数1 引数2' if ARGV.size != 2

とかやった方がいいんじゃない?
345デフォルトの名無しさん:2006/12/11(月) 00:51:39
>>331
len = [num, 10].min
string[0..num-1][-len,len]
346デフォルトの名無しさん:2006/12/11(月) 00:51:55
>>342
最初に
p ARGV
としたらどうなるか?
347デフォルトの名無しさん:2006/12/11(月) 00:52:54
あ、345はナシ

引数の数(ARGV.size == 2)で調べるところだね、これは。
348デフォルトの名無しさん:2006/12/11(月) 00:54:50
345じゃない346
連投スマソ
349デフォルトの名無しさん:2006/12/11(月) 02:45:25
よくオブジェクトの初期化とかで
obj.new(:foo => "hoge", :bar => "hage")
とかの先頭にコロンついた変数名をよく見るのだがこれって何?
単なる習慣?
350デフォルトの名無しさん:2006/12/11(月) 04:06:06
コロンがついているのは変数名ではない。Symbolのリテラル表記だ。
obj.new(:foo => "hoge", :bar => "hage")

obj.new({:foo => "hoge", :bar => "hage"})
と書いたのと同じ意味だ。つまり、obj#newにHashを渡している。

で、なぜSymbolオブジェクトをHashのキーにしているかというと、

・タイプしやすい。文字列に比べて1文字少なくて済む
  obj.new("foo" => "hoge", "bar" => "hage")
 とタイプするよりは楽だということ。
・Symbolの方がStringよりも生成時に性能的に有利。
 Symbolは内部的には整数で表されてるんで。

ということかな。まあ慣習で強制されているものではないので、
SymbolではなくStringをHashのキーに取る実装もあり得るし存在している。
351デフォルトの名無しさん:2006/12/11(月) 06:15:30
>>350 とんくす。Rubyはタイプするときに楽という理屈でわかりにくい記述があるから困る
352デフォルトの名無しさん:2006/12/11(月) 07:57:18
>>351
Symbolのリテラルは見慣れないとぎょっとする表記だけど、
慣れたらなかなかいいもんですよ。ここは慣れですw
353335:2006/12/11(月) 09:49:33
>338-343
うーん。コードが長くなってきて
クラスの海をどう渡ろうかなと。
それでちょっとだけ型判定を。

その後true/falseでなく専用のクラスを作り
そのインスタンスを2つ作り定数にしました。

いっそこうなったらトコトンやろうかと。
クラスを以てクラスを制すつもりで。
中途半端に組み込みクラスを使うより
むしろ判りやすい気がしました。
354デフォルトの名無しさん:2006/12/11(月) 10:33:26
335で冗長なんて思ってたらなにもできんよ
355デフォルトの名無しさん:2006/12/11(月) 10:33:28
たかだか1バイトじゃねーか、とは思うが、Lispかじってると
なにかとシンボルを使いたくなる。
356デフォルトの名無しさん:2006/12/11(月) 11:56:46
文字列をIOストリームのように扱うことってできないでしょうか?
例えば、ネットワークから読み込んできた文字列 sを、
s.read(2)
などのように、先頭から順番に読み込みたいのですが。

今は、
value = s[index]
index += 1
などのようにしていて、面倒です。
357デフォルトの名無しさん:2006/12/11(月) 11:59:46
358デフォルトの名無しさん:2006/12/11(月) 12:11:50
>>357
おお。ちゃんと用意されているのですね。
ありがとうございました。
359デフォルトの名無しさん:2006/12/11(月) 12:35:05
s = File.read('file') #ファイルが空の場合もアリ
a, b = s.split(//)
print(a, b)

a,bにnilが代入された時は「空文字列」を設定したいのですが
何かエレガントな書き方はありますか?
とりあえず今は、1つずつ
a = a || ''; b = b || ''
みたいにやってるのですが、変数の数が増えると大変なので
もっと簡潔に書ける方法があると良いのですが。
360デフォルトの名無しさん:2006/12/11(月) 12:47:55
print "#{a}#{b}"
361デフォルトの名無しさん:2006/12/11(月) 13:17:32
a, b = s.split(//) + [ '', '' ]
でいけるのかな。

あと
a = a || ''

a ||= ''
とも書ける。

362デフォルトの名無しさん:2006/12/11(月) 13:24:58
>>360
こんな場合にエラーなく処理させたいんです。
今は分割した物を、その都度 a = a || '' みたいにしてるんですが…

s = File.read('file') #空の場合もあれば 'w x|y z' みたいな場合もあり
a, b = s.split('|')
c, d = a.split(' ')
e, f = b.split(' ')
print(a, b, "\n", c, d, "\n", e, f, "\n")
363デフォルトの名無しさん:2006/12/11(月) 13:27:58
>>361
おおっ、エレガントだ!
ありがとうございました。
364デフォルトの名無しさん:2006/12/11(月) 13:30:57
(a ? a : "").split(' ')
365デフォルトの名無しさん:2006/12/11(月) 13:35:31
>>364
そういう方法もありますね。
一つ勉強になりました。
366356:2006/12/11(月) 13:39:44
StringIOを使っていたのですが、ちょとハマってしまいました。
文字列、といっても中身はバイナリデータなのですが、

6A 0D 0A 00 00 51
のようなデータの場合、
seekや、readなどで、0Dが飛ばされて処理されてしまいます。

たぶん、0D0Aが改行コードと認識されているのですが、
飛ばされないようにするというか、バイナリとして扱うことはできないのでしょうか?
367356:2006/12/11(月) 13:46:06
binmodeも試しましたが、駄目でした orz

もしかしたら、根本的な問題なのですが、
バイナリファイルを扱うのに、StringIO(IOストリーム)は向いていなかったりしますか?
今は、seekとreadなどで、読もうとしています。
368デフォルトの名無しさん:2006/12/11(月) 13:58:39
うちでは\rも\nも普通に扱えてるけどなぁ。
ファイルから読み込むときに既に\rが落ちてしまってるとか言うことはない?
369デフォルトの名無しさん:2006/12/11(月) 14:01:18
Windows上で、元ファイルのopenのときにバイナリモードにしてないとか。
370デフォルトの名無しさん:2006/12/11(月) 14:01:59
ああ、ごめん。ネットワークとかから元データ取ってくるのか。
371デフォルトの名無しさん:2006/12/11(月) 14:04:41
すみません、もう一つだけ。
教えてもらった事を参考に↓みたいにしたのですが
エラーなく処理させるには、これがベストでしょうか?

s = File.read('file') #空の場合もあれば 'w,x|y,z' みたいな場合もあり
a = s.split('|')
c, d = (a[0] ? a[0] : '').split(',') + ['', '']
print c, d
372356:2006/12/11(月) 14:05:53
元データは、open-uriのopenで取ってきたデータなのですが、
ファイルに出力すると、ちゃんと
 6A 0D 0A 00 00 51
になっていました。
ですが、StringIO経由だと、
 6A 0A 00 00 51
になってしまいます。

うむむ
373371:2006/12/11(月) 14:10:29
File.read('file') で読み込んだデータは
'a,b|c,d|e,f|g,h|..' みたいにずっと続くので
最初の分割は
a = s.split('|') みたいに配列にしないとマズイです。
x, y = a.split('|') みたいにするとマズイ。
374356:2006/12/11(月) 14:13:47
# ファイルからバイナリモードでopenした場合
io = open(OUT_FILE + ".bin", "rb")
# StringIOで、Openした場合
# io = StringIO.open(s, "rb")

value = io.read(4)
puts sprintf('%x %x %x %x', value[0], value[1], value[2], value[3])

io.close

やはり、ファイルからバイナリモードで読み込んだときと、StringIOでOpenしたときと
挙動が違いますね。
これって仕様でしょうか?

一旦ファイルに落として、再度読み込むのを許容するしかないですかね?
375デフォルトの名無しさん:2006/12/11(月) 14:24:49
>>372
Windowsだと、binmodeで書き出ししない場合
勝手に\nが\r\nに直されてしまうから p sでチェックしてみて。
376356:2006/12/11(月) 15:25:45
>>375
あ、ファイルに書き出した時点で、\nが\r\nになっているというお話ですか?

か、確認しました!
バイナリモードで書き出したら、\nが\r\nになっているだけでした。

つ、つまり・・・
 6A 0A 00 00 51
で、正しいです。StringIOは悪くないです。
俺が悪かったです orz
377356:2006/12/11(月) 15:26:18
> バイナリモードで書き出したら、\nが\r\nになっているだけでした。
バイナリモードで書き出したら、\nのままでした。
378デフォルトの名無しさん:2006/12/11(月) 16:38:13
わざわざファイルに書き出さなくても
p obj で、objのRubyの内部表現が見られるよ。
379342:2006/12/11(月) 19:25:04
何かよくわからなくなってきたので整理します。

引数がないままプログラムを実行するとエラーがでますよね
引数が1つしか指定しない場合だと、
if ARGV.empty? で引数が入力されない場合に
putsしてエラー文を出力します。

でもこれだと、コマンドラインから入力する引数(ファイル名など)が2つある場合だと
この文では、putsのエラー文ではなく、デフォルトのエラーが出てしまいます。

この2つや3つ目の引数をコマンドラインから入力するとなると、
引数が入力されなかった場合や、引数の入力が足りない場合
どのようして、指定のエラー文を出力すればよいのでしょうか?
380デフォルトの名無しさん:2006/12/11(月) 19:30:57
>>379
引数の数は丁度2個欲しいのか、丁度3個欲しいのか、
最低2個は欲しいが3個目も受け付けるのか、
それ以外なのかはっきりしろ。
それと>>344は試してみたのか?
381342:2006/12/11(月) 19:35:29
>>380
必要な引数は2つです。でも、3つや4つも一度にできるのであれば知りたいです。
引数はいずれもファイル名です。
>>344についですが、
raise 'usage: ruby プログラム 引数1 引数2' if ARGV.size != 2

引数は入力毎に異なるのでプログラム中に記述できないような気がするのですが・・・
382デフォルトの名無しさん:2006/12/11(月) 19:37:00
ARGVは配列で、でもって配列のempty? は
配列そのものに要素が「1つでも」あるのか、全くないかを判定するためのもの。
それぞれの要素が存在するかを知るためのものではない。
383デフォルトの名無しさん:2006/12/11(月) 19:40:34
>>379
optparse使え。
または、 p ARGV しながらプログラム書け。
384デフォルトの名無しさん:2006/12/11(月) 19:44:36
>>381
わかった。親切にメッセージを出した方がいいと考えたおれがバカだった。

raise if ARGV.size !=2

これでどうだ? 引数の数が丁度2でなかったときは
例外を上げてプログラムを終了する。
385デフォルトの名無しさん:2006/12/11(月) 19:46:27

def main(argv)
raise if argv.size != 2
arg1 = argv[0]
arg2 = argv[1]
# 処理
end

if __FILE__ == $0
main(ARGV)
end

386デフォルトの名無しさん:2006/12/11(月) 20:03:34
unless ARGV.size == 2
だとRubyっぽい。
387デフォルトの名無しさん:2006/12/11(月) 22:52:29
>>381
>引数は入力毎に異なるのでプログラム中に記述できないような気がするのですが・・・

…新手のギャグ?
つprintf
つ式展開
388342:2006/12/11(月) 22:58:59
>>384
raise if ARGV.size !=2
$stderr.puts "引数なし"
exit 1
end

文法エラーとでたのですが・・・
389デフォルトの名無しさん:2006/12/11(月) 23:14:27
そのendは、以上という意味だ。
390342:2006/12/11(月) 23:18:00
でもそうしないと、exit 1でどのみち終わるのでは??
391デフォルトの名無しさん:2006/12/11(月) 23:20:08
えーと、どういう答えが欲しいんだ、こいつは。
392デフォルトの名無しさん:2006/12/11(月) 23:38:04
常識的に考えてわかるだろ
393342:2006/12/12(火) 00:14:22
どうやったら>>>388のendをなくして実行したところ
unhandled exception
とエラーがでています。まだおかしいみたいです
394デフォルトの名無しさん:2006/12/12(火) 00:17:44
それはそれで正しい。rescueしてないから最終的にエラーとして
報告されてるわけ。

395342:2006/12/12(火) 00:19:27
なるほどレスキューが必要でしたか。すみません。
empty?でやってたときはrescueがいらなかったので・・・
396デフォルトの名無しさん:2006/12/12(火) 00:29:13
abort "引数なし" unless ARGV.size == 2
397デフォルトの名無しさん:2006/12/12(火) 00:37:52
>>350
あと、キーにシンボルを使うとキーと値が視覚的に区別しやすい。
構文強調をサポートしたエディタではなおさら。
398デフォルトの名無しさん:2006/12/12(火) 00:41:47
>>397
それありますねー。
結構でかい。

そういや、Railsで、シンボルと値の組のハッシュを多用しますけど、
シンボル名を間違えまくる。
それでも動いたりするんですが、
これはRubyの宿命ですか?
399デフォルトの名無しさん:2006/12/12(火) 00:46:45
何が言いたいかって言うと、↓Adaの仮引数みたいに、
Put(Item => 1 + 1, Width => 3);
したいのでしょうけど、記述ミスが痛いということでせう
400デフォルトの名無しさん:2006/12/12(火) 06:13:51
>>395
で、beginつけずにrescueだけつけて、
文法エラーがでてしまいました、とか言い出しそうな悪寒
401デフォルトの名無しさん:2006/12/12(火) 06:42:08
>>398
シンボルはリテラルなのでRubyに限らず間違えても(ry
補完機能つきのエディタ使えよ。
402デフォルトの名無しさん:2006/12/12(火) 19:36:23
Ruby書くのに最適な補完機能つきエディタってあります?
予約語だけじゃなくて、変数までカバーしてくれるやつ。

今はeclipseのrubyプラグインを使ってるんですが、
補完機能が貧弱なので。
403デフォルトの名無しさん:2006/12/12(火) 19:58:03
Railsいじってたときに、RadRails使ってたけど、やっぱり、補完は貧弱ですよね
厳密な補完じゃなくていいなら、(単語レベルなら)
xyzzyのRuby-modeかな。
でもこちらもオマケという程度です。
emacsとかのRuby-modeはどうなんかね?
404デフォルトの名無しさん:2006/12/12(火) 20:01:19
たのしいRubyを読んでいます
これの次に読むべき本は何ですか?

RubyはWebアプリのための開発言語でしか
ないのでしょうか?
何か画期的な使い道はないんですかね?
Linuxとかでsedやawkにとって変わるものでしょうか
405デフォルトの名無しさん:2006/12/12(火) 20:06:49
>398
ある程度決まっているなら
使うシンボルを全部モジュール定数に入れておく。
実際にハッシュにアクセスする時は定数を指定。
406デフォルトの名無しさん:2006/12/12(火) 20:07:04
>>404
Windowsで、sedやawk知らんから、ruby便利に使ってます。
Rakeやら、テキスト処理から、ネットからのデータのダウンロードまでないと、
おれは死ぬ。
407デフォルトの名無しさん:2006/12/12(火) 20:07:14
sedやawkに取って代わるものではないと思うよ。
sedやawkが他に取って代わられるようなものなら、とっくに取って代わられてるわけで。
408デフォルトの名無しさん:2006/12/12(火) 20:08:28
>>402
RDEはどうかな。
予約語と変数(というか編集中バッファ内の単語)両方を候補に出す。
メソッドの補完がイマイチだけど。
409デフォルトの名無しさん:2006/12/12(火) 20:12:18
>>407
真理

まあ、RubyをPerlに代わる標準スクリプト言語として採用しようとした
Linuxディストリビューションが過去存在したが…
410デフォルトの名無しさん:2006/12/12(火) 20:19:25
>>406
ネットからのデータのダウンロードなども
できるのですか もっと勉強してみます
ソケット通信とは違うんですよね?
>>407
RubyはRubyで勉強していけばいいですね

普段はC使ってます。まだ目標が無いのですが、色々な言語を
知りたいと思いRubyにしました。フリーだしオブジェクト志向で良い材料だと
思ってます。
411デフォルトの名無しさん:2006/12/12(火) 20:28:32
バイナリファイルの読み書きを楽にする方法ってないですか?
今は、読み書きに以下のように書いています
ioは、openで開いたものです。

def read_word(io)
value = io.read(2)
return (value[1] << 8) + value[0]
end

packとか使うんだろうか
412402:2006/12/12(火) 20:34:04
>>403
xyzzyのruby-mode、使ってました。emacsのruby-modeは
よく知りませんが、最近バージョンが上がったんだっけ。

>>408
RDE、なぜか忘れていました。使ってみます。

海の向こうではTextmateの人気が高いようで。うらやましい。
413デフォルトの名無しさん:2006/12/12(火) 20:34:50
TextMateの本(PragProgの)を読んでるけど、略語展開と補完だけでは万全ではないな。
いまのところ日本語は普通には打てないしシェアウェアだし。

シンボル補完
一部タイプしてESC、複数候補はESC連打

対象は現在ソースにあるシンボルなので、
s = file.read
s.indESC #=> s.index()
なんてことはできない。

型が字面からわかりづらい言語で、現在の型にあわせて補完やるのは難しいだろうなー。

略語展開
たとえばeawiTABとタイプすると
each_with_index { |e,i| } # eが選択された状態
になる。

おまけながら、その場でCtrl-{すると
each_with_index do |e,i|
TAB
end
になったりする。
414402:2006/12/12(火) 20:54:11
> TextMateの本(PragProgの)を読んでるけど、
へー、そんなのあるんですね。

> いまのところ日本語は普通には打てないしシェアウェアだし。
後者はいいけど、前者は痛いですね。でも、なんかすごい
使いやすそうなのは分かりました。どっちみち、macもってないん
ですけど。

今思い出しましたが、RubyCLRの作者の人が、かなり
使いやすそうな環境を自慢してる動画を見たことがある。
あれ何だったっけ。
415デフォルトの名無しさん:2006/12/12(火) 20:54:58
>>411
読むほうはunpack、書くほうはpackだね。
416デフォルトの名無しさん:2006/12/12(火) 23:00:09
PragProgのTextMateの本てーと、これか。
現在ベータ版。製本されて世に出るのは2月らしい。
http://www.pragmaticprogrammer.com/titles/textmate/index.html
417デフォルトの名無しさん:2006/12/13(水) 09:41:09
昨日のオレンジニュースで見たこのデモなんだけど。

■ ECBやemacs-railsなどEmacsの機能をデモンストレーションしたFlash動画
http://platypope.org/yada/emacs-demo/
■ デモで扱ったElispパッケージ群
http://platypope.org/blog/2006/9/8/i-need-a-cool-european-accent

左のツリーにtortoiseSVNみたいにsvnの状態が出るのに感動した。
最近の emacs ってすごいな。

これってmeadowでも動く?
418デフォルトの名無しさん:2006/12/13(水) 10:29:40
>>417
emacsすげえな
419デフォルトの名無しさん:2006/12/13(水) 13:22:21
すげーはすげーけどキッチンと食卓つきトイレのようなすごさだなw
420デフォルトの名無しさん:2006/12/13(水) 13:25:37
Emacsは、ほら、キッチンシンクの権現(権化)ですから。
421342,388:2006/12/13(水) 13:41:52
begin
raise if ARGV.size !=2
rescue Errno::TypeError
$stderr.puts "引数なし"
exit 1
end


これやるとまたエラーがでたのですが、いわれたとおりにしたのに・・・
uninitialized constant Errno::TypeError (NameError)
422デフォルトの名無しさん:2006/12/13(水) 13:57:15
if ARGV.size != 2
  STDERR.puts "usage: #{$0} arg1 arg2"
  exit false
end
423デフォルトの名無しさん:2006/12/13(水) 13:58:36
Errno::TypeErrorが間違ってるな。
引数なしのraiseであがる例外は何? それをrescueしましょう。

意味的には ArgumentError なんだろうか。コマンドライン引数って。

424342,388:2006/12/13(水) 14:00:22
引数なしなら
これをしているので指定のエラーがでます
begin
file = open(ARGV[0], "r")
file2 = open(ARGV[1], "r")
rescue Errno::ENOENT, Errno::EACCES
print("ファイルが存在しないかアクセス権限なし\n")
exit 1
end
425デフォルトの名無しさん:2006/12/13(水) 14:03:45
「コマンドライン引数がない場合」という意味じゃなくて、
raiseに引数がない場合なんだが。

例外やめて>>422のように書いてもいいよ。
426デフォルトの名無しさん:2006/12/13(水) 23:05:26
ruby1.9からfd passingができるっていう話を人づてに
聞いたんだけれどどなたか詳細ご存知ですか?

リファレンスマニュアルをググってみたんだけど見つからなくて・・・
427デフォルトの名無しさん:2006/12/14(木) 01:43:16
>>424
引数が無いならはARGV == [ ]
だもんでARGV[0]や[1]はnil
openはString、Stringにできるモノ以外が来たから
TypeErrorをあげる
428デフォルトの名無しさん:2006/12/14(木) 01:52:20
>>421
> これやるとまたエラーがでたのですが、いわれたとおりにしたのに・・・

お前、レスをまともに読んでないだろ。
429デフォルトの名無しさん:2006/12/14(木) 02:09:03
TypeErrorはいいけど、Errno::TypeErrorはナシな。
430デフォルトの名無しさん:2006/12/14(木) 07:57:42
読む能力がないんだろう
431デフォルトの名無しさん:2006/12/14(木) 08:46:57
そもそも読む気がないとか。
質問のようにみえるが、実はただの独り言。
432デフォルトの名無しさん:2006/12/14(木) 16:21:29
naoyaのはてなダイアリー - ライブドアのテクノロジーセミナーでしゃべってきました。
http://d.hatena.ne.jp/naoya/20061214/1166063145

はてなの中の人のプレゼンテキスト見たのですが、
Capistrano
って何?
433デフォルトの名無しさん:2006/12/14(木) 16:28:34
>>432
naoyaグループ - naoyaの日記 - Capistrano
http://naoya.g.hatena.ne.jp/naoya/20060928/1159437059

ここにありました。
複数ホストに接続して、shellを実行するソフトなんですね
434デフォルトの名無しさん:2006/12/14(木) 17:20:05
capistrano(旧switchtower)を使うと、ローカルでコマンド一発たたくだけで、
リモートで、

鯖停止メッセージを表示させて、
新バージョンをチェックアウトして、
リンク張り替えたりして、
データベース更新して、
アプリ再起動して、
鯖停止メッセージをしまう

なんていう定型タスクを実行できる。
435デフォルトの名無しさん:2006/12/14(木) 18:25:05
ERBを使っているのですが、

<% if hoge %>
ほげ〜
<% end %>

ってやると、

(改行)
ほげ〜
(改行)

になってしまうのですが、何とかする方法はないのでしょうか?

<% if hoge %>ほげ〜<% end %>

とするしかないですか?

eRubyの?方は、
% if hoge
ほげ〜
% end
とすれば、いいのですが・・・
436デフォルトの名無しさん:2006/12/14(木) 18:34:23
>>435
ERBのtrimmodeを"%"に指定したら、
% if hoge
も認識してくれました。
ありがとうございました。
437デフォルトの名無しさん:2006/12/14(木) 19:01:09
閉じるほうを -%>とする手もある。
438デフォルトの名無しさん:2006/12/14(木) 19:10:20
るびま17号の標準添付ライブラリ解説を読むといいよ。
アレはわかりやすい。
439デフォルトの名無しさん:2006/12/15(金) 15:57:44
ruby 1.8.5 (2006-08-25) [i386-mswin32]にアップデートしたのですが、
1.8.4まで正常に動いていたコードの挙動が変わってしまいました。

どうも、-Kuの時の挙動が変わってるようなのですが…。
以下のサンプルは、すべて「サル」とテキストに出力するはずのものですが、
f_utf16.txtは「サ」になってしまいます。
1.8.4にするか、1.8.5でも-Keにすると「サル」になります。

#!/usr/bin/ruby -Ku

require 'iconv'
utf8_to_utf16 = Iconv.new('UTF-16LE', 'UTF-8')

# zenkaku katakana "saru"
utf8str = [0xe3,0x82,0xb5,0xe3,0x83,0xab].pack("C*")
utf16str= utf8_to_utf16.iconv(utf8str)
formated_utf16str = format("%s",utf16str)

open("utf8.txt","wb").write(utf8str)
open("utf16.txt","wb").write(utf16str)
open("f_utf16.txt","wb").write(formated_utf16str)
440439:2006/12/15(金) 15:58:50
挙動変更に関するアナウンスが出てたりしますでしょうか。
441デフォルトの名無しさん:2006/12/15(金) 17:20:29
こんにちは。
rubyのhttpライブラリでクッキーの扱いはどうなってるのでしょうか?
ページ上のボタンをクリックしてページを開いていくのですが、どうも
クッキーを処理できてないみたいで、ブラウザでクッキーを拒否したときと
同じページを取得してしまいます… orz
Net::を使って一から書かないとだめなのでしょうか?
442デフォルトの名無しさん:2006/12/15(金) 18:59:37
>>441
一から、というか、普通にヘッダを処理すればいいと思うよ。
443デフォルトの名無しさん:2006/12/15(金) 19:10:21
>>439
単にバグ。[ruby-dev:29952] を参照。
ruby_1_8では直ってる。ruby_1_8_5では直ってない。
444デフォルトの名無しさん:2006/12/15(金) 19:12:46
http.getで取得したbodyを正規表現で処理したいのですが、
どうも漢字をうまく扱うことができません。


#! ruby -Ks や $KCODE =
を使い読んでみましたが一致しません。

ほかに行わなければならない処理があるのでしょうか?
どうぞ宜しくお願いします。
445デフォルトの名無しさん:2006/12/15(金) 19:19:18
bodyを文字コード変換してやって
bodyと正規表現の文字コードを合わせないとダメなんじゃん?
446デフォルトの名無しさん:2006/12/15(金) 19:38:07
なるほど。

正規表現文字列に対しても文字コード変換という発想がありませんでした。
試してみます。
ありがとうございました。
447デフォルトの名無しさん:2006/12/16(土) 15:18:35
Javaだとパッケージで名前空間を分ける文化があるけど
Rubyのmoduleで名前空間分けるってアリなの?
↓みたいな
module Hoge
 module Piyo
  module Foo
   module Bar
    class SampleClass
    end
   end
  end
 end
end
448デフォルトの名無しさん:2006/12/16(土) 15:46:19
複数クラスをまとめることはある。

module M
class A
...
end

class B
...
end

end
449デフォルトの名無しさん:2006/12/16(土) 15:51:59
module Hoge::Piyo::Foo::Bar
 class SampleClass
 end
end
450デフォルトの名無しさん:2006/12/16(土) 16:05:40
>>447
深すぎwww
451デフォルトの名無しさん:2006/12/16(土) 16:58:37
前に、cygwinとmswin32版rubyを混在していると、
cygwinのターミナルで irb が、
 /usr/bin/ruby: no such file to load -- ubygems (LoadError)
と吐いて動かないという話をしました。

これの、原因がわかりました。

mswin32版は、One-Click Ruby Installer for Windowsでインストールしていて、
 RUBYOPT=-rubygems
を設定しているせいでした。

 unset RUBYOPT
で、cygwinのirbが動いてくれました。

bashだと、.bashrcに、
 alias irb='unset RUBYOPT; irb'
と書くと便利です。

そのせつは、お騒がせしました。

452デフォルトの名無しさん:2006/12/16(土) 17:43:52
rubyのエディタとして、RDEを使ってみているのですが、
Ctrl+Backspaceとかで、単語削除はできないのでしょうか?
453デフォルトの名無しさん:2006/12/16(土) 18:03:55
>>452
http://rubyde.sourceforge.net/hiki/ja/Editor.html
ここにある以外はないんじゃない?
454デフォルトの名無しさん:2006/12/16(土) 18:04:51
だめだ・・・
RDE、保存後にアンドゥーもできないし、実用には遠い・・・
455デフォルトの名無しさん:2006/12/16(土) 18:06:40
eclipseのrubyプラグいんつーのもあるね。
eclipseの使い方知らないから使ってないけど。
456デフォルトの名無しさん:2006/12/16(土) 18:12:59
>>454
自分はRDE使ってるけど、使用し続けると、数時間後にリソースエラーとか何とかで固まるのと
保存後にアンドゥーができないのは確かに辛いよね。
HDDにファイルごと履歴残してないんだろうか。
457デフォルトの名無しさん:2006/12/16(土) 18:46:53
自動リファクタリングできるやつない?
458デフォルトの名無しさん:2006/12/16(土) 18:56:42
hoge.map{ |i| result += i }
をもっと短く書きたいのですが、
inject?

>>457
なさそう・・・
459デフォルトの名無しさん:2006/12/16(土) 18:57:23
あ、
hoge.inject{ |i, j| i + j }
か。
460デフォルトの名無しさん:2006/12/16(土) 19:23:16
RDEはツールバーの位置をちゃんと保存してくれれば
使いたいんだけどなー。

そんな漏れはJmEditor。TeraPad以外でシンプルないい
エディタないかな?
461デフォルトの名無しさん:2006/12/16(土) 23:48:51
俺はずっとサクラエディタだが
文字列や正規表現のリテラルに結構困る
それが無ければなー

PeggyPad は文字間の調節が出来なくて
太字の単語が潰れる…
462デフォルトの名無しさん:2006/12/17(日) 00:48:34
>>461
自分も、PHPとかPerlとか他のスクリプトは
全部サクラエディタ使ってる。
単語の補完も出来るし、登録しとけば
パラメータヒントとかも出せるからそれなりに便利だし。
463デフォルトの名無しさん:2006/12/17(日) 12:12:58
初歩的な質問なんですが
ファイルのコピーってどうすればいいんでしょうか
テキスト系なら↓でコピーできるんですが、画像ファイルは途中で途切れてしまいます

def copy(inf,ouf)
  dat = File.open(inf , "r") {|fr| dat = fr.read }
  File.open(ouf , "w" ) {|fw| fw.write dat }
end
464デフォルトの名無しさん:2006/12/17(日) 12:25:10
バイナリモードでオープンすればいい。

def copy(inf,ouf)
  File.open(ouf , "wb") {|fw| fw.write File.open(inf , "rb"){|fr| fr.read } }
end


でも、File.copy(from, to) 使っても同じようなことができるよね。
465デフォルトの名無しさん:2006/12/17(日) 13:15:17
ありがとうございました。
バイナリモードで無事成功しました。

今までFile.copy(from, to)がなぜかエラーだったんで自作してたんですが
さっきrequire 'ftools'が必要な事に気づきました。
466デフォルトの名無しさん:2006/12/17(日) 15:39:38
fileutilsつかえyo。
467デフォルトの名無しさん:2006/12/17(日) 18:14:18
FileUtils.copy_file(from, to)
468デフォルトの名無しさん:2006/12/17(日) 22:18:43
軽いエディタならnotepad++とかどうかな?
469デフォルトの名無しさん:2006/12/18(月) 10:52:12
* Rubyは最強の言語(のひとつ)である
* Rubyユーザは少数派である
* 大衆はRubyを(いろんな理由で)受け入れられない
* 現在、Rubyを受け入れられるのは「選ばれた人々」である
* つまり、彼らはある意味「選民」である
* しかし、選民意識をあまり吹かせると、ますます大衆から受け入れられない
* 結果としてますます選民になる(悪循環の予想)
470デフォルトの名無しさん:2006/12/18(月) 12:00:24
プログラムのひとつもかけないようなやつの戯れ言を聞かされるのはたまったもんじゃないねw
471デフォルトの名無しさん:2006/12/18(月) 12:17:35
>>470
あなたのレスはRubyコミュニティーをみごとに象徴したすばらしいレスです。
472デフォルトの名無しさん:2006/12/18(月) 12:24:22
換言
プログラムを書いたことのない初心者はお断り。
473デフォルトの名無しさん:2006/12/18(月) 12:26:50
べーつにー、ただ書いたこともないくせに偉そうなこというやつはお断り。
偉そうなんだよねえ。
474デフォルトの名無しさん:2006/12/18(月) 12:28:19
どんだけエスパーなんだよ
475デフォルトの名無しさん:2006/12/18(月) 12:30:15
へ。「偉そう」って評したのがエスパーなの?
なんで?
476デフォルトの名無しさん:2006/12/18(月) 12:32:56
キチガイ来た
477デフォルトの名無しさん:2006/12/18(月) 12:45:55
まぁプログラミングの勉強をもうちょっと頑張ろうよとw
478デフォルトの名無しさん:2006/12/18(月) 12:46:55
* 現在、Rubyを受け入れられるのは「選ばれた人々」である
* つまり、彼らはある意味「選民」である
* しかし、選民意識をあまり吹かせると、ますます大衆から受け入れられない
* 結果としてますます選民になる(悪循環の予想)
479デフォルトの名無しさん:2006/12/18(月) 12:49:24
今は開発陣がRuby使ってないのが問題だから
480デフォルトの名無しさん:2006/12/18(月) 12:49:25
確かに初めてのプログラミングでRubyをやるっていうのは
向いていないような気がする。
むしろRubyには、プログラミングの概念くらいは理解しているな?的な
良くも悪くもUnix思想を受けているんじゃないかな。
481デフォルトの名無しさん:2006/12/18(月) 12:57:38
換言
Windowsしか使ったことのない初心者はお断り。
482デフォルトの名無しさん:2006/12/18(月) 13:05:00
perl++
483デフォルトの名無しさん:2006/12/18(月) 13:30:41
* プログラマは(コンピュータを使う場合は)最強の職業(のひとつ)である
* プログラマは少数派である
* 大衆はプログラミングを(いろんな理由で)受け入れられない
* 現在、プログラミングを受け入れられるのは「選ばれた人々」である
* つまり、彼らはある意味「選民」である
* しかし、選民意識をあまり吹かせると、ますます大衆から受け入れられない
* 結果としてますます選民になる(悪循環の予想)

スレ違いゴメス。
484デフォルトの名無しさん:2006/12/18(月) 14:55:03
本スレ荒れたからこっちに住み着いたのに…。
勘弁してもらえないだろうか
485デフォルトの名無しさん:2006/12/18(月) 15:16:59
サクラエディタ使いだったが色々使ってみた。
JmEditor は良さ気だな。乗り換えようか。
Notepad++ は色分けの自由度が低いし
何より改行とタブの記号が自己主張しすぎてて嫌だw
486デフォルトの名無しさん:2006/12/18(月) 15:30:28
>>484
御大自ら次々にネタを投下してる言語なんだから仕方ないだろ。
修行だ、信仰心が問われているんだと思って我慢しろ。
487デフォルトの名無しさん:2006/12/18(月) 16:56:58
Jm使ってると書いた香具師だけど、俺はNotepad++にしようと
思ってる。ランチャー機能付いてるし、設定も簡単でイイ!

勘違いかもしれないけど、改行マークは最初から色ついてなかった
ような。とりあえずタブ記号は、スタイル設定ダイアログのGloba Styles
->Indent guidelinestyleで両方の色をデフォルトの背景色にすれば
消えるよ。

Notepad++教えてくれた人アリガトン。
488デフォルトの名無しさん:2006/12/18(月) 17:07:48
そんじゃあ、SciTE はどう?
489487:2006/12/18(月) 17:21:17
Notepad++のタブ記号表示の設定方法は間違いだったスマソ。

改行とタブの表示の有無は表示メニューから切り替えるだけでOK。
490485:2006/12/18(月) 17:50:57
>487
違う違う。
俺は改行記号とタブ記号は表示されないと嫌なの。
でも、あくまで主役はコードであって欲しいから
目立つ改行・タブの記号は嫌なのさ。
極限まで薄い色にしたら一応見れた。…今度は見辛いが。

…これ設定ムズいな〜。
黒基調の設定がデフォで入ってるPeggyは楽だったんだが。

SciTEは…暇なときに設定やるかw
491デフォルトの名無しさん:2006/12/18(月) 19:10:09
>>490
> >487
> 違う違う。
> 俺は改行記号とタブ記号は表示されないと嫌なの。

失礼。そうだったのか。

> でも、あくまで主役はコードであって欲しいから
> 目立つ改行・タブの記号は嫌なのさ。

改行は特にすごいね(笑)

> 黒基調の設定がデフォで入ってるPeggyは楽だったんだが。

自分も黒バックが好みなのでその意味ではめんどいかな。

ちなみにJmでいまいち気に入らなかったのは、関連づけなどから
起動したときにタスクバーアイコンがアクティブにならないとこ。
492デフォルトの名無しさん:2006/12/18(月) 20:35:17
PSPadはどう?
493デフォルトの名無しさん:2006/12/18(月) 21:16:49
なぜemacsを使わない
494デフォルトの名無しさん:2006/12/18(月) 21:22:05
初心者スレだから
495デフォルトの名無しさん:2006/12/18(月) 22:33:55
xyzzyの事も忘れないでください。
ruby-modeも黒基調もあるよ。
496デフォルトの名無しさん:2006/12/18(月) 22:41:04
>>495
xyzzyのruby-mode最低限の機能でよいのだが、
インデントが一定規則で、誤爆する
497デフォルトの名無しさん:2006/12/18(月) 22:49:57
初心者だからemacsを使わない。それで世の中が渡っていけると思ってるのか!
498デフォルトの名無しさん:2006/12/18(月) 22:50:35
渡っている人は大勢います。
私はEmacs使っていますけどね。
499デフォルトの名無しさん:2006/12/18(月) 22:53:50
xyzzyのruby-modeはインデント奇妙だよね
500デフォルトの名無しさん:2006/12/18(月) 22:57:33
インデントについてごちゃごちゃ言うならPythonへ行けよ。
501デフォルトの名無しさん:2006/12/19(火) 00:44:28
vivivivivi―――――――!!!!
502デフォルトの名無しさん:2006/12/19(火) 10:09:23
当り前だろ。何のためにendがあると思ってるんだ?
503デフォルトの名無しさん:2006/12/19(火) 13:25:53
ruby1.8.0と標準添付のwebrickを使って
ttp://rubyist.g.hatena.ne.jp/muscovyduck/20061114/p1
に書いてあるCGI実行サンプルを動かしてみると、常に「dump error」が出ます。
(ruby最新版を使うとエラーは出ませんでした)
webrick/httpservlet/cgi_runner.rb の Marshal.restore(dump) 周りに
問題があるようなのですが……

これって何故なんでしょうか?
1.8.0ではwebrickを使わないほうが良いのでしょうか?
504デフォルトの名無しさん:2006/12/19(火) 14:12:53
1.8.0を使わない方がいい、という結論の方をお勧めする。
505デフォルトの名無しさん:2006/12/19(火) 15:23:03
ばかにしてる!
506デフォルトの名無しさん:2006/12/19(火) 16:57:37
Rubyで
オブジェクト(Classクラスのオブジェクトも、クラスのオブジェクトも含めて)
が持ってるのは、
インスタンス変数と、インスタンスメソッドだけだと思ってたけど、
次の見て、ローカル変数も保持してるのって、わけわかめになってきた。

class Hoge
local = 1
define_method(:foo) do
p local += 1
end
define_method(:bar) do
p local += 1
end
local = 10
end
hoge = Hoge.new
p hoge.foo
p hoge.bar
(つづく)
507506:2006/12/19(火) 17:01:04
(つづき)

どうやら、ローカル変数のスコープの問題が関与しているようだけど、
ローカル変数は、静的にスコープが決まるとかいって、U゚Д゚U ハァ?
って感じだったので、
静的ってのを調べたら、静的って言うのは、コンパイル時に決まるらしく、
今まで、コンパイルと実行を区別してなかった、私にとっては、
理解を超越してしまってる。
↓ここが、それに関する説明っぽいけど、
http://www.ruby-lang.org/ja/man/?cmd=view;name=%BC%C2%B9%D4
スコープなんて言葉は一言もでてこないし、
ブロックって言う言葉も、普通の{}のブロックとは違うようだし、
意味不明です。

この理解は、RHGとか読んで、ソースコード読んで理解しなさいということなんでしょうか。
正直、初心者の私には、付いていけません。
eval系メソッドを使うなってことなんでしょうか。。


1.コンパイル=>実行までの流れがわかる、
2.あと、オブジェクトがどういう値を保持していて、どこからアクセス可能か
ということについて、いい本とか、サイトないでしょうか。

教えてください。お願いします
508デフォルトの名無しさん:2006/12/19(火) 17:25:45
>>507
>↓ここが、それに関する説明っぽいけど、
ここのことかな?
http://www.ruby-lang.org/ja/man/?cmd=view;name=%BC%C2%B9%D4#a.a5.ed.a1.bc.a5.ab.a5.eb.ca.d1.bf.f4

正直、このページ全体が酷い出来だな。
むしろこっちを読むべきじゃないかな。
http://www.ruby-lang.org/ja/man/?cmd=view;name=%CA%D1%BF%F4%A4%C8%C4%EA%BF%F4#a.a5.ed.a1.bc.a5.ab.a5.eb.ca.d1.bf.f4

これでわからなかったら、また聞いてくれ。
509デフォルトの名無しさん:2006/12/19(火) 19:41:38
たしかにxyzzyのruby-modeはあんまりいけてないな。なんとかしてほしい。
>>500
xyzzyのruby-modeにおけるインデントがおかしいといってるだけであって、
ruby自体は何も非難していない。
被害妄想乙。
510デフォルトの名無しさん:2006/12/19(火) 20:09:49
>>509
じゃあスレ違いだ。xyzzyのスレに行ってやれ。
511デフォルトの名無しさん:2006/12/19(火) 23:14:41
>>506-507
まずクロージャ(closure)について勉強しろ。
理解できるまでは無理してdefine_method使うな。
512デフォルトの名無しさん:2006/12/20(水) 10:39:42
すみません。説明を放棄して使う奴の実力が足りないんだってことにしておきます。
513デフォルトの名無しさん:2006/12/20(水) 11:21:47
学習に必要なキーワードを提示してる人間を何故煽る
closureについてわからない所があれば、そこでまた質問すればいいんだ
そんなにスレを荒らそうとしないでくれ
514デフォルトの名無しさん:2006/12/20(水) 11:22:49
うぜ
515デフォルトの名無しさん:2006/12/20(水) 11:43:40
君たちが回答者という立場を満喫するべく質問を欲しそうにしていたから
質問をしてあげたんだ。
君たちは謝辞を述べてから、競い合うように簡潔にして丁寧な解説を
披露しあうべきではないのかね?
516デフォルトの名無しさん:2006/12/20(水) 12:20:38
簡潔で分かりやすい解説は、その人自身の習熟度の指標でもある。
517デフォルトの名無しさん:2006/12/20(水) 15:45:21
簡潔でわかりやすい質問は、その人自身の成長性の指標でもある。
うまく質問ができない人は、必要な回答を得られないので、成長性が低くなる。

よい回答が習熟殿の指標足りうるのは、よい質問があってこそ。
テストの問題と一緒だな。
518デフォルトの名無しさん:2006/12/20(水) 15:56:07
>>517
> うまく質問ができない人は、必要な回答を得られないので、
回答できない言い訳はどうでもいい。
ただ良い回答があればそれでいい。
519デフォルトの名無しさん:2006/12/20(水) 16:10:32
勉強になります!
520デフォルトの名無しさん:2006/12/20(水) 16:18:54
エスパーできる人は、そのことについて熟知している証拠である。
521デフォルトの名無しさん:2006/12/20(水) 16:54:41
ぼくも520さんみたいなエスパーに早くなれるよう
修行とお布施、がんばります!!
522デフォルトの名無しさん:2006/12/20(水) 23:01:50
>>509
xyzzyなら、ruby-mode.lを直接改造して、*ruby-block-beg-re*とかを改造するといいよ。
;(defvar *ruby-block-beg-re*
; "class¥¥|module¥¥|def¥¥|if¥¥|unless¥¥|case¥¥|while¥¥|until¥¥|for¥¥|begin¥¥|do")
(setq *ruby-block-beg-re*
"¥¥<¥¥(class¥¥|module¥¥|def¥¥|if¥¥|unless¥¥|case¥¥|while¥¥|until¥¥|for¥¥|begin¥¥|do¥¥)¥¥>")
とか。ちょっとはましになる。
523506,507:2006/12/20(水) 23:12:33

>>512は私ではありません。
気をわるくしないでください
2chにつながりにくくなって、返事がおそくなりました。m(__)m
お騒がせしてすみませんでした。

みなさん、ありがとうございます。
まずは、クロージャについて勉強しようと思います。

ちょっと、ネットで調べたところ、
自分が知りたい概念と同じような気がします。
524デフォルトの名無しさん:2006/12/21(木) 00:06:43
mswin32だとスレッドが使えないと聞いたのですが

Thread.fork {
while true
puts 'forked thread'
end
}
while true
puts 'main thread'
end

このコードは正しく動いている気がします
いつの間にか使えるようになったのでしょうか?
525デフォルトの名無しさん:2006/12/21(木) 00:31:04
fork違い
526デフォルトの名無しさん:2006/12/21(木) 01:04:48
forkがないってのと、console I/Oすると他のThreadも止まるってのを、
ごっちゃにしてるんじゃなかろうか。
527デフォルトの名無しさん:2006/12/21(木) 01:45:33
うん。ユーザースレッドだからmswin32だろうがスレッドは使えるよね。
528デフォルトの名無しさん:2006/12/21(木) 02:06:38
結局何が使えないんですか?
529デフォルトの名無しさん:2006/12/21(木) 06:31:22
Matz
530デフォルトの名無しさん:2006/12/21(木) 07:16:14
いるいるこういうやつ(笑)
531デフォルトの名無しさん:2006/12/21(木) 07:21:02
(笑)
532デフォルトの名無しさん:2006/12/21(木) 07:29:32
ユーザースレッドってのは、コルーチン?みたいなのかな?
OSのネイティブスレッドではない?

>>529-531
ワロタ。
でも本スレの流れを持ち込むのはやめてくれw
533デフォルトの名無しさん:2006/12/21(木) 07:33:52
>>532
そう、OSのネイティブスレッドではありません。
インタプリタががんばって処理します。
長所は移植性がとても高いこと。
短所はOSの支援を受けられないので、
たとえばSMPの恩恵を受けられないことです。
534デフォルトの名無しさん:2006/12/21(木) 20:02:20
リファレンス眺めてて気づいたのですが
while hoge..fuga
 foo
end
この記法、どういうときに使うのでしょう?
535デフォルトの名無しさん:2006/12/21(木) 21:02:05
>>534
while foo in hoge..fuga
  p foo
end

の間違いじゃ?
それだと無限ループしちゃうyo
536デフォルトの名無しさん:2006/12/21(木) 21:03:20
ごめん間違えた

for foo in hoge..fuga
  p foo
end

537デフォルトの名無しさん:2006/12/21(木) 22:15:42
ドットに複数の意味をもたせた言語デザインが悪い

とか逆切れしてみるのはどうか
538デフォルトの名無しさん:2006/12/21(木) 23:21:37
>>535
if (a==b)..(c == d)
end
みたいなのもあるんだよ。
ただ、可読性が結構低いのでお勧めは出来ないけど。

while hoge..fugaの形では使ったことはないけど
array.each do |e|
 next unless (e == hoge)..(e == fuga)
 ......
end
みたいな形では極稀に使う。
539デフォルトの名無しさん:2006/12/22(金) 10:43:54
ばっかみたい。
540デフォルトの名無しさん:2006/12/22(金) 12:05:15
define_methodとかinstance_evalだとかについて
使い方、使い所などについて懇切丁寧に解説してる
本とかってないですかねえ。
541デフォルトの名無しさん:2006/12/22(金) 13:08:50
わかる奴には説明する必要がなくて、わからない奴は使う必要がない、
というメソッドだからなあ。
なんかあるかねえ。
542デフォルトの名無しさん:2006/12/22(金) 15:48:04
使い方はマニュアル見ればいいけど、
使いどころを説明するのは難しいね。
リフレクションあたりから説き起こして
小冊子一冊分くらいの分量は優にあるテーマだと思う。
543デフォルトの名無しさん:2006/12/22(金) 20:31:24
すみません。お知恵を貸してください。

<状況>
実装がよく分からないクラスObjのインスタンスがあり、Obj#loadで
データを読んでくれます。Obj#loadが受け付ける引数はそのデータを
格納したファイルのファイル名のみです。

<やりたいこと>
手持ちの文字列データを突っ込みたいのですが、新たにファイルを
作ったりできません。

<試してみたこと>
StringIOを使ってみたりしました(NG)。

よろしくお願いします・・・。


544デフォルトの名無しさん:2006/12/22(金) 21:29:55
>>543
まずはソース嫁なんだけど。一応こんな感じでメソッド追加したら?

class Obj
  def load_str(str)
    # 何とかしてObjのインスタンス変数にアクセスする
  end
end

あとは、irbなんかでObjのインスタンス変数やらメソッドやらを調べまくればokだと思う。

545デフォルトの名無しさん:2006/12/22(金) 22:31:28
なんで新たにファイルが作れないんだろう。
Tempfile.new とかでもダメなのかな。
546デフォルトの名無しさん:2006/12/22(金) 22:59:14
loadで型をチェックしてるのかね。
IO.pipeを使って、書き込み側に手持ち文字列を突っ込んで、
読み出し側をloadの引数にすると出来たりしないだろうか。
547デフォルトの名無しさん:2006/12/22(金) 23:05:31
型チェックというか、
> Obj#loadが受け付ける引数はそのデータを
> 格納したファイルのファイル名のみです。
って書いてるから、Obj#loadの中でFile#openとか呼んでるだけなんジャマイカ?
で、File.openの引数にはTempfileとかIO.pipeの読み出し側って渡せる?
548543:2006/12/22(金) 23:07:37
wxRubyを使ったGUIアプリをExerbで固めようとしているんですが、
GUIの設定部分をXRC(XML)ファイルとして外に出しており、何とか
これも含めて1つのexeにしたかったのです。

で、Exerbの方は外部データファイルをStringIOオブジェクトとしてしか
取得できないみたいで、一方、wxRubyはXRCをファイルとしてしか
読みません(たぶん)。

まあXRCだけexeとは別に添付ということでもいいんですけど。
こういうときにTempfile.newというのは慣例的あるいは審美的に
アリなんでしょうか?
549543:2006/12/22(金) 23:14:58
すいません。レスがかぶってしまいました。
実装がよく分からないというのも、wxRuby(2)だからなんです。
拡張モジュールで、しかもSwigで作ってるらしいので、
ソースを見てもちょっと手に負えない可能性大です。

IO.pipeを調べて、一度それでやってみます。
550デフォルトの名無しさん:2006/12/23(土) 00:12:30
>>538
> if (a==b)..(c == d)
これ?ってどういう挙動すんの?

true..false
true..true
とか、って・・・
うげ、頭てんぱってきた
551543:2006/12/23(土) 00:20:36
IO.pipeの読み出し側を渡すというのは上手くいきませんでした。
Tempfileを作って渡す方は上手くいきました。

もともと存在するファイルのコピーを作るというのにちょっと
違和感があったのですが、ともあれ、ありがとうございました。
552デフォルトの名無しさん:2006/12/23(土) 00:39:29
>>550
本スレにあったけど

404 Blog Not Found:{perl,ruby} -nle 'print if /start/../end/'
http://blog.livedoor.jp/dankogai/archives/50720796.html
553デフォルトの名無しさん:2006/12/23(土) 00:39:48
>>550
Rangeオブジェクトじゃなくて、範囲式の特殊な用法。

http://www.ruby-lang.org/ja/man/?cmd=view;name=%B1%E9%BB%BB%BB%D2%BC%B0#a.c8.cf.b0.cf.bc.b0
554546:2006/12/23(土) 02:22:42
ファイル名しか渡せないってのをファイルしか渡せないと誤読してた。
混乱させて済まぬ。
555デフォルトの名無しさん:2006/12/23(土) 21:48:03
コアダンプみたいに、ある時点のRubyプログラムの状態を
全部ダンプして復元する方法はありますか?
556デフォルトの名無しさん:2006/12/23(土) 22:12:22
>>555
変数についてなら、Marshal.dump, Marshal.loadが使えるけど
スクリプト全体だと多分ないんじゃないだろうか。
557デフォルトの名無しさん:2006/12/24(日) 00:30:47
>>556
そうですか。ありがとうございます。
558デフォルトの名無しさん:2006/12/24(日) 02:04:24
rubyごとコアダンプすれば(ry
559デフォルトの名無しさん:2006/12/24(日) 02:24:21
お。Binary 2.0ネタ?
560デフォルトの名無しさん:2006/12/24(日) 02:59:48
復元したいってあるからプロセスやスレッド単位でマイグレーションしたいんじゃね。
YARVでできないの?
561デフォルトの名無しさん:2006/12/24(日) 12:11:05
YARVはbytecodeのdump/loadできたと思う。
562デフォルトの名無しさん:2006/12/24(日) 17:00:54
来年こそend廃止。
563デフォルトの名無しさん:2006/12/24(日) 17:49:00
何にすんの?
564デフォルトの名無しさん:2006/12/24(日) 17:54:24
インデント
565デフォルトの名無しさん:2006/12/24(日) 18:21:14
空行
566デフォルトの名無しさん:2006/12/24(日) 19:01:35
空行ってなんか仏教用語っぽいよね字が
567デフォルトの名無しさん:2006/12/24(日) 21:10:11
Rubyって何を造るための言語なんだ?
結局はWeb関連だったらツマランわ
568デフォルトの名無しさん:2006/12/24(日) 22:12:57
おれ個人での用途ではWeb関連で使ったのは20%くらいだな。
バッチ処理やデータ処理で使うことのほうが多い
569デフォルトの名無しさん:2006/12/24(日) 22:18:03
perl++
570デフォルトの名無しさん:2006/12/24(日) 22:39:08
いま>569がいいこと言った!
571デフォルトの名無しさん:2006/12/25(月) 00:20:58
P2Pソフト
572デフォルトの名無しさん:2006/12/25(月) 00:24:37
rakeで質問なんですが、
以下のように、xsltで、xmlを変換するRakefileを書いています。

COPY_DIR = "../html"
SRC = FileList["*.xml"]
DOCUMENTS_DEST = SRC.ext("html").map{ |item| File.join(COPY_DIR, item) }
TEMPLATE_XSL = "template.xsl"

desc "rake all"
task :all => [:all_documents]
task :all_documents => DOCUMENTS_DEST

rule '.html' => [lambda { |f| File.basename(f.sub(/\.html$/, ".xml")) }] do |t|
  sh "xsl #{t.source} #{TEMPLATE_XSL} #{t.name}"
end

TEMPLATE_XSLが変更された場合に、一番下の、rule(xslを呼び出している所)を
呼びたいのですが、いい方法はないでしょうか?

Makefileの場合、

$(COPY_DIR)%.html: %.xml $(TEMPLATE_XSL)
  $(XSLT) $< $(TEMPLATE_XSL) $@

のように書けばよかったのですが・・・
573572:2006/12/25(月) 00:31:26
fileタスクの場合は、以下のようにして、複数ファイル関連付けができるのですが
ruleの場合はどうやったらいいのかな、と思ったしだいです。

file INDEX_DEST => [INDEX_SRC, TEMPLATE_XSL] do
  sh "xsl #{INDEX_SRC} #{TEMPLATE_XSL} #{INDEX_DEST}"
end
574572:2006/12/25(月) 00:39:11
こっちに
http://pc8.2ch.net/test/read.cgi/tech/1154077799/429-433

あたりにありますね。試してみます
575572:2006/12/25(月) 00:44:50
以下のように、書き換えたことろできました!

rule '.html' => [lambda{TEMPLATE_XSL}, lambda{ |f| File.basename(f.sub(/\.html$/, ".xml")) }] do |t|
  sh "#{XSLT} #{t.sources[1]} #{TEMPLATE_XSL} #{t.name}"
end

お手数掛けました。
576デフォルトの名無しさん:2006/12/25(月) 08:11:35
>>567
俺はguiスクリプトをガリガリ書いてる
apolloがあれば大抵のことは出来るしな

というか、逆にrubyに出来ない事ってなんだろう
577デフォルトの名無しさん:2006/12/25(月) 13:46:15
>>576
OSを書くとか、どうよ。
578デフォルトの名無しさん:2006/12/25(月) 14:23:11
>>576
処理速度を要求されるのは苦手だろう
579デフォルトの名無しさん:2006/12/25(月) 14:26:13
civilization4のMOD作成
580デフォルトの名無しさん:2006/12/25(月) 15:05:21
>>579
Civ4はPythonインタプリタ内蔵だったな。
581デフォルトの名無しさん:2006/12/25(月) 15:07:52
>>576
今後リリースされるバージョンでも確実に動くアプリケーション書いてみろ。
582デフォルトの名無しさん:2006/12/25(月) 15:17:33
なに急にいきりたって
あさっての方向に「指令」出してんだろ、この子
583576:2006/12/25(月) 15:46:12
>>577
OSって、そもそもアセンブラじゃないと書けないんじゃなかったっけ?
それともC言語やJavaでOS作るのも可能なのだろうか
584デフォルトの名無しさん:2006/12/25(月) 15:49:20
>>583
誰に教わったのそれ
まあランタイム必須なものには無理だ
585デフォルトの名無しさん:2006/12/25(月) 15:49:28
>>583
「OS作る」の定義によるんじゃね?
586デフォルトの名無しさん:2006/12/25(月) 16:44:09
>>583
確かJavaで使ったOSがあったよね。
587デフォルトの名無しさん:2006/12/25(月) 17:32:31
その前にRubyでRubyが書けるようにならないと
588デフォルトの名無しさん:2006/12/25(月) 18:15:07
evalだけでいいすか?
589デフォルトの名無しさん:2006/12/25(月) 18:27:14
rubyでruby実装するのは無理。Lispマンセ
590デフォルトの名無しさん:2006/12/25(月) 18:34:44
ripperはどういう位置づけだっけ?
591デフォルトの名無しさん:2006/12/25(月) 21:52:23
f=File.open("ntl-5.4.tar.gz",'rb')
ff=File.open("an.cyp",'w')
while(f.eof?!=TRUE)
b= f.read(89)
b= key*b;
srand
print "b=",b,"\n"

こうやると89バイトの文字列として読んでしまうので掛け算ができません。
89バイト整数としてファイルから読ませるにはどうすればいいのでしょう?
よろしくお願いします。
592デフォルトの名無しさん:2006/12/25(月) 22:46:50
to_i
593デフォルトの名無しさん:2006/12/25(月) 22:47:57
>>591
力ずくでやるしか知らないが「b = f.read(89)」のあとに

c = 0
b.size.times do |i|
  c = (c << 8) | b[i]
end

とすれば、変数 c に望みの整数値が出来上がる。
バイトオーダはビッグエンディアン。

リトルエンディアンの値が欲しけりゃ times の中を下ので書き換えてくれ。
  c = (c) | (b[i] << (8 * i))
594デフォルトの名無しさん:2006/12/25(月) 22:52:50
rubyって、そんなに桁数多くても計算できるんすか・・・
595デフォルトの名無しさん:2006/12/25(月) 23:13:36
メモリが続く限り
596デフォルトの名無しさん:2006/12/25(月) 23:30:56
ただしfloatは鬼門。
597デフォルトの名無しさん:2006/12/25(月) 23:34:07
89バイトつーと、
irb> 89 * 8 * Math.log10(2)
=> 214.333356912755 桁か。
598デフォルトの名無しさん:2006/12/25(月) 23:37:13
ちょっっぴり長いね
599デフォルトの名無しさん:2006/12/26(火) 00:36:23
>>596
そんなあなたにBigDecimalを
600デフォルトの名無しさん:2006/12/26(火) 03:55:56

7^7^7
つまり7の(7の(7の階乗)乗)乗
の1の位の数字をrubyで計算してみてください
p 7**7**7 でも結果が分かるので
やってみて頂いてもいいのですが
時間がかかるのでもう少し早い方法で
プログラムしてみてください

601デフォルトの名無しさん:2006/12/26(火) 04:31:29
階乗?
累乗じゃなくて?
602デフォルトの名無しさん:2006/12/26(火) 04:38:05
でと、7のn乗の1の位は、
n = 1 -> 7
n = 2 -> 9
n = 3 -> 3
n = 4 -> 1
となるので、以降は7、9、3、1を繰り返す。
ということは、乗数を4で割った余りがわかれば1の位はわかる。
つまり、7の7乗の1の位は3になり、7の(7の7乗)乗の1の位も3。

しまった、プログラム組む前に答えがわかっちゃった。
603デフォルトの名無しさん:2006/12/26(火) 05:48:50
>>593
うまくいきました。ありがとうございます。
逆に復号したいとき、整数から文字列にして表示させるにはどうすれば
いいでしょう?よろしくお願いします。
604デフォルトの名無しさん:2006/12/26(火) 06:03:15
while(f.eof?!=TRUE)
b= f.read(15)
bb=0
b.size.times do |i|
bb=(bb<<8)|b[i]
end
b= key*bb;

print "b=",b,"\n"

while(1)
if(a=rand(key))
#print a,"\n"
break
end
end
while(1)
if(d=rand(k2))
break
end
end

c=(b+a)^d;

ff.write(c)
こんなことやってますが、書き出されたファイルの大きさが計算と違います。
何か間違いがあるのでしょうか?2370バイトのファイルを15バイトづつ
読み込んで256ビットにして書き込みしてます。
11698バイトになってしまいます。どうしてかわかりません。
605デフォルトの名無しさん:2006/12/26(火) 06:34:49
ff.write(c)をバイナリデータとして書き込みたいのですが、
テキストになってしまいます。
606デフォルトの名無しさん:2006/12/26(火) 07:49:13
>>605
つ array.pack
607デフォルトの名無しさん:2006/12/26(火) 08:09:37
undefined method array ?
608デフォルトの名無しさん:2006/12/26(火) 08:20:17
pack': can't convert Bignum into String
609デフォルトの名無しさん:2006/12/26(火) 08:24:13
`main': undefined method `pack' for #<Bignum:0x100ef758>
610デフォルトの名無しさん:2006/12/26(火) 08:37:44
ff.write(array.pack(c))でバイナリデータになるんですか?
わかりません。
611デフォルトの名無しさん:2006/12/26(火) 09:19:32
わからないならわかるやりかたでやればいいのに、無理矢理小難しくする理由がわからん。
612デフォルトの名無しさん:2006/12/26(火) 09:26:59
使い方が分からないなら
ri pack
して。
613デフォルトの名無しさん:2006/12/26(火) 11:37:26
WebAgent または Http-Access2を使用して
クッキー情報を送信してHTMLボディを取得したいのですが
どなたかおおまかなサンプルを見せていただけませんか?

googleで検索したのですが、いい資料がなく困っています。
614デフォルトの名無しさん:2006/12/26(火) 11:50:54
WebAgentみてみたけど、受け取ったことのあるクッキーなら
見つけ出して送ってくれるものの、任意にセットするメソッドは
ないみたいですな。

逆に言うと、クッキーDBファイルにこっそり該当URLのクッキーを
書いておくとそれを使ってくれるぽい。
615デフォルトの名無しさん:2006/12/26(火) 12:01:52
メソッドないので instance_eval で無理矢理。
web_agent.instance_eval do
@cookie_manager.parse(str, url)
end
とやるのかな。

あるいは parse の代わりに WebAgent::Cookie.new していろいろセットして add。
616デフォルトの名無しさん:2006/12/26(火) 12:20:11
>>605

バイトストリーム = ""
16回繰り返す { |i|
  バイトストリーム << ((整数値を i バイト右シフト) と 0xff を論理積)
}
617デフォルトの名無しさん:2006/12/26(火) 12:32:43
>>611
みんな知ってるのに俺だけ知らないのはくやしいから。
使い方ちゃんと教えろ。
618デフォルトの名無しさん:2006/12/26(火) 12:36:07
>>617
そんなこと言っていると何も出来なくなる。
自分の手元にあるものだけで どうにかできるように心がけろ。
619デフォルトの名無しさん:2006/12/26(火) 12:42:05
Cだったらバイナリモードで開いたファイルにはバイナリデータが入るんです
けどね。何でルビーは違うんでしょうね。
Cはうまくいきました。でも謎の^@が大量に入って、圧縮ファイルを復元しよう
賭したら間違いなくエラーになるので原因を探しています。
620デフォルトの名無しさん:2006/12/26(火) 12:49:26
^@ って0x00 だが
621デフォルトの名無しさん:2006/12/26(火) 13:04:40
>>619
バイナリモード云々ではなく、writeの挙動を理解していない君の落ち度だ。
writeは文字列で無ければ内部で対象を文字列に変換する。
整数12345ならば文字列"12345"に変換してしまうわけだ。

以下の部分に目を通しておきなさい。
http://www.ruby-lang.org/ja/man/?cmd=view;name=IO#write
622デフォルトの名無しさん:2006/12/26(火) 13:11:06
>>619
せめてRubyもCと同じくらい勉強してから比較してやれよ。
623デフォルトの名無しさん:2006/12/26(火) 13:19:34
>整数12345ならば文字列"12345"に変換してしまうわけだ。
センセー、rubyはなぜ全角と半角の変換を自動でおこなうのですか?
624デフォルトの名無しさん:2006/12/26(火) 13:27:57
バイナリで書き込む関数は無いのですか?
初学者には例が少ないので。
0x00が変換中に混じっているので除去しないといけないということでしょうか?
625デフォルトの名無しさん:2006/12/26(火) 13:30:06
>>623
それくらいぐぐれ
626デフォルトの名無しさん:2006/12/26(火) 13:50:18
packに
>”w”、BER圧縮整数:1バイトあたり7ビットを使用して必要最小限のバイト数で「任意サイズの 0以上の整数」を表す数値表現。
ってのがあるので、これ使えば自分で計算する必要はない。
irb(main):001:0> File.open("testfile","wb"){|f|f.write([100**100].pack("w"))}
=> 95
irb(main):002:0> File.open("testfile","rb"){|f|f.read.unpack("w")}
=> [100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
627デフォルトの名無しさん:2006/12/26(火) 13:59:26
>>624
バイナリは何で保持してる?
Stringにバイナリを保持させればwriteはそのまま書いてくれる
628デフォルトの名無しさん:2006/12/26(火) 14:08:49
gz圧縮ファイルのデータが文字列に変換されると困ります。
暗号化関数なので保存される形式はバイナリデータです。
629デフォルトの名無しさん:2006/12/26(火) 14:25:03
>>バイナリデータです。
バイナリデータでなければならないです。
630デフォルトの名無しさん:2006/12/26(火) 14:26:05
だからバイナリデータは何に入れてるの?Array?
631デフォルトの名無しさん:2006/12/26(火) 14:28:14
>>628
16バイト長整数ならば >>616 で16バイト長のバイナリに変換できる。
変換したものはStringクラスのインスタンスだから、あとは >>627 のとおり。

>>626 の方法ならば一発で出来るが、7ビットにつき1ビット付加されて18バイト長になる。
632デフォルトの名無しさん:2006/12/26(火) 14:36:06
readでは配列になってますが、シフト演算で無理やり整数表現に
なおしています。数値演算では普通にBigintになってます。
それが書き込むときに文字列に変換されてしまうのが納得いきません。
数値をバイナリデータとして書き込みたいのです。
配列のデータにまた分解して格納しないといけないのでしょうか?
633デフォルトの名無しさん:2006/12/26(火) 14:37:45
だからまた分解してArrayにしてpackしろと上の方に書いてるじゃねーか。
wだと7ビットだからダメだけど。
634デフォルトの名無しさん:2006/12/26(火) 14:41:20
>>631
その方法を使っても(3)_10=(11)_2になって文字列で格納されるだけ
じゃないでしょうか?
writeが内部で文字列変換をしている以上バイナリデータを書き込む
のはwriteでは無理なんでしょうか?
635デフォルトの名無しさん:2006/12/26(火) 14:43:47
配列に分解してからパックしてみます。
636デフォルトの名無しさん:2006/12/26(火) 15:08:17
Rubyの文字列って、現在の実装では君の言うバイナリデータだぞ。
あと、readは配列を返すのではなく、バイナリデータを含む文字列を返す。


つーか、Stringから文字列とバイト列の概念を分離して、
OctetStreamクラスを新設してくれないかなあ。
その上でStringをUnicode化してくれると嬉々累々。
637デフォルトの名無しさん:2006/12/26(火) 16:05:47
>>636
今さらPythonの後を追えというのか?Matzのプライドはどうなるんだ?
638デフォルトの名無しさん:2006/12/26(火) 16:17:37
ff.write(array.pack("llllllll"))
こんなことしたら書けました。w
639デフォルトの名無しさん:2006/12/26(火) 16:20:36
>>637
pythonからパクるの得意じゃん
640デフォルトの名無しさん:2006/12/26(火) 16:28:01
どうせなら親Windowsな姿勢を真似てもらいたい
641デフォルトの名無しさん:2006/12/26(火) 16:35:59
だれかVistaでテストしてるのかねぇ。
642デフォルトの名無しさん:2006/12/26(火) 16:53:38
どうせならWindowsエロゲ組み込み言語シェアNo1とか目指してくれ
643デフォルトの名無しさん:2006/12/26(火) 16:57:30
言語のほうから目指す必要はないけど、
エロゲ開発者はトライしてみてもいいんじゃねーかな。
644デフォルトの名無しさん:2006/12/26(火) 17:13:58
rubyもマイクロスレッドをサポートしてくれる?
645デフォルトの名無しさん:2006/12/26(火) 18:12:38
638で解決したのは634であってるのか?
正直Cのことは一端全部忘れてからRubyの勉強をした方がいいよ。
まるっきり違うから。

>>644
マイクロスレッドでググったら弾幕系がトップだな。
普通のスレッドでもProcでも継続でもなんでも好きに使えばいいと思われ。
646デフォルトの名無しさん:2006/12/26(火) 18:30:47
>>645
知らないなら黙っていたほうが恥かかないぞ。
647デフォルトの名無しさん:2006/12/26(火) 18:36:05
>>646
それを自分に適用すると人生が少しは良くなるぞ。
648デフォルトの名無しさん:2006/12/26(火) 18:40:03
ファイルAのカラム1とカラム2(たとえば100行にそれぞれ違ったカラムの値があります)
ファイルBに行にあるカラム1とカラム2(たとえば100行にそれぞれ違ったカラムの値があります)


ファイルAの1行目のカラム1が、ファイルBのカラム1(全行)中に
ファイルAの1行目のカラム2が、ファイルBのカラム2(全行)中にあれば、
ファイルAの1行目の終わりに○という文字を付加します。ないなら空白のままです。

次にファイルAの2行目、3行目と次々にファイルB中にあるか確かめていきます。


このようなプログラムですと
まずファイルAの1行目をよみ、次にファイルBの行をつぎつぎと読み込んでいきますよね。

while filea=gets
.
.
while fileb=gets
.
.
end
.
.
end 

のようなプログラムになると思うのですが、内にあるwhile文のfileb=getsの中で
ファイルAのカラムA,B = ファイルBのカラムA,B
という条件判定をするのですが、これで一致した場合、内にあるwhile文を抜けたいのですが
この場合、どうやってwhile文を抜ければよいのでしょうか?
649デフォルトの名無しさん:2006/12/26(火) 18:44:10
内側のループ(bのループ)を抜けるなら素直にbreakすればいいんじゃないの?
外側だとひと工夫必要だが。
650デフォルトの名無しさん:2006/12/26(火) 19:02:50
645みたいなのは放っておいて、俺たちだけで遊ぼうな。
ttp://kumiki.c.u-tokyo.ac.jp/~ichiyama/mt/archives/000034.html
651デフォルトの名無しさん:2006/12/26(火) 21:51:39
勝手に遊んでろ
652デフォルトの名無しさん:2006/12/26(火) 21:54:52
WindowsXP上のEclipse3.2をLangegePackで日本語化して
RDT0.8.0(org.rubypeople.rdt-0.8.0.604272100PRD.zip)を導入しましたが、
Rubyスクリプトの動作はするものの、デバッグでブレークポイントで止めても、
変数が何も表示されません。
Rubyのバージョンはmswin版の1.8.2です。

似たような症状に悩んだ人はいませんか?
アドバイスをよろしくお願いします。
653デフォルトの名無しさん:2006/12/26(火) 22:54:04
>>650
callcc なんとなく分かった。
654648:2006/12/26(火) 23:21:50
上は省略
up = File.open(output,"w")

while aline = file.gets
aline.chomp!
names, afirst, asecond, = aline.split(/\t/).values_at(0,1,2)
# afirstもasecondも数字が入る
moji = ""

while bline = file2.gets
bline.chomp!
bfirst, bsecond, = bline.split(/\t/)[0..1]
# bfirstもbsecondも数字が入る
if afirst = bfirst && asecond = bsecond
moji = "○"
break
end
end
up.print "#{names}\t#{afirst}\t#{asecond}\t#{moji}\n"
end

up.close


このようにしてプログラムを実行したところ
全ての行にmojiとして○がついています。
if文で一致する行だけ○をつけたつもりなのですが、どこがおかしいのでしょうか?
p afirst や p bsecond で確認したところ、ちゃんとsplitで分割されていました。
655デフォルトの名無しさん:2006/12/26(火) 23:49:03
>>654
if文の中、代入式になっておらんかね? しかも両方。

あと、while bline = file2.gets へ入る前に
file2.pos = 0 を加えたほうが無難そうだな。
656デフォルトの名無しさん:2006/12/26(火) 23:53:57
>>648
方法1. catchを使う
catch(:break) {
 while filea=.....
  while fileb=...
   throw if なんか抜けたい条件
  end
 end
}
http://www.ruby-lang.org/ja/man/?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DF%B4%D8%BF%F4
のcatchの項を参照。

方法2.こうする
while filea=fa.gets && fileb=f.gets
 #なんかやる
end
657648:2006/12/26(火) 23:54:50
>>655
posと== にして試してみたところ、今度はチェックの○が全てつかなくなってしまいました。

if afirst == bfirst && asecond == bsecond

これではおかしいのでしょうか??
658デフォルトの名無しさん:2006/12/26(火) 23:55:44
あ、ごめん、

throw if なんか抜けたい条件 (×)
throw :break if なんか抜けたい条件 (○)
659デフォルトの名無しさん:2006/12/27(水) 00:23:28
cgiでアップロードされた画像ファイルのサイズを変えたいと思い探してみました。
GCのライブラリは見つかりませんでした。
ImageMagickはRMagickというのが見つかりました。
とりあえず、RMagickを使うつもりですが、
他にどういう選択肢がありますか?
また、どういう方法が一般的な方法といえますか?
660デフォルトの名無しさん:2006/12/27(水) 00:42:22
GCじゃなくてGDだが・・・404だな。

それ以外だとたぶんRMagick、次点でRuby-GNOME2のGdk::Pixbufか。

拡張ライブラリは入れたくないけどImageMagickやnetpbmが入っている
のなら、コマンドを駆使して画像のサイズ変更は可能。
661659:2006/12/27(水) 05:43:42
うわまちがった。GDですね。

>>660
次点でGDKですか・・・
このあたりのニーズはないんでしょうかね。
それとも、RMagickで事足りてるのか。
だとしたら、なんで標準ライブラリに含まれないのかなぁ。
RMagickインストールすんのめんどいので、コマンド駆使でがんばることにします。
ありがとうございました。
662デフォルトの名無しさん:2006/12/27(水) 09:34:29
俺も適当にコマンド呼ぶだけだな、そういう処理だと。
663デフォルトの名無しさん:2006/12/27(水) 09:34:57
漏れもサムネール作るためだけにRMagick入れるのはばかばかしいと
思うけど、今のところしかたねーなー。

Pure Rubyの画像処理ライブラリ↓
http://cappuccino.jp/keisuken/ruby/pureimage/
対応ファイルフォーマットがPNGのみだが、
Affine変換があるから拡大縮小に使えるかも。
664デフォルトの名無しさん:2006/12/27(水) 13:38:35
鬼門追加。画像処理。
665デフォルトの名無しさん:2006/12/27(水) 13:41:34
標準で画像処理できるスクリプト言語って何だろう。
Pythonにはあったよね、たしか。あれ、SGI依存だったかな???


666デフォルトの名無しさん:2006/12/27(水) 13:44:54
>>664
誰にとっても鬼門というわけではなかろう。
ライブラリをインストールできる権限があれば別に。
667デフォルトの名無しさん:2006/12/27(水) 13:47:47
Pythonには、SGI(Irix)固有のglモジュール以外に、jpegのモジュールも
あるようだが、圧縮/伸張のみだから、画像処理とは言い難いか。
668デフォルトの名無しさん:2006/12/27(水) 14:16:03
Python ユーザなら普通PIL使うだろ。
ttp://www.pythonware.com/products/pil/
669デフォルトの名無しさん:2006/12/27(水) 14:33:19
いや、Rubyの鬼門とか言ってるから標準付属品の話をしてるわけだが。
670デフォルトの名無しさん:2006/12/27(水) 14:52:59
ImageMagickしか選択肢がないってのが問題じゃないの?
671デフォルトの名無しさん:2006/12/27(水) 15:07:44
RMagickが多機能すぎて困ってるというなら分かるかも。
672デフォルトの名無しさん:2006/12/27(水) 15:24:23
GDでいいじゃん
673デフォルトの名無しさん:2006/12/27(水) 15:25:09
ImageMagickってメモリリークしたりクラッシュしたりってのが、
いつまで経ってもおさまらないじゃん。もっとマシなのが欲しい。
674デフォルトの名無しさん:2006/12/27(水) 20:05:53
>>673
どうせ大半の人はサムネールの作成ぐらいしか使わないから。
675デフォルトの名無しさん:2006/12/27(水) 23:14:46
>672
だから404なんだぜ?
676デフォルトの名無しさん:2006/12/28(木) 00:13:53
簡単な拡大縮小くらいならsdl使えるんじゃ?
677デフォルトの名無しさん:2006/12/28(木) 01:10:07
404、とは書いたがRAAのキャッシュには残ってるな

そこまでしてRuby-GDにこだわる理由はと言われると別にないのだが
678デフォルトの名無しさん:2006/12/28(木) 09:38:49
このプログラムの実行結果が毎回違うのですが、
これって正しいことですか?
毎回同じ結果になることを期待していたのですが…
Fedora Core 4/ruby-1.8.5-p12です。

thread_ary = []
n = 0
10000.times do |i|
thread_ary << Thread.new(i) { |i2| n += i2 }
end

thread_ary.each do |th|
th.join
end

p n
679デフォルトの名無しさん:2006/12/28(木) 09:56:06
>>678
n += i2 の部分を排他ロックしてないからだろ
680デフォルトの名無しさん:2006/12/28(木) 10:17:37
>>679
Mutexで排他ロックすると、うまくいきました。
Rubyの1行の文はアトミックだと勘違いしていました。
681デフォルトの名無しさん:2006/12/28(木) 12:47:22
>Rubyの1行の文はアトミックだと勘違いしていました

すげえ勘違いのしかた。一体何をどう考えたら1行の文が...
682デフォルトの名無しさん:2006/12/28(木) 16:44:57
>>681
調べてみると、同じような話が出ていました。
ttp://www.atdot.net/~ko1/w3ml/w3ml.cgi/yarv-dev/msg/651
683デフォルトの名無しさん:2006/12/28(木) 18:45:23
678はむしろ、単純にロックし忘れてたんだろ。
もしアトミックだと勝手に想定して、あえてロックしなかったのなら性格に問題ありそう。
684デフォルトの名無しさん:2006/12/28(木) 19:05:46
>>683
Rubyコミュニティーの気持ち悪さを表現した、素晴らしいレスですね
685デフォルトの名無しさん:2006/12/28(木) 19:32:48
net/httpを利用してhtmlを読む際に
body部にてsrcで呼ばれたjavascriptを実行することは可能でしょうか?

もしあればご教授のほど宜しくお願いします。
686デフォルトの名無しさん:2006/12/28(木) 19:50:55
>>685
誰がJavascriptを解釈するの?
687デフォルトの名無しさん:2006/12/28(木) 20:16:04
>685
JavaScriptは普通ブラウザが解釈し実行する
クライアントサイドのスクリプト。

だから単純にscriptタグを出力すればOK。

…JScriptインタプリタを使って
CGIとして実行するなら話は全く別だが。
688デフォルトの名無しさん:2006/12/28(木) 20:37:16
意味わかってないなら答えないほうがいい
689デフォルトの名無しさん:2006/12/28(木) 20:43:55
性格の悪いひとたちばかりですね
690デフォルトの名無しさん:2006/12/28(木) 22:38:43
頭の悪いひとたちにはそう見えるらしいですよ
691デフォルトの名無しさん:2006/12/28(木) 23:54:11
プログラム書いたら、
Segmentation fault
となりました。
これってどういう意味ですか。
692デフォルトの名無しさん:2006/12/29(金) 00:13:13
>691
Segmentationに関するfaultだよ。字の通り見たまんま。

解消する方法は当の「プログラム」と実行環境が分からんと誰も答えようがないと思われ
693デフォルトの名無しさん:2006/12/29(金) 00:20:10
>>691
Rubyのバグをたまたまそのプログラムが突いてしまったということ
あるいは外部ライブラリとつなげたものならそれが悪さしてる可能性もある
前者なら報告した方がいい希ガス
694デフォルトの名無しさん:2006/12/29(金) 00:22:17
>>692-693
レス、ありがとうございます。
windows2000の上で動かしている
VineLinuxの中でOpenGLと
一緒に使っています。
695デフォルトの名無しさん:2006/12/29(金) 05:04:53
バグをついたのが「たまたま」なら、
ちょっとプログラム変更すれば
動くようになるんじゃない?
696デフォルトの名無しさん:2006/12/29(金) 05:22:48
そうしてみます。
697デフォルトの名無しさん:2006/12/29(金) 15:32:30
1.8.5になってからワンライナーが書きづらくなったなぁ。

>ruby -ve "puts '%02X' % 10"
ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32]
-e:1: warning: too many arguments for format string
X #=> 本当は 0A と表示されて欲しい

% + 数字 がまずいみたいだね。
698デフォルトの名無しさん:2006/12/29(金) 15:35:53
およ、うちではこうなるが。

% ruby -ve "puts '%02X' % 10"
ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-darwin]
0A
699デフォルトの名無しさん:2006/12/29(金) 17:19:20
>>697
WindowsXP+CMD.EXE+ASR1.8.5.5
だと
0A
ですよ。
VMWare上なんでコピペできんが。
環境はどういう感じ?
700697:2006/12/29(金) 20:07:30
>>698-699
ごめん。Rubyは悪くなかった。

cmd.exeで実行したら正しい結果が得られた。
nyacus上で実行してたんだけど、nyacusが%xxを展開してたみたいだ。
701687:2006/12/30(土) 04:35:57
>688
ん、俺何か勘違いしてる?
真面目に何を間違えたのか判らん
702デフォルトの名無しさん:2006/12/30(土) 11:40:57
急に「なんかわかってるフリ」をしたくなっただけでしょwきにすんな
703デフォルトの名無しさん:2007/01/02(火) 02:05:47
しかし、PHPは言語として(ry
704デフォルトの名無しさん:2007/01/02(火) 02:55:33
洗練されている?
705デフォルトの名無しさん:2007/01/02(火) 06:29:32
PHPは言語として最悪だろヴォケ
706デフォルトの名無しさん:2007/01/02(火) 06:35:27
Perlよりはマシw
707デフォルトの名無しさん:2007/01/02(火) 08:37:25
Perlは無理やり色々機能追加せず
昔のままシンプルだったらよかったのにね。
708デフォルトの名無しさん:2007/01/02(火) 08:55:06
Perl も PHP も言語として最悪と分かっていつつも
使わざるを得ない現状が何ともね。
709デフォルトの名無しさん:2007/01/02(火) 10:11:00
Rubyに乗り換えずにPerl使い続けてる奴って、
ラリーのいう「無精」が悪い方に出たクズとしか言い様がないな。
710デフォルトの名無しさん:2007/01/02(火) 10:28:34
まあ、Rubyが下手にPascalに近い文法を採用したから、C/C++修得者の受けが悪いという気はする。
C/C++修得者にとっては、PHPの方が受け入れやすいよなやっぱり。
711デフォルトの名無しさん:2007/01/02(火) 10:57:07
Delphi使ってる俺から言わせると、RubyがPascalみたいだなんて、到底思えないが。
C文法しか使えない(というか、こだわってる)奴のたわごとにしか聞こえないよ
712デフォルトの名無しさん:2007/01/02(火) 10:59:25
すげえたわごと来た
713デフォルトの名無しさん:2007/01/02(火) 11:16:16
まぁ、「〜にしか」見えなかったり聞こえなかったりするときは
「仮説が一つしか浮かばない自分の思考はどこかで猪突猛進してる」と思ったほうがいいかな
714デフォルトの名無しさん:2007/01/02(火) 12:05:10
PHPはLightweight Lesser Language。
でも実際は言語なんかどうでもよくて
研鑽しないプログラマの存在のほうが
現実には悪な場合が多い。
715デフォルトの名無しさん:2007/01/02(火) 12:11:48
>>714
perlと一緒ジャン
やっぱ、Ruby使ってる人は、勉強する人ばかりだよね

>>715
はいはい、選民思想乙
716710:2007/01/02(火) 14:21:36
>>711
いや、俺もデスクトップアプリはDelphiもBCBも使うからそう思うんよ。
例外処理の書き方とかさ
717デフォルトの名無しさん:2007/01/02(火) 14:44:41
>>716
711様がC文法しか使えない奴のたわごとにしか聞こえないって言ってるんだから
お前はC文法しか使えない奴なんだよ。ごまかすなクズ。
718デフォルトの名無しさん:2007/01/02(火) 14:46:02
Pascalみたいだってのはendがあるからでしょ。
そこからちょっとでも踏み込んで調べてみたら、
そんな印象なんか吹き飛ぶだろうに。
719デフォルトの名無しさん:2007/01/02(火) 16:04:02
なんでそんなにPascalの影響を否定するのに必死なんだこいつら
720デフォルトの名無しさん:2007/01/02(火) 16:07:12
C文法しか使えない奴のたわごとにしか聞こえないからだよ。
721デフォルトの名無しさん:2007/01/02(火) 18:32:49
PHP で何気なく
while(($c = fgetc($fp)) != EOF){
hogehoge;
}
って書いたら無限ループw
722デフォルトの名無しさん:2007/01/02(火) 18:36:06
Ruby で時々
if(fugafuga){
}
って書いて唖然とするときがある
723デフォルトの名無しさん:2007/01/02(火) 18:55:19
うっかりなら
if
  hogehoge
else
  fugafuga
endif
これやってしまう
724デフォルトの名無しさん:2007/01/02(火) 19:16:01
PascalがのブロックがCとRubyどっちに近いかっつーと
断然Cに近いんだがなぁ
725デフォルトの名無しさん:2007/01/02(火) 19:38:17
Pascalはencに.が付いたり付かなかったり
行末に;が付いたり付かなかったり
ソースを一回書いて終わりならいいんだけど
後からのメンテに面倒臭さを感じる
コンパイラに人間があわせてる感じがする
726デフォルトの名無しさん:2007/01/02(火) 19:40:57
個人的にはPascalの書きにくさを解消したのがCだと思ってるけど
727デフォルトの名無しさん:2007/01/02(火) 19:43:11
そのうち
if 〜 begin
end else begin
end
って書くようになったりするw
728デフォルトの名無しさん:2007/01/02(火) 20:10:13
そいつぁ〜重症だなw
729デフォルトの名無しさん:2007/01/02(火) 20:36:36
Pascalコンパイラに人間が合わせてる最たる物が、
「1パスでコンパイル」というのを守るための
forwardかも。
730デフォルトの名無しさん:2007/01/02(火) 20:41:37
RubyのendはPascalじゃなくてEiffelの影響なんだけどね
731デフォルトの名無しさん:2007/01/02(火) 20:47:13
>>719
全然否定していない。ただPascalの影響を言うやつのほとんどが
底の浅い理解をしているということなんだ。君みたいにな。
Pascalの影響はある。だが君が思っているところにではない。
720以降の議論の意味わからないだろ、君には。
732デフォルトの名無しさん:2007/01/02(火) 21:01:08
>>731
どこにPascalの影響があるの?
おれPascalやってたけど、Rubyにその影響をみたことないなあ
733デフォルトの名無しさん:2007/01/02(火) 21:04:23
endがあるからpascalみたい。ただそれだけの話
734デフォルトの名無しさん:2007/01/02(火) 21:27:51
なんでendにしたの?
735デフォルトの名無しさん:2007/01/02(火) 21:53:53
>>734
>>730 じゃね?

736デフォルトの名無しさん:2007/01/02(火) 22:05:16
>>730
マジスカ
737デフォルトの名無しさん:2007/01/02(火) 22:29:19
738デフォルトの名無しさん:2007/01/02(火) 22:30:48
739デフォルトの名無しさん:2007/01/02(火) 22:56:18
個人的には try catch よりも begin rescue の方が好き
740デフォルトの名無しさん:2007/01/03(水) 01:18:22
>725
Pascal の ; は俺にとってはCより解りやすい
C言語の if の

if(式) 文; else 文;

なんてかなり違和感だもん
何で一つの文にセミコロン2つあるんだよって感じ
741デフォルトの名無しさん:2007/01/03(水) 01:34:07
> if(式) 文; else 文;
文が二つ入っとりますが……
742デフォルトの名無しさん:2007/01/03(水) 02:37:04
ごめん説明不足だ、1つのif文ね。
743デフォルトの名無しさん:2007/01/03(水) 02:59:46
一行?
744デフォルトの名無しさん:2007/01/03(水) 04:24:43
いや、Pascal だから
if(式) 文 else 文 end;
までで一文だっていう意味かと。
ただ、結局 >>727 みたいなことになりがちなので
C で改善されてると言えると思うんだけどなぁ。
745デフォルトの名無しさん:2007/01/03(水) 09:24:12
Delphi厨だが、ifは
if 式 then 文;
if 式 then 文 else 文;
のどちらかで一文だね
elseの前にセミコロン入れると前者として扱われ
「else単独の構文はない」ため文法エラー

ブロックは begin 文; 文;... end

セミコロンは文末
ピリオドはコードの末尾

これに慣れると実際C言語のelseは気持ち悪いな



いい加減慣れたが。そもそもスレ違いだが。
746デフォルトの名無しさん:2007/01/03(水) 14:10:39
>>745
> セミコロンは文末
Pascalではセパレータだから文の間。

だからこそ
> ブロックは begin 文; 文;... end

endの前には入らないわけだ。
747デフォルトの名無しさん:2007/01/03(水) 19:56:28
すれ違いだけど、
Pascalのコード色々見てると
if ... begin
(単|複)文;
end else begin
(単|複)文;
end;
っていう書き方結構多いような気がする。
みんなコード書いてるうちに
;を付けたり付けなかったりするのが面倒になるんだと思う。

748デフォルトの名無しさん:2007/01/03(水) 20:20:46
>747
それはC言語でも同じでは
749デフォルトの名無しさん:2007/01/04(木) 01:17:32 BE:38783055-2BP(2)
質問させてください。
Perlでいう、Tie::File 相当のモジュールってRubyにありますでしょうか?

単に配列に変換する程度の機能でしたら、自分でちょろっと
書いた方が早いですが、flockやbufferingまでやってくれるものが
欲しいのです。

まぁSQLite使えという声もあるのですが…(汗
750デフォルトの名無しさん:2007/01/04(木) 04:55:50
>>749
Tie::Fileというのがどんなものかを説明したほうがいいと思う。
751デフォルトの名無しさん:2007/01/04(木) 06:53:03
752デフォルトの名無しさん:2007/01/04(木) 10:32:24
あんまりちゃんと読んでないけど、ファイル書式を気にしなければ PStore か YAML::Store でできそうな気がする。
http://www.ruby-lang.org/ja/man/?cmd=view;name=PStore
753デフォルトの名無しさん:2007/01/04(木) 18:26:11
たとえば、私だと、HSPやPHPに対する「悪意」を読み取られたことがある。
754デフォルトの名無しさん:2007/01/05(金) 01:49:27
>>753
本スレでやれ
755デフォルトの名無しさん:2007/01/05(金) 15:31:16
>>754
本スレでもやらんでいい
756デフォルトの名無しさん:2007/01/07(日) 11:02:52
数値かそうじゃないかを判別するメソッドがあったら教えてください
integer?のFloatでもtrueを返すような物を探しています
757デフォルトの名無しさん:2007/01/07(日) 11:07:45
ヒント
1.class.ancestors
1.0.class.ancestors
758デフォルトの名無しさん:2007/01/07(日) 14:44:03
>756
ヒント
・クラス間の親子関係
・Object#is_a? / Object#kind_of?
759デフォルトの名無しさん:2007/01/08(月) 02:11:33
RDoc::usage の出力先を標準エラー出力に変更するには
どのような指定をすればよいでしょうか?
760デフォルトの名無しさん:2007/01/08(月) 03:29:47
* 標準出力を標準エラー出力につけかえる
* RDoc::usageを再定義する

のどちらかだと思う
761デフォルトの名無しさん :2007/01/08(月) 04:02:09
Rubyというやつに挑戦しようと思い検索したところvs2005stdにそのままインストール出来る
ようなので、したのですがRubyProjectを立ち上げて、新しい項目としてtest.rbという名前にし
print 123
とだけ打って実行してみたのですが、まったく駄目です。
というか、c/c++を今まで勉強してきたのですが今回rubyの入門サイトをgoogleで検索して
一通りみたのですがさっぱりわからず、mainに当たる部分はどこなんだ?
という、たぶんスクリプト言語?ってのをやってる人にとっては「何いってんだ?」という
質問かもしれませんが、できたら何をどうして、どのページを参考にしたら良いのか
教えていただきたいです。
お願いします。
762デフォルトの名無しさん:2007/01/08(月) 04:37:32
ttp://www.google.com/search?num=50&lr=lang_ja&ie=utf8&q=vs2005std
おー結構あるな

それはいいとして、お前はこれまで一体何をやってきたんだ
何も身についてないじゃないか
763デフォルトの名無しさん:2007/01/08(月) 04:47:52
>>761
何がどうダメなのかちゃんと書いたほうがいいんじゃないか。
一体どういう状況なのか全く読めないぞ。それと、そのスクリプト自体は間違ってない。
764デフォルトの名無しさん:2007/01/08(月) 04:49:59
Visual Studio 2005スレ Part18
http://pc10.2ch.net/test/read.cgi/tech/1167788121/72

72 名前:デフォルトの名無しさん[sage] 投稿日:2007/01/08(月) 04:02:57
Rubyというやつに挑戦しようと思い検索したところvs2005stdにそのままインストール出来る
ようなので、したのですがRubyProjectを立ち上げて、新しい項目としてtest.rbという名前にし
print 123
とだけ打って実行してみたのですが、まったく駄目です。
というか、c/c++を今まで勉強してきたのですが今回rubyの入門サイトをgoogleで検索して
一通りみたのですがさっぱりわからず、mainに当たる部分はどこなんだ?
という、たぶんスクリプト言語?ってのをやってる人にとっては「何いってんだ?」という
質問かもしれませんが、できたら何をどうして、どのページを参考にしたら良いのか
教えていただきたいです。
お願いします。
765デフォルトの名無しさん:2007/01/08(月) 05:02:07
マルチはどうでもいいが、VisualStudio2005用のRubyプラグインがあるんすか?マジ?
766デフォルトの名無しさん:2007/01/08(月) 05:13:06
検索すればいいと思うよ。
767デフォルトの名無しさん:2007/01/08(月) 06:20:07
Ruby.NET
768デフォルトの名無しさん:2007/01/08(月) 08:24:34
>>761
Rubyというやつとvs2005stdというやつの間には何の関係もない。
769761:2007/01/08(月) 09:13:05
いや、でも
http://www.sapphiresteel.com/IMG/pdf/rubyinsteel_userguide.pdf
のページにvs2005std以上だと使えてインストールの仕方が書いてあるんですが
まぁ、興味本位で、Rubyに触ってみたく検索したら環境を統合できそうだったので
インストールの仕方見ながらやって、環境は統合され認識もされるけど
コンパイル実行の段階で、エラーに、/Cや-rといったリンカ関係か〜?と思うような
メッセージしかでず、結局、初心者の自分には、何が足りないのかが分からずで
実行できないままで、もうめんどくさいので全部いったん消して、普通にRuby落として
PATH通して、なんかのフリーのエディタ使ってやってみます。
ずっとC/C++ばっかやっててJAVAはやったけど重いし好きじゃないし
C#はインテリセンスがうっとおしいしってな具合でそれら以外の言語をちょっと
さわりたくなったわけで・・・
まぁ、その、あれだ
マルチしてすんませんでした。
770デフォルトの名無しさん:2007/01/08(月) 10:18:01
>>761
Rubyはインタプリタ言語です コンパイルは不要です
Rubyに限らず、動的な言語にはコンパイラーはありません
ネットでインタプリタ言語を少し調べてみてください
771デフォルトの名無しさん:2007/01/08(月) 10:48:25
ソース解析して構文木つくるのも、コンパイルと言えばコンパイルだけれども…
772デフォルトの名無しさん:2007/01/08(月) 10:58:02
>>761が言ってるのは、Railsの開発環境だな
773デフォルトの名無しさん:2007/01/08(月) 11:30:04
>>769
> C#はインテリセンスがうっとおしいしってな具合でそれら以外の言語をちょっと

いやそれ言語の機能じゃないしw
774デフォルトの名無しさん:2007/01/08(月) 11:40:33
>ずっとC/C++ばっかやっててJAVAはやったけど重いし好きじゃないし
>C#はインテリセンスがうっとおしいしってな具合でそれら以外の言語をちょっと
>さわりたくなったわけで・・・

あほが
775デフォルトの名無しさん:2007/01/08(月) 13:50:53
Javaが遅いと嘆く奴 ≒ Swing使用者 + JavaのI/Oはデフォでバッファリングしないのを知らない奴
776デフォルトの名無しさん:2007/01/08(月) 14:00:59
さすがRuby使いはキチガイだ
777デフォルトの名無しさん:2007/01/08(月) 15:11:22
>>769
なぜ、/C や -r がリンカ関係なんて発想が出てくるんだ?
778デフォルトの名無しさん:2007/01/08(月) 16:19:01
Matzしつけー
779デフォルトの名無しさん:2007/01/08(月) 16:56:45
Python最高!(by秋山)
780デフォルトの名無しさん:2007/01/09(火) 14:27:07
殺伐としてきたな
781デフォルトの名無しさん:2007/01/09(火) 16:04:07
教祖様からして「PHPは言語として(ry」とか言ってる厨なんだから、しかたないでしょう。
782デフォルトの名無しさん:2007/01/09(火) 17:37:55
おおっぴらに、人気のあるものを批判すると変な目で見られるのはしかたないな。
言ってることは別に間違っちゃいないと思うけど。

実際まともな反論もないし、批判の内容は誹謗中傷と大して変わらないw
無駄なのにね。
783デフォルトの名無しさん:2007/01/09(火) 18:52:35
Rubyは言語として(ry
784デフォルトの名無しさん:2007/01/09(火) 19:03:26
Matzしつけー
785デフォルトの名無しさん:2007/01/10(水) 06:25:15
786デフォルトの名無しさん:2007/01/10(水) 06:26:06
>>781
なんで、phpをあーだ言っただけで、厨なんだ?
厨じゃない俺から言わせれば、phpは言語として(ry
だが・・・
787デフォルトの名無しさん:2007/01/10(水) 06:44:13
黙ってRubyを崇めろ。
他の言語がクズであることを理解するまで。
788デフォルトの名無しさん:2007/01/10(水) 07:00:36
とりあえず初學者スレよりは本スレ向きの話題だな
変な流れを断つ為にも質問は受付中
789デフォルトの名無しさん:2007/01/10(水) 09:56:45
質問してきた人を馬鹿にするのがRuby使い
790デフォルトの名無しさん:2007/01/10(水) 10:35:45
>>789
おまえが馬鹿にして、そしてそういう台詞を言ってるんだろう。
791デフォルトの名無しさん:2007/01/10(水) 10:38:35
では質問を。

Linuxで、書いたスクリプトに#!行を付けて、PATH通してコマンドみたいに使いたいんですが、なにかrequireしてると実行されません。
直接コマンドラインからrubyに読ませると、スクリプトは問題なく動きます。
requireがあるスクリプトを#!行で実行する手だてはありますでしょうか。
792デフォルトの名無しさん:2007/01/10(水) 10:39:56
>>791
ソースを晒すよろし
793デフォルトの名無しさん:2007/01/10(水) 11:24:48
なんか勘違いしてそうだね
794デフォルトの名無しさん:2007/01/10(水) 12:06:38
795デフォルトの名無しさん:2007/01/10(水) 12:15:50
実行されてる ruby のバージョンが違うんじゃないの?
796デフォルトの名無しさん:2007/01/10(水) 13:10:40
とりあえずスレ違いなので初心者スレにでも池
797デフォルトの名無しさん:2007/01/10(水) 13:12:53
ここ初心者スレちゃうんかと
798デフォルトの名無しさん:2007/01/10(水) 13:25:20
>>792

#!/usr/bin/ruby

require 'kconv'
STDOUT.print STDIN.read.toeuc

この程度のものなんですが、PATH通してrehashしても
コマンドが見付かりません、と言われます。
(Vine Linux3.2 + tcsh + Ruby1.8.2[i386-Linux])
799デフォルトの名無しさん:2007/01/10(水) 13:50:10
エラーは全文書け
略すな
訳すな
800デフォルトの名無しさん:2007/01/10(水) 14:04:58
>798
Rubyあるいは使っている人間のどちらかに重大なバグがある。
どちらにしろ使うの止めたほうがいい。
801デフォルトの名無しさん:2007/01/10(水) 14:29:55
まさか r-x にしてないとか
./hogehoge じゃなくて hogehoge で実行とか
802デフォルトの名無しさん:2007/01/10(水) 15:15:50
改行コードが cr lf になっているということもある。
803デフォルトの名無しさん:2007/01/10(水) 15:48:02
>>799
コマンドが見付かりません、で全文です。
(Rubyにではなくシェルが付けて来た文句)
紛らわしくてすみません。

で、結局>>802さんの指摘の通りだったようです。
結果スレ違いな質問ですみませんでした。
804デフォルトの名無しさん:2007/01/10(水) 19:16:33
PHPですらlfで動くのにRubyは(ry
805デフォルトの名無しさん:2007/01/10(水) 19:22:26
#! の行を解釈するのはカーネルです。
そのため /usr/bin/ruby\r を実行しようとしますが、
そのコマンドは存在しないのでエラーになります。
ruby かどうかには関係ありません。
806デフォルトの名無しさん:2007/01/10(水) 19:24:28
Rubyはカルトなので、いかなる批判も許しません!
807デフォルトの名無しさん:2007/01/10(水) 19:26:41
男らしくてステキ!
808デフォルトの名無しさん:2007/01/10(水) 20:54:14
Rubyの世界ではカーネルが#!の行を解釈するのか。
シェルじゃないのか。
すごいな。
809デフォルトの名無しさん:2007/01/10(水) 21:37:59
>>804
馬鹿だなお前
810デフォルトの名無しさん:2007/01/10(水) 21:42:18
>808
shebangの解釈はexecve(2)が行う。
これまでシェルが頑張ってるとでも思っていたのか。
811デフォルトの名無しさん:2007/01/10(水) 21:47:30
いくら荒そうとしてもニワカ君じゃあ間抜けでだめだねw
812デフォルトの名無しさん:2007/01/10(水) 21:51:03
素直に飛行機から投げ捨てられたコーラ瓶で肉叩いてろ
813デフォルトの名無しさん:2007/01/10(水) 22:35:48
812
歳が判るような判りにくいネタを・・・ww
814デフォルトの名無しさん:2007/01/10(水) 23:48:59
>>808

#!/bin/sh
↑こういう行で何か思うところはないかね
815デフォルトの名無しさん:2007/01/10(水) 23:59:05
>814
808じゃないが、>810を知る前は
単純にシェルがshを起動してるんだと思ってましたorz ハイアホデス
816デフォルトの名無しさん:2007/01/11(木) 00:05:02
実行はカーネルからだけど
どうみても#!の行はshellが解釈してるだろ
本当にありが(r
817デフォルトの名無しさん:2007/01/11(木) 00:07:05
818デフォルトの名無しさん:2007/01/11(木) 00:27:23
コマンド叩いたときに、シェルがやってるのは大筋で、

1. 入力を、変数展開とかクォート処理ののちトークンに分割。
2. 環境変数PATHの要素のディレクトリそれぞれについて
一覧を見て、第1トークンに一致する実行ビットの立っているなものを探す。
3. 見つかったらそいつに残りトークンを添えてexec(2)系システムコールを発行してwait。
見つからなければCommand not found.

あとはカーネルの仕事。
819デフォルトの名無しさん:2007/01/11(木) 03:01:26
>>808=816 が間抜けすぎて泣ける。
820デフォルトの名無しさん:2007/01/11(木) 03:16:51
>>818
パイプとか
リダイレクトとか
ヒストリーとか
他には?
821デフォルトの名無しさん:2007/01/11(木) 03:29:21
>>819
一所懸命皮肉を言おうとして、全部失敗してるもんな。
822デフォルトの名無しさん:2007/01/11(木) 07:07:44
でもシェルの存在を知ってたのは偉いぞ。大したものだ。
823デフォルトの名無しさん:2007/01/11(木) 08:38:41
>820
そりゃほかにも、変数の展開とか、ifなどの制御とかはあるだろうよ。
824デフォルトの名無しさん:2007/01/11(木) 09:28:23
大筋って書いてあるだろ。
825デフォルトの名無しさん:2007/01/11(木) 10:58:44
>>808のシステムでは、今でもtexec(3)ががんばってるんだよ。
ほっといてやれ。
826デフォルトの名無しさん:2007/01/11(木) 19:56:13
WIN32OLE を使用して、
ブラウザー操作をしています。
JapaScriptポップアップが出現したら消すよう制御したいのですが
可能でしょうか?

できればWIN32OLEでの実現法を知りたいです。
宜しくお願いします。

827デフォルトの名無しさん:2007/01/11(木) 21:23:54
そもそもjavascriptを無効にしておくという選択肢はない?

まじめに考えると、
自分でそういうポップアップ「だけ」出るページを作って実験するのがいいと思う。
irbからでも操作できるので実験するのがいいよ。
828デフォルトの名無しさん:2007/01/11(木) 21:30:26
すげえ的はずれ
829デフォルトの名無しさん:2007/01/11(木) 22:30:47
「プログラムの追加と削除」

「コンポーネントの追加と削除」

「スクリプトデバッガ」をアンインストール
830826:2007/01/12(金) 13:52:49
上記の質問引き続き宜しくお願いします。
ブログを巡回して自作ブログ検索エンジンを作成しているのですが、
やはり net/httpだとJavaScript周りの値が拾えなくて困っています。
831デフォルトの名無しさん:2007/01/12(金) 13:58:49

ここで聞いてみたら?
http://pc10.2ch.net/test/read.cgi/tech/1166172047/

あと2chもうすぐとまっちゃうみたいなのでお早めに
832デフォルトの名無しさん:2007/01/12(金) 20:16:21
質問なんですが、Windowsで、メッセージボックスを簡単に出す事はできないでしょうか・・・

>>831
2ch止まるの?
833デフォルトの名無しさん:2007/01/12(金) 20:18:37
できますよ
834デフォルトの名無しさん:2007/01/12(金) 20:40:41
>>833
氏ね
835832:2007/01/12(金) 20:45:19
行けました!
WSH使うんですね!

require 'win32ole'
WIN32OLE.new('WScript.Shell').Popup("hoge", 0, "error")
836832:2007/01/12(金) 21:05:59
続きです。

unixなど、win32oleが上手く行かない環境の場合に、フラグ立てて、
違う処理をしたい(例えば、標準出力にメッセージを出す)のですが

begin
require 'hoge'
rescue
end

とかでも普通にエラーが出てしまいます。
コンパイル時にエラー出しているんですかね
なんとかする方法はないでしょうか?
837デフォルトの名無しさん:2007/01/12(金) 21:07:34
>>836
eval をうまく使ってみるとか。
838デフォルトの名無しさん:2007/01/12(金) 21:10:42
rescue LoadError
839デフォルトの名無しさん:2007/01/12(金) 21:12:58
irbで実験
840デフォルトの名無しさん:2007/01/12(金) 21:13:02
無指定rescueで捕まえられるのはStandardErrorとそのサブクラス。
841832:2007/01/12(金) 21:39:07
>>838
それだ(゚∀゚)

is_win32 = begin
  require 'win32ol'
  true
rescue LoadError
  false
end
842デフォルトの名無しさん:2007/01/12(金) 23:57:56
wineがあるとロードできてしまう罠。
843デフォルトの名無しさん:2007/01/13(土) 00:04:24
PLATFORMみるのじゃダメなのん?
844デフォルトの名無しさん:2007/01/13(土) 00:54:29
win32oleが動く環境かどうかを見たいだけなんだから、これはこれでいいんじゃね?
845デフォルトの名無しさん:2007/01/13(土) 10:01:15
スクリプトの途中で irb を起動することってできないでしょうか?

たとえば
846デフォルトの名無しさん:2007/01/13(土) 10:05:08
すいません。途中で書き込んでしまいました。
たとえば、以下のようにしたいと思ってます。

class Foo
end

foo = Foo.new
# ここまで実行して、そのコンテキスト(?) で irb を起動したい。
# require "irb"
# IRB.start
# ↑だと Foo クラスは見えるのですが、foo が見えません。
847デフォルトの名無しさん:2007/01/13(土) 10:56:23
>>846
irbの呼び出しはそのとおりでいいけど、fooが見えない、というのは
スコープの問題と言っていいのだろう。
あるファイル中のトップレベルで定義したローカル変数は、同じ
ファイルの関数や、他のファイルから参照できない。
たとえ同じファイルでも、異なるメソッドからはローカル変数って
引数として渡さない限り参照できないだろ?
グローバル変数か、定数にするしかないな。
848デフォルトの名無しさん:2007/01/13(土) 11:04:58
bindingをどーにかして渡せないもんかな。
849デフォルトの名無しさん:2007/01/13(土) 12:32:53
vrubyについての質問です。

Edit1 と Edit2 があったとします。

Edit1にフォーカスが当たった状態でタブキーを押すと
Edit2にフォーカスが移動するようにしたいのですがどのようにすればよいのでしょうか?
850デフォルトの名無しさん:2007/01/14(日) 03:12:43
条件式としての範囲式の用法を勉強しているのですが、
 i=0
 while i<4
  print i if (1<=i)..(2<i)
  i += 1
 end
を実行すると、12が表示されるのではなく、123が表示されてしまいます。
期待する12という表示はなぜ得られないのでしょうか?
851デフォルトの名無しさん:2007/01/14(日) 06:31:47
Rubyにおいて条件式、
 if x
などで偽と判定されるのは、
・xがfalseだったとき
・xがnilだったとき
の場合のみだ。Rangeオブジェクトはそのどちらでもないので、真になる。
852デフォルトの名無しさん:2007/01/14(日) 07:40:29
ifの中でnilは偽にならないときがあるような・・・
853デフォルトの名無しさん:2007/01/14(日) 07:50:33
>>852
例を挙げよ。
854デフォルトの名無しさん:2007/01/14(日) 07:57:30
855デフォルトの名無しさん:2007/01/14(日) 08:06:38
>>852
それは単にnilになってないだけでは
空(empty)であることとnilであることは違う

irb> unless nil then puts 'NIL' else puts 'NON-NIL'end
NIL
irb> unless '' then puts 'NIL' else puts 'NON-NIL'end
NON-NIL
irb> unless ''[0] then puts 'NIL' else puts 'NON-NIL'end
NIL
irb> arr=Array.new
irb> unless arr then puts 'NIL' else puts 'NON-NIL'end
NON-NIL
irb> unless arr[0] then puts 'NIL' else puts 'NON-NIL'end
NIL
irb> hash=Hash.new
irb> unless hash then puts 'NIL' else puts 'NON-NIL'end
NON-NIL
irb> unless hash['hoge'] then puts 'NIL' else puts 'NON-NIL'end
NIL
856デフォルトの名無しさん:2007/01/14(日) 08:34:21
>851
これはRangeオブジェクトじゃなくて条件文の範囲式。
http://www.ruby-lang.org/ja/man/?cmd=view;name=%B1%E9%BB%BB%BB%D2%BC%B0#a.c8.cf.b0.cf.bc.b0

ここでわかるように式2が真になるまでが条件だから、
i=0 1<=iでないので偽
i=1 1<=iが成立し、同時にi<2となり、結果自体は真
i=2 上で一周しているから1<=iを調べるとこれが真で、i<2が成立しないので結果は真
i=3 i<2が成立しないので真

となる。

範囲式のふつうの使い方は、
i = 0
while i < 4
print i if (i==1)..(i==2)
i += 1
end
とかかな。

でもまあ、ふつうはこういう書き方はしない方がいいです。
おれ、このスレの回答以外でこの書き方したことないよ。
857デフォルトの名無しさん:2007/01/14(日) 10:57:23
こんな文法があったのか。全然知らなかった。
858デフォルトの名無しさん:2007/01/14(日) 13:40:57
ifって結構意外な仕様持ってるよね
if /re/ とか書けるっけ?
859デフォルトの名無しさん:2007/01/14(日) 13:55:51
今ためしてみたけど書けないっぽい
(それ書いてもどうなるものでもなさそうだけど)
860デフォルトの名無しさん:2007/01/14(日) 13:59:17
ifだけ微妙に式解釈が異なるってちょっとキモいな・・・。BASICじゃあるまいし。
861デフォルトの名無しさん:2007/01/14(日) 14:08:03
$_がセットされてれば if /re/ は機能する
862デフォルトの名無しさん:2007/01/14(日) 14:21:33
>>856
これって、if 自身が状態を持っているようですね。ローカル変数のような。
そのため、以下のソースを実行すると、x=3,y=5と表示されることがあります。

x = 1
while x <= 4
y = 5
while y <= 9
b = y == 6
e = y == 8
printf "x=%d,y=%d\n", x, y if b..e
break if x==2 && y==6
y += 1
end
x += 1
end
863デフォルトの名無しさん:2007/01/14(日) 16:04:08
>850です。

>>856
式2は (i<2) ではなくて (2<i) です。

> ここでわかるように式2が真になるまでが条件だから、
式2が偽になった回でもその一回は結果として真になる、ということですよね。
そこで、 (2<i) の部分を (2<=i) にすれば意図どおりのタイミングで偽になるように
なるかと思って試しましたが、これも123と表示される結果となりました。

そこで856の「一周しているから」という文により気づいたのですが、式2が真となった
回の次回以降は、リファレンスにあるように偽になるのではなく、式1の評価に戻る、
ということですね。
そうなると、式2を(2<=i)と変更した場合に 3 が表示される理由も分かります。

ようやっと条件式としての範囲式の意味が理解できました。
856さん、他のみなさん、ありがとうごさいました。

>>862
その式の状態が、コード単位なのかメソッドの属するオブジェクト単位なのか
スレッド単位なのかメソッド呼び出し単位なのかよく分からんことから
範囲式について調べようと思った、というのがそもそもの動機なのですが、
 >856> でもまあ、ふつうはこういう書き方はしない方がいいです。
と言われているとおり、862をみると、「一周する」ということが確かな状況以外では
誰が読んでも意味不明なコードになるだろう、ということは分かりました。

もし純粋にif文単位で状態が保持されるのなら、例外で中断して再開した場合に
その式を評価した場合に状態が引き継がれたりするなどひどい泥沼になるように
思えるので、深入りせずここらで引き上げることにします。
864デフォルトの名無しさん:2007/01/14(日) 18:40:27
>>863
メソッド呼び出し単位。

状態を持っているのはifではなくて、flip-flop operatorで自動的に作られる
隠しローカル変数。
865デフォルトの名無しさん:2007/01/14(日) 20:19:46
>>864
864を見て試してみましたが、たしかにメソッド単位のローカル変数のようですね。
Proc.newやloopやtimesなどにブロックを渡してその中で範囲式を使ってみましたが、
ブロック内のローカル変数とは違って、状態は記憶されているようです。

ブロック付きopenをループやretryで複数回実行するときなどは注意が必要そうですね。
866デフォルトの名無しさん:2007/01/15(月) 11:47:08
flip-flip operatorって、awkやってた人くらいしか使わんのかな?
867デフォルトの名無しさん:2007/01/15(月) 13:08:37
>>866
awk/sed ではそれなりに使ったけど
perlやrubyでは使ったことない。
868デフォルトの名無しさん:2007/01/15(月) 16:45:53
Rubyのページが開かないのですが移転したのでしょうか?
http://www.ruby-lang.org/
869デフォルトの名無しさん:2007/01/15(月) 17:00:40
今なら開いたよ。
870デフォルトの名無しさん:2007/01/15(月) 17:08:38
あ、ほんとだ。
どもでした。
871デフォルトの名無しさん:2007/01/16(火) 02:59:10
unset var
みたいに、ローカル変数を取り消すことってできますか
872デフォルトの名無しさん:2007/01/16(火) 05:37:09
undef
873デフォルトの名無しさん:2007/01/16(火) 11:01:25
文字列の100から450文字を指定した文字に置き換えるにはどうすればいいのでしょうか?

str[100,350] = "g"
でやると、一文字しか置換されないのです。かといって"ggggg…"のように長くは間違いがでそうだし
何か簡単にする方法はありませんか?
874デフォルトの名無しさん:2007/01/16(火) 12:25:20
>"ggggg…"のように長くは間違いがでそうだし
Rubyでは同じ文字列のくり返しは乗算で実現できる。
"g"*350とか。
875デフォルトの名無しさん:2007/01/16(火) 12:26:40
"g" * 351 は?
876デフォルトの名無しさん:2007/01/16(火) 12:27:28
レス内容被った。スマソ
877デフォルトの名無しさん:2007/01/16(火) 12:58:22
>>871

nilを代入するのではダメでシンボルテーブルから変数名自体を消したいってこと?

>>872
undefはメソッドしか未定義にできないな。
これも厳密には未定義にするわけじゃなかったり。


878デフォルトの名無しさん:2007/01/16(火) 13:06:30
今度は、100から、350000000までを置き換えたいのですが
"g"*350000000とすると、メモリを300MBも消費しました。
なんとかする方法はないですか?
879デフォルトの名無しさん:2007/01/16(火) 13:22:11
ループでやれば?
880デフォルトの名無しさん:2007/01/16(火) 13:23:40
メモリを増築すればいいと思うよ。
881デフォルトの名無しさん:2007/01/16(火) 13:42:57
350000000.times {|i| str[i + 100] = 'g' }
882デフォルトの名無しさん:2007/01/16(火) 15:17:30
貧乏ならともかく300MBぐらいなら問題とは思えんが。
ループでやったって置換した結果の文字列のほうは結局大きくなるんだから変わらん気がす。
てっきり勉強目的で意味がないことをやってるんだと思ってたんだけど
なんか目的があるなら、それを言えばなんか考えてくれる人がいるかもよ。
特に意味はない話ならメモリを300MB使うことなどなんら問題じゃない。
883デフォルトの名無しさん:2007/01/16(火) 15:21:17
ネタじゃなかったのかwww・・・?
884デフォルトの名無しさん:2007/01/16(火) 15:45:25
g*35000000を代入する場合は、一時的に右辺のオブジェクトと代入後の
strの両方が存在するから1つずつ置き換えていくよりメモリは余計に必要。

だと思ったんだが、もしかしてRubyでは部分文字列は共有されてるのかい?
885デフォルトの名無しさん:2007/01/16(火) 17:31:36
つうか、本気だとして、こういうのは置換後の長大な文字列の使用用途にもよると思う
ファイルに保存するなら置換しながら…というか書き込みながら続ければいいわけだし
886デフォルトの名無しさん:2007/01/16(火) 18:00:15
str.fill("g",100..350)

>>885
それが一番の問題だと思う。初心者スレだからなおさらだな。
strに350MBもデータをコピーしてる時点でなんか間違ってる
可能性が大きいわけで、fillを使えば済む話じゃないかもしれん。
887デフォルトの名無しさん:2007/01/16(火) 19:32:58
質問したいのですが、ファイルの有無を判断するのにはどうしたらいいんでしょうか?
いろいろと調べてみたのですが、わからないのでどなたかわかる方がいらっしゃったらよろしくお願いします。
888デフォルトの名無しさん:2007/01/16(火) 19:33:50
FileTest
889デフォルトの名無しさん:2007/01/16(火) 20:44:30
>>887
フォルダをクリックして確かめる。
890デフォルトの名無しさん:2007/01/16(火) 21:23:56
>887
FileTest.exist?(filename)
filename が存在する時、真を返します。
891デフォルトの名無しさん:2007/01/17(水) 00:28:12
ITmedia エンタープライズ:まつもとゆきひろ――第3回:僕の存在価値はそこにある (1/4)
http://www.itmedia.co.jp/enterprise/articles/0701/15/news024.html

1回目と2回目のインタビューのリンクもあるので、Rubyファンはぜひ。
892878:2007/01/17(水) 00:28:46
>>878はネタです。す、すまんw
893デフォルトの名無しさん:2007/01/17(水) 00:58:12
インスタンスメソッドをクラス定義の外でする方法は何かありますか?
クラスメソッドなら

class ClassA
・・・
end

def ClassA::method_b
・・・
end

のような形で書けるみたいですがインスタンスメソッドの場合がどうも見当たらないんです。
894デフォルトの名無しさん:2007/01/17(水) 01:27:57
>>893

ClassA.class_eval{
 def foo
  ・・・
 end
}
895デフォルトの名無しさん:2007/01/17(水) 01:39:51
>>894
できました。ありがとうございます。
896デフォルトの名無しさん:2007/01/17(水) 02:01:02
>>891
>プログラミング言語はすべて愛おしい


   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
897デフォルトの名無しさん:2007/01/17(水) 02:21:12
>>886
> str.fill("g",100..350)
String#fillなんてあったっけ?
898デフォルトの名無しさん:2007/01/17(水) 02:35:38
>>897
fillはArrayだった。886は間違い。
899デフォルトの名無しさん:2007/01/17(水) 03:16:37
>>894
なんでこれが、クラスではなくインスタンスのメソッドになるのか
ちっとも理解できないのだけれど……。
分かりやすいサイトプリーズ
900デフォルトの名無しさん:2007/01/17(水) 03:20:07
>>899
リファレンスに書いてあるよ。
901デフォルトの名無しさん:2007/01/17(水) 03:23:46
>>899
わかりやすいサイトは思いつかないが、スコープの問題を除けば、

class ClassA
 # X
end

と、

ClassA.class_eval{
# Y
}

とでは、XとYは同じ環境になる。
単にそれだけ。
902デフォルトの名無しさん:2007/01/17(水) 03:34:38
すまん。インスタンスメソッドと、
特定のインスタンスだけに定義されたメソッドを混同していた。
さいきんruby使う暇なくて忘れてたorz
903デフォルトの名無しさん:2007/01/17(水) 07:00:53
>>877
>nilを代入するのではダメでシンボルテーブルから変数名自体を消したいってこと?

そうです。ERB用にこんなことをしたいんです。

# HashからBindingをつくる
def create_binding(_hash)
_defstr = _hash.inject('') { |_s, _e| _s << "#{_e[0]} = _hash[#{_e[0].inspect}];" }
eval _defstr
#undef _hash, _defstr # これができないものかと。
binding()
end

b = create_binding(:a=>10, :b=>'foo', :c=>%w[x y z])
904デフォルトの名無しさん:2007/01/17(水) 09:39:30
>>896
たしか Matz は I hate C++. と逝っていたと思うんだけど、
それでもいとおしいと思ってるんだね。
905デフォルトの名無しさん:2007/01/17(水) 09:41:29
嫌よ嫌よも好きのうち?
906デフォルトの名無しさん:2007/01/17(水) 10:01:30
>>903
むしろ一時変数なんか気にすんなって言いたいが。
そもそもevalした時点で安全でなくなっているわけだし。

ハッシュ受け取ってローカル変数なりクラス変数なりに展開するERBの子クラスを作ればいいんじゃないのか。
907デフォルトの名無しさん:2007/01/17(水) 11:25:02

流れ見ないで書き込むんだけど、evalとかで変数表を表示したときに
一時変数も一緒に出て来てしまうのが気に入らないとか?

908デフォルトの名無しさん:2007/01/17(水) 11:56:36
>>903
とりあえず現在のところローカル変数を明示的に消すことはできない
のでやりかたを変えるしかない。
909デフォルトの名無しさん:2007/01/17(水) 12:16:34
>>904
最近は本気で2chのデマを信じ込む奴が結構居るから、
これくらいのアッサリ風味でこられると本気なのか釣りなのか判断つかない。
910デフォルトの名無しさん:2007/01/17(水) 12:36:21
いるよな、デマだということにして火消しに必死な奴
関係者か?
911デフォルトの名無しさん:2007/01/17(水) 12:40:19
本人乙
912デフォルトの名無しさん:2007/01/17(水) 13:15:36
RHGの20.2.2によると、ruby-talkでmatzがそう発言したということらしいが、軽く探しても見当たらなかった。
913デフォルトの名無しさん:2007/01/17(水) 13:25:56
いつも大事にお使いいただきありがとうございます。
煽りあいは本スレでお願いいたします。
914デフォルトの名無しさん:2007/01/17(水) 23:18:09
Dir.globってなに?。自分でオープンすれば代替できるからいいんだけど。

irb(main):001:0> Dir.glob("c:/本/*")
=> []
irb(main):002:0> Dir.open("c:/本") do |dir|
irb(main):003:1* dir.each do |f|
irb(main):004:2* p f
irb(main):005:2> end
irb(main):006:1> end
"."
".."
=> #<Dir:0x3a1e55c>

Windows2000/VISTAの話で入れたのはActiveScriptRuby
"本稼動"だの"本番"だのが共有ディレクトリ内にあるんだな
915デフォルトの名無しさん:2007/01/17(水) 23:45:29
globはワイルドカードを展開するという意味の動詞。
916デフォルトの名無しさん:2007/01/18(木) 01:42:06
>>903
空のBindingを作ってから他のローカル変数を追加すればいい。

def empty_binding
  binding
end

def create_binding(h)
  b = empty_binding
  h = h.inject({}) {|hx, (var, val)| hx[var.to_s] = val; hx}
  arg = "__a"
  arg.succ! while h.key?(arg)
  eval((h.keys << "nil").join(" = "), b)
  h.each {|var, val| eval("proc {|__a|#{var}=__a}", b).call(val)}
  b
end

# テスト
b = create_binding(:a=>10, :b=>'foo', :c=>%w[x y z])
p eval("a", b)
p eval("b", b)
p eval("c", b)
p eval("h rescue $!", b)
p eval("__a rescue $!", b)

917デフォルトの名無しさん:2007/01/18(木) 19:10:20
完全マッチさせる方法を教えてください。

if /1/ =~ input
これだと、inputが11や111でもマッチしてしまいます。
input = 1の時だけマッチさせるにはどうすればよいでしょうか?
918デフォルトの名無しさん:2007/01/18(木) 19:16:31
/\A1\z/
919デフォルトの名無しさん:2007/01/18(木) 19:17:29
input == "1"
920917:2007/01/18(木) 19:26:27
>>918
やってみたところ、1もマッチしなくなりました;

>>919
inputは入力されたものです。説明不足ですいません。
921デフォルトの名無しさん:2007/01/18(木) 19:34:54
/^1$/
922デフォルトの名無しさん:2007/01/18(木) 19:43:25
if input.chomp == "1"
923917:2007/01/18(木) 19:43:32
>>921
>>918と同じく、1もマッチしなくなりました;
924917:2007/01/18(木) 19:45:59
>>922
その方法でうまくいきました。
有り難うございました。
925デフォルトの名無しさん:2007/01/18(木) 21:19:40
いいのかそれで・・・
926デフォルトの名無しさん:2007/01/18(木) 21:48:40
単に改行を取り忘れたいただけ?
927デフォルトの名無しさん:2007/01/18(木) 22:05:48
だね。

/¥A1¥z/ =~ input.chomp
でもマッチするだろう。
928デフォルトの名無しさん:2007/01/18(木) 23:49:47
>>914
"本" のシフトJISコードの2バイト目が "{" なので
こいつをワイルドカード文字と誤認識して異常動作している
私も以前にこれに引っかかりました
Dir.open('ほげほげ').to_a
とかに変えた記憶があります
・ディレクトリエントリのみの配列になる
・ドットファイルも含まれる
・ディレクトリの再帰検索は出来ない
・パスデリミタとしてバックスラッシュも使える
という違いがありますが、大抵はこれで事足りるような気がします
シフトJISの呪いはいつまで続くのでしょうか
929デフォルトの名無しさん:2007/01/19(金) 00:04:28
>>928
-Ks で解決する問題とは違う?
930デフォルトの名無しさん:2007/01/19(金) 02:59:37
>>929
違う。純粋にglobingのルーチンの問題。

実は1.9で使われているglobingルーチンでは解決しているが、
なんのかんので1.8にバックポートされていない。
1.8.6で入れてくれ。ってリクエストしてもダメかねえ。

931デフォルトの名無しさん:2007/01/19(金) 12:02:48
最近テキスト処理なんかの事務作業のためRubyの勉強始めたんですが
リファレンスはHowToな対応できても基礎がわかってなくて不安です
で、高かったり厚くても問題ないので、1冊だけ読むならこれ、っていうお勧めの書籍ってなんでしょうか?

一応amazonとかみると「プログラミングRuby―達人プログラマーガイド」
が評判良さそうなのですが、>>281>>286でもあがってないし少し古いのでどうなんでしょか?
(ちなみに他言語はそこそこ触ってます
932デフォルトの名無しさん:2007/01/19(金) 12:21:54
他の言語使った経験あるなら
webの情報でなんとかなりますよ
933デフォルトの名無しさん:2007/01/19(金) 12:23:22
あ、あえて薦めるとしたら、
Rubyソースコード完全解説
RubyHackingGuide
934931:2007/01/19(金) 12:46:59
サンクス

>webの情報でなんとか
割とそうですがそういうもんでしょうか

Rubyソースコード完全解説は趣旨と違うけど面白そう
935デフォルトの名無しさん:2007/01/19(金) 12:52:19
>>934
私はwebの情報を見ながらだけど
あなたと同じように
これで大丈夫なんかいな?
基礎分かって無いで使ってるけど?
みたいな心配がありました

ちょっと趣きを変えて
Rubyソースコード完全解説
を読んでみたら
読んだあとはすらすら使えるようになってました
936デフォルトの名無しさん:2007/01/19(金) 13:30:49
>>930
> 1.8.6で入れてくれ。ってリクエストしてもダメかねえ。

ちと、そのへんの強化策を考えないといかんかねぇ。
有用そうだけど1.9からバックポートされてないのというと、こんなところか。
* multibyte path globing
* large file support
* override by forwarding
937デフォルトの名無しさん:2007/01/19(金) 13:41:57
>>934
自分はJavaからやった。
Javaは書籍が豊富だから。

回り道のように思えるけど、自分はこっちの方が効率がいいと思っている。
938デフォルトの名無しさん:2007/01/19(金) 13:57:17
>>936
override by forwarding って何?
939デフォルトの名無しさん:2007/01/19(金) 17:51:41
学校の宿題で配列でHeapを実装しろとかでてきました(>_<)誰か教えてください。
940デフォルトの名無しさん:2007/01/19(金) 17:53:07
うむ、とりあえず、配列でヒープを実装するんだ。
941デフォルトの名無しさん:2007/01/19(金) 17:56:02
$stderr.print "\a" while 1

コレでいいだろ?
942デフォルトの名無しさん:2007/01/19(金) 18:27:11
>>939
東大生乙
943939:2007/01/19(金) 19:37:21
いじわるしないで誰か教えてください(>_<)時間ないんです。ちなみに東大生じゃありません。
あとできればヒープソートの作り方も教えてください。
944デフォルトの名無しさん:2007/01/19(金) 19:43:16
二分ヒープなら、nの位置の親の子は
1始まり→2nと2n+1
0始まり→2n+1と2n+2
に入れればいい。
945939:2007/01/19(金) 19:50:07
解答ありがとうございます。でもちょっとよくわかりませんね(;^_^A
自分でもうちょい考えたら改めて質問に来ます。
946デフォルトの名無しさん:2007/01/19(金) 20:28:02
そういうのは以降こっちで
http://pc10.2ch.net/test/read.cgi/tech/1106572657/
947デフォルトの名無しさん:2007/01/19(金) 20:28:36
宿題スレいけよ
948939:2007/01/19(金) 23:10:16
>>946
おお!
こんなスレあったんですね!
949デフォルトの名無しさん:2007/01/20(土) 00:22:05
>>941
それはビープ。
950デフォルトの名無しさん:2007/01/20(土) 00:31:43
>>938
read()とかwrite()とかを#defineで置き換えてるのを、DLLのforwardingで置
き換えるようにするというのを勝手に「override by forwarding」と書いた。

ChangeLogにはaliasと書いてあったので、
「symbol alias by forwading」ということにしよう。

svnでいうとrevision 9502。
951デフォルトの名無しさん:2007/01/20(土) 00:39:08
つーか>>914は単にディレクトリが空だから
Dir.globが空Array返したってだけじゃないのか?
"*"はdot fileにはマッチしないんだから。
952デフォルトの名無しさん:2007/01/20(土) 04:19:11
>>936

coding pragma を追加したいところだけど、あれは1.8には持ってこれない
という話だから、それくらいかな?

ところで署名でも集めるの?w >強化策



953デフォルトの名無しさん:2007/01/20(土) 08:14:15
>>949
お前だけだ。分かってくれたのは・・・。
もう少して危ない人になるところだった。
954デフォルトの名無しさん:2007/01/20(土) 11:44:14
exerbについての質問です。
レシピファイル作成をスクリプトの実行と同時に自動で行う機能があるとのことですが、
ずっとループし続けるスクリプトの場合には、自動生成できないのでしょうか?


もしあれば教えてください。
955デフォルトの名無しさん:2007/01/20(土) 13:04:05
ループ一回したら終了するの作ってレシピ作ればいいじゃない
956デフォルトの名無しさん:2007/01/20(土) 14:05:33
なるほど!
実際、requireするのを探すだけですもんね。

ありがとうございました。
957デフォルトの名無しさん:2007/01/20(土) 15:08:27
下のようなスクリプトが終了したとき
test という文字列のあと端末の高さぶんの空行が開いた後に
プロンプトが表示されます。
この空間ができないようにするにはどうしたらいいんでしょうか?
Curses::stdscr.setpos(Curses::stdscr.cury - 1, 0)
をはさんでみるなどしてみましたがダメでした。
端末は Cygwin/ck/screen/zsh です。

require "curses"
begin
Curses::init_screen
Curses::stdscr.addstr("test\n")
Curses::stdscr.refresh()
rescue
Curses::close_screen
end
958デフォルトの名無しさん:2007/01/20(土) 21:10:40
>>951 そのとおりだが、globが駄目なのはファイルを作って試してみれば明らか
>>928 が説明してくれている通りで、例えば'も'を含んだパスとか駄目
959デフォルトの名無しさん:2007/01/21(日) 14:47:28
HTML(string)をDOM的に解釈して扱うライブラリあるかな
と思って探したんですが見つけられませんでした
そういったライブラリってありますか? 
960デフォルトの名無しさん:2007/01/21(日) 15:14:16
>>959
DOM使え。
961デフォルトの名無しさん:2007/01/21(日) 15:35:22
たぶんない。
どうしても DOM を使わなければいけない理由がなければ、
DOM を使わないほうが楽なので。
962デフォルトの名無しさん:2007/01/21(日) 15:38:50
>>957
$TERMはなんになってる?
screen抜いてみたもダメ?
963デフォルトの名無しさん:2007/01/21(日) 15:51:23
>>960-961
ありがとうございます
jsを扱ってきたのでDOM処理ができれば今後も楽だなぁと思ったんですが。

単純な文字列処理でも強力なので素直にそっち使っていきます
964デフォルトの名無しさん:2007/01/21(日) 16:23:01
処理対象のHTML/CSSがある程度きれいに記述されているなら
http://wota.jp/ac/?date=20070115#p01
とか参考になるかと。
965デフォルトの名無しさん:2007/01/21(日) 17:20:49
>>964
面白そうなモノをありがとう 
しかしなぜか(←思考停止)モジュール内部でエラー出してだめだったので
人並みにruby出来るようになるまで正規表現で対応します
966デフォルトの名無しさん:2007/01/22(月) 12:42:32
Rubyist Magazine - あなたの Ruby コードを添削します 【第 1 回】 pukipa.rb
http://jp.rubyist.net/magazine/?0010-CodeReview#l12

↑これを読んでいるのですが、
「リテラルへの式埋め込み」ってありますよね?
式の埋め込みは、コンパイル時にチェックがされないので、どうなのかなー?
実行してみないとわからない、と思うのですが、
みなさんは多用されてます?
ユニットテスト前提なんだろうか・・・。
967デフォルトの名無しさん:2007/01/22(月) 13:26:08
>>966
どっちみち手動でも自動でもテストはしなきゃ話にならんのだから使いたいときに使えばよい。
968デフォルトの名無しさん:2007/01/22(月) 14:25:49
>>966
少なくともSyntax Errorはコンパイル時にチェックしてるようなので
問題ないと思うんだが
969デフォルトの名無しさん:2007/01/22(月) 18:20:35
>>950
ああ、それのことか。
それに関しては1.8にバックポートされる可能性はないと思うよ。
970デフォルトの名無しさん:2007/01/22(月) 22:34:34
列挙型ってあります?
971デフォルトの名無しさん:2007/01/22(月) 22:55:39
>>966
1.8以降なら、たとえば "lit#{code}eral" は
"lit" << code.to_s << "eral" とおなじ形に解釈される。
普通のrubyコードでチェックされる点はチェックされるし、
チェックされない点はチェックされない。
972デフォルトの名無しさん:2007/01/22(月) 23:04:32
>>970
場合によるけどシンボルがそれに近い
973966:2007/01/22(月) 23:13:37
書いた後で、実行時にコンパイル含めいろいろするんだから
変なこと言ったかな?と思ったんですが、
どうやら、自分が言いたかったのは、ruby -c での構文チェックのことでした。
(後だしっぽくて申し訳ない)

・・・と思ったら、

hoge = 1234
puts "hoge = #{hoge_} でつ"

だろうが、

hoge = 1234
puts "hoge = " + hoge_ + "でつ"

だろうが、ruby -cは通るのか・・・orz
構文チェックってもしかして、ザルですか?(:D)rz
974デフォルトの名無しさん:2007/01/22(月) 23:46:05
>>973
だって構文としては正しいし。
self.hoge_を期待するというだけ。
975デフォルトの名無しさん:2007/01/22(月) 23:48:50
>>972
シンボルか。
サンクス。
976デフォルトの名無しさん:2007/01/23(火) 00:14:00
実行時エラーと構文エラーの区別が付いてないやつがいるな
977デフォルトの名無しさん:2007/01/23(火) 00:29:25
rubyの弱点ではあるな
978デフォルトの名無しさん:2007/01/23(火) 00:50:35
遅延バインディングをサポートしてる言語はみなそうでは
979デフォルトの名無しさん:2007/01/23(火) 02:47:12
Cでlintが通ったのにバグって動かないとか言ってる馬鹿とおなじ
980デフォルトの名無しさん:2007/01/23(火) 02:58:23
Rubyはカルトなので批判は許しません!
981デフォルトの名無しさん:2007/01/23(火) 03:01:51
Rubyの批判をした訳ではないだろうに
982デフォルトの名無しさん:2007/01/23(火) 05:56:45
中学生が夜中にアンチの真似したら
ちょっと滑っちゃったという図
983デフォルトの名無しさん:2007/01/23(火) 06:12:28
批判じゃないってことにするあたりが、ますますカルトっぽくて気持ち悪い
984デフォルトの名無しさん:2007/01/23(火) 07:10:43
批判ではないものを批判だということにするとカルトっぽくないかというと、
まったくそんなことはないわけで。
985デフォルトの名無しさん:2007/01/23(火) 13:24:02
宗教話は本スレで

質問受付中
986デフォルトの名無しさん:2007/01/23(火) 14:17:33
YARV になると、拡張ライブラリの書き方は変わるのでしょうか?
今まで作った拡張ライブラリは書き直しする必要がありますか?
987デフォルトの名無しさん:2007/01/23(火) 14:20:28
すみません、自己解決しました。
README.EXT{,.ja} の内容見たら変更は無いですね。
988デフォルトの名無しさん:2007/01/23(火) 14:31:18
書き直しの必要な拡張ライブラリも当然ある。
でも、ここでこんなことを聞くレベルなら、まず問題ないだろう。
989デフォルトの名無しさん:2007/01/23(火) 15:27:03
どうもです。

今までに書いた拡張ライブラリのうちいくつかを試してみましたが、
RSTRING(s)->ptr => RSTRING_PTR(s), RSTRING(s)->len => RSTRING_LEN(s) とか、
基本的なところから引っかかってしまいました。
コンパイルまで辿り着いても、実行してみたら core 吐くし・・・

どうやら README.EXT{,.ja} の内容も更新されていないようですね。

先は長そうです・・・ orz
990デフォルトの名無しさん:2007/01/23(火) 15:47:38
内部イテレータはイケてないという話を読んだのですが、
Rubyのイテーレータは内部、外部どっち?
ttp://enbug.tdiary.net/20070123.html#p01
991デフォルトの名無しさん:2007/01/23(火) 15:56:48
内部。
992デフォルトの名無しさん:2007/01/23(火) 16:00:18
>>989
README.EXT{,.ja}にはRSTRING_PTRとRSTRING_LENは書いてあるよ。
coreを吐くのは、それだけじゃ誰が悪いかよくわからんね。
993デフォルトの名無しさん:2007/01/23(火) 16:02:39
>>990
一概に外部イテレータがよくて内部イテレータがダメ、ということもなくて、
外部イテレータには確かに内部イテレータにできない操作もできるけど、
逆にその分扱いにくい(記述量が増える)という欠点もある。
両方使えるのが理想じゃないかね。

なお、Rubyで外部イテレータを使いたい場合は require "generator"
これ、組み込みにならないかねえ。
994デフォルトの名無しさん:2007/01/23(火) 16:17:31
>>992
ありゃありゃ、確かに書いてました。すみません。
core の方はまあ自力でなんとかしてみます。

ただ、ウチの環境 (FreeBSD 6.1) だと、拡張ライブラリ関係なく挙動が怪しいので、
拡張ライブラリの前に解決すべき問題が山のようにありそうです・・・
私のコンパイルの仕方がまずいだけなのかもしれませんが (汗)

^C で止めると core 吐いたり。

% ruby -esleep
^Czsh: bus error (core dumped) ruby -esleep
%
995990:2007/01/23(火) 16:27:51
>逆にその分扱いにくい(記述量が増える)という欠点もある。
これは(言語)実装者にとって扱いにくいという意味ですよね?
先のenbug diaryによるとPythonではコルーチンを使って平易に実装しているとあります。
このほかに何か内部イテレータのメリットってありますか?
996993:2007/01/23(火) 16:49:52
>>995
いや、993では処理系実装者にとって扱いにくいかどうかなんて考えてない。
その言語の利用者にとって、だよ。

外部イテレータを使うのも、外部イテレータを作るのも、内部イテレータの
それに対して記述量が必然的に多くなる。
Pythonのように外部イテレータを内部イテレータ的に利用するsyntax sugarを
用意すれば、使う方に関しては若干ましにはできるけどね。

というか、990で参照してる日記の先頭のリンクを辿れよ。
997デフォルトの名無しさん:2007/01/23(火) 17:04:50
>Pythonのように外部イテレータを内部イテレータ的に利用するsyntax sugarを
>用意すれば、使う方に関しては若干ましにはできるけどね。
若干ましというより Python のほうがはるかに使いやすくねえか?
998デフォルトの名無しさん:2007/01/23(火) 17:08:44
Rubyなぞ問題外(^^;
999デフォルトの名無しさん:2007/01/23(火) 17:10:50
>>997
そうか?
好みの問題もあるから、あんまり強くも言えないが、「はるかに使いやす」いとは思わないな。
せいぜい、これはこれで悪くない、くらい。
1000デフォルトの名無しさん:2007/01/23(火) 17:24:24
Matzが内部イテレータがいいと言ったら内部イテレータがいいんだ!
ほかに理由などない!

10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。