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


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

Ruby 初心者スレッド Part 17



1 名前:デフォルトの名無しさん [2008/01/16(水) 17:41:27 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは>>2-7あたりを見てください。Ruby on Railsの質問はWebProg板のRailsスレで。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・ぐぐる
 ・マニュアルで探す www.ruby-lang.org/ja/man/
 ・FAQを読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(なるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

152 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 20:13:18 ]
>>149
テキストエディタの正規表現を使って置換することはできるんですが、プログラミングに関してはパーです
>>150
ああ・・・でも変更を加えたいファイルはテキストベースなんです。
人間が簡単に読めるってのが売りのデータ形式なんで、データそのものを、62進数の文字列に変換 とかっていうのはいただけないです
>>151
わかりました

153 名前:デフォルトの名無しさん [2008/01/21(月) 21:05:30 ]
>>150
インデックスを使うっていうだけだよねこれ

154 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:25:14 ]
>>153
もう一度読み返してみたら”それらをファイル名の集合体として別途管理する”って書いてあることに気付きました

155 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:32:54 ]
FS(BTree系)+OSのディレクトリキャッシュで管理するか、
DBMSのテーブル(典型的にはBTree系)+DBMSのキャッシュで
管理するかの違いだけのような気がする

156 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:44:16 ]
>>150
スラドで袋だたきされてる奴だろw

157 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:46:22 ]
技術的には奇特人間大賞みたいなもんで別段問題ないっす
プレスリリースがアホっぽいので話題になってるだけ

158 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:52:33 ]
まぁでも、初心者に勧めるようなもんじゃないな。

159 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 22:18:02 ]
今ならPythonだな

160 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 22:21:27 ]
スラドの関連ストーリーがLyee関係になってて
可哀想だった・・・・そこまでひどくはないと思うし・・・・・



161 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 22:48:06 ]
Ruby検定がコンピュータベースで全国200個所で受験可能に − @IT
ttp://www.atmarkit.co.jp/news/200801/21/ruby.html

やったね!

162 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 22:50:03 ]
松江詣でをする理由が無くなったな

163 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 22:58:17 ]
Ruby検定なんてあったのか
そんなもん取ってなんの役に立つんだ?

164 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:02:39 ]
そりゃー、おめー、あれだー、現行の幾つか前のバージョンの仕様ならちゃんと理解してた、つーことをだな

165 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:12:17 ]
>>163
面接のときの話のネタになる、ということが言われております

166 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:26:29 ]
とりあえずここは初心者スレだ

167 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 11:25:47 ]
>>145
ruby-mode って組み込みクラスのメソッド補完とかできないの?
他のモードにはある C-c C-c での実行とか マニュアル表示とかも無理?

168 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 15:48:50 ]
すみません教えてください。
自分のIPアドレスを知るためのhttpクライアントを作ろうとしています。
普通のページは .get できるのですが、CGIの返してくるものを取れません。
以下のコードです(URLは架空)。

require 'net/http'
Net::HTTP.version_1_2
Net::HTTP.start('YourIP.com', 80) { |http|
response = http.get('/ip.cgi')
puts response.body
}

169 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 16:07:10 ]
>>168
require 'open-uri'
html = open('YourIP.com/ip.cgi').read
puts html

open-uriで逆に面倒になることが事前にわかってる場合以外はopen-uri使い続けれ
上記でhtmlが空になる、あるいはopenでエラーが出る場合はCGIが悪い

170 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 18:14:32 ]
>>156
URLキボンヌ



171 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 21:08:40 ]
# 最近rubyの質問がすくねえな
>>168
まず、以下の点について答えよ
・そのCGIはお前が書いたモノかどうか
・http.post での結果

172 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:12:18 ]
質問です。

Ruby 1.9以降で正規表現関係はどう変わりますか?
鬼車がどうこうというのは、あちこちで目にするのですが、
具体的な変更点が詳しく分かるサイトとかあれば教えてください。


173 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:50:45 ]
質問です
あるディレクトリにある全てのファイルの中身を見て処理を行いたい場合の定石などありますでしょうか?
自分は

Dir.entries("ディレクトリ名") do |file|
File.open("ディレクトリ名" + file)
なんだかの処理
end
end

とかやっているのですが、いまいちです

Dirでディレクトリ内部のファイル一覧を取得するとどうもStringにしてくれるみたいですが、Fileをうまいこと取得できたりしないのでしょうか?

ついでにCやJavaでインクリメントする場合
value++
とか書きますよね
Rubyだと++はないようですが、どうするのがいいのでしょうか?

よろしくお願いいたします

174 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:52:23 ]
value += 1 とするしかない

175 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:58:41 ]
>>173
Dir.glob("./hoge/*").each do |path|
File.open(path){|f|

}
end

おそらくこれが一番人気
他のDirもPathnameの各メソッドもビミョーに使い勝手が悪い

インクリメントは作者がやだって言ってるので>>174以外の方法はないよ

176 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 23:08:39 ]
>>174-175
さんくすです

助かりました
参考にさせてもらいます

value+=1はあったのですね
てっきり、+=も無いと思っていたのでvalue = value + 1と書いてましたw


177 名前:デフォルトの名無しさん [2008/01/23(水) 00:58:08 ]
>>170
>>150
スラッシュドット ジャパン | データをすべてファイル名扱いにして高速検索を実現?
slashdot.jp/developers/08/01/20/2052246.shtml

178 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 01:01:16 ]
>>177
関連エントリー。アルファブロガーの反応
404 Blog Not Found:ニセ情報科学? - ISSEI
blog.livedoor.jp/dankogai/archives/50988968.html

179 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 09:38:29 ]
>>169
うまくいきました。
ありがとうございます。

>>171
cgiは、とりあえず既存のものです。
読むのがうまくいったので、送る方のcgiも自作するつもり。

.startでSocketErrorになっていました。
http.post は行っていません。

180 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 09:59:37 ]
>>179
>.startでSocketErrorになっていました。
×Net::HTTP.start('YourIP.com', 80) { |http|
○Net::HTTP.start('YourIP.com', 80) { |http|



181 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 10:18:36 ]
そのアルファブロガー(笑)はどうでもいい

182 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 10:40:38 ]
>>180
御指摘感謝

183 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 16:15:20 ]
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/26519

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 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 17:03:57 ]
重複順列を全て生成してから不適なの弾くのがやっぱ素直なんじゃね?

187 名前:デフォルトの名無しさん [2008/01/23(水) 17:51:04 ]
>>177-178
そういえばファイルの保護ってファイル名に対してはかからないんだよね。
つまり、データをファイル名に使うことで・・壊れやすくなる。
ファイルサイズを0にするやつは、データを盗まれないようにする方法としては使えるね。
一旦デコードしないとコピーができないから。

企業のページでは
>次世代Web基盤技術
とか言ってるけど、なんでWebなんだろ。
データを取り扱うときに通常のファイル形式にしないといけないはずだが。

>独自のプログラムとデータ構造により、圧倒的なコストパフォーマンスを実現
・・・
ああ、コストパフォーマンスについてはそうかも。
DBMSを使うとそれにライセンス料を払う必要があるが、OS標準の機能なら追加料金がかからない。
・・・
フリーのDB使えばいいけど、遅いって話もなくもないし。


188 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 18:56:40 ]
スレ違いを理解できない低脳は去ね

189 名前:デフォルトの名無しさん [2008/01/23(水) 21:07:53 ]
おい
リファレンスマニュアル検索できなくなってるんだけど
www.ruby-lang.org/ja/man/html/index.html

190 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 21:18:24 ]
マニュアル本体をCGIやめて静的HTMLにしたって聞いたからその関係なんだろう



191 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 21:31:23 ]
Ruby、かっこわるい

192 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 21:32:38 ]
検索できないって終わってるなw
つかプログラミング言語の公式サイトが検索アプリもまともに作れないとか

193 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 21:34:22 ]
e?
オヒサルで検索してる奴なんてこの世に存在するの?

194 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 21:40:20 ]
ローカルで検索すればいいのにね。

195 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 21:40:58 ]
Namazuとか使えば簡単にインデックス作れそうだけどな。
俺が暇になったときにまだ検索できないようなら作ってみよ

196 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 21:45:15 ]
トップページには検索機能があるが、Radiantで管理してる部分だけの
対応みたいだな。
リファレンスはやっつけで静的HTML化したからカバーしてない(つーか
忘れてるだろ、おそらく)んだろうな。


197 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 22:35:23 ]
VisualuRubyって今だに開発続いてるの?
RADっぽいお手軽開発環境探してるんだけどやっぱしないかなぁ?

198 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 23:11:49 ]
Ruby使いって低脳多いんだな
いちいち全PCにマニュアルインスコしてられっかよwwwwww

199 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 23:21:11 ]
ActiveRubyのアイコンが気に入らないので
XP風の普通のRubyファイル用のアイコンを探しています。
Perl用とかC用とかも有ればベストなのですが、
オーソドックスな普通のアイコンはありませんか?

200 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 23:22:42 ]
何がどうオーソドックスなんだ…



201 名前:デフォルトの名無しさん [2008/01/23(水) 23:29:42 ]
site:ruby-lang.org
オプションをつけてGoogle検索すればいいだけじゃね?

202 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 23:46:33 ]
Ruby Iconで検索するとそこそこのが見つかる

203 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:NLISTが動かない鯖に一票sage [2008/01/24(木) 11:05:00 ]
ただエラーって言われてもねえ

205 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 11:30:29 ]
NATの内側にいてパッシブモードでないとか?

207 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 11:39:57 ]
FTPのエラーコードがわかれば瞬殺だな
Rubyの出す例外はきちんと書こうぜ


>>206
んだなす
ftp.passive=trueしたあとにコマンド実行させれば動くはず

208 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 20:58:18 ]
ASCII-8BIT ってなんですか?

210 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 21:10:30 ]
>>209
このスレではまだしばらくは縁のない言葉です。



211 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 23:24:09 ]
これから正規表現を書き溜めていく気マソマソ
どうせなら鬼車に乗りたいので
早く1.9系安定してくだされぇ〜!

を言い訳に作業をサボる自分・・・ヨワッ

212 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 01:49:10 ]
すみませんが、質問です。

open パス名 do |file|
例外発生
end
となった場合、オープンされたファイルは自動的にクローズされるのでしょうか?


213 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 02:14:22 ]
ブロック付きopenは、
begin
open
付いてきたブロックであれこれ作業
ensure
close
end
という意味。ensureは例外になろうがなるまいが実行されるよ。


214 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 02:19:42 ]
>>213
ありがとうございます。これで安心して作業ができます。


215 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 04:28:52 ]
すみません。
C++で書かれたプログラムをrubyに移植しているのですが、参照で困りました。
RubyにはC++でいう参照はありますか。
それもクラスインスタンスではなくint等の組み込み型を参照として渡すことはできますか。

216 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 05:48:31 ]
Rubyでは、数値とSymbol以外はすべて参照

217 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 05:53:26 ]
引数の参照渡しのことかも。
それは確かできなかったはず

218 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 06:12:03 ]
>>215
>int等の組み込み型を参照として渡すことはできますか。
integerやfloatはできない。それ以外はすべて参照。
引数の参照渡しのことなら、できない。
まず具体的にどんなことがしたいかをプログラムで書いてみて。

219 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 07:05:58 ]
>219
・関数が失敗の場合は、例外を返せば良い
・Rubyのメソッドは複数の値を返せる(return a, b とすれば a, b = get_data() で受け取れる)
・bufferがオブジェクトの一部分なら、オブジェクト自体を渡す選択肢も
・配列として受け渡しすれば、擬似的な参照渡しになる
お好きなのをどうぞ。



221 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 07:13:09 ]
Ruby的には条件が真なら数値を、偽ならnilを返すようにするとかっこいいよね
戻り値がnilか否かをチェックすれば真偽をチェックしたことになるから

222 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 07:19:09 ]
>>220-221
なるほど。
ありがとうございました。

223 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 07:26:32 ]
すみません
同じ値のはずの2つのstringオブジェクトを==で比べると、なぜかfalseが返ってきます。
デバッグで見ても、2つのオブジェクトは全く同じ値でした。
どこか処理がまずくてスタックが壊れてるのでしょうか?

224 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 07:32:44 ]
>223
JavaじゃなくてRubyの話なんだよな?

p 変数

で見ても全く同じ?

225 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 07:39:37 ]
はい。同じでした。

if str1 == str2
return;
end

p str1 + " " + str2

このようなコードなのですが、if文でリターンせずにpによって 「同じ文字 半角スペース 同じ文字」 が表示されました。

226 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 07:55:25 ]
+で結合せずに、どういう出力が出るか試してみ

p str1
p str2
p str1.class
p str2.class

あとRubyのバージョンを書いて

227 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 08:00:09 ]
どうもすみません。
結果です。



String
String

と表示されました。
バージョンは1.8.1です。

228 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 08:20:26 ]
1.8.1で文字列もクラスも同じ……となると、原因が全く分からないな
あとはコード全体を見ないことには

229 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 09:02:14 ]
>>227
"あ"
ではなく

と表示されたのなら問題ないんじゃね

230 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 09:14:01 ]
>>228
gonzo.dip.jp/~gonzo/cgi-bin/uploader2/upload.cgi?mode=dl&file=2078
アップしました。
見辛くて申し訳ありません。
なにかトンチンカンなことをやってバグを誘発しているのでしょうか(><)



231 名前:230 mailto:sage [2008/01/25(金) 09:14:26 ]
DLkeyはrubycsvです。


232 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 09:15:08 ]
>>221
0が真になるのは良いとして
falseも真という意味ですよね
nilだけが偽と

233 名前:230 mailto:sage [2008/01/25(金) 09:27:04 ]
ソースに誤植がありました
× check( i , GetElementString( i , "通常" , n ) );
○ check( i , GetElementString( i , "通常ポーズ" , n ) );

234 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 09:35:34 ]
…。全角空白混じってるしトップレベルのmainを実行してる場所がないぞ。


で、41行目の
> if( elem_name.to_s == @definition_names[i].to_s )
で、同じデータのはずなのにfalseが返ることがあるという質問でいい?

235 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 09:37:50 ]
>>234
すみません全角混じっていましたか。
質問は全くその通りです。

236 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 10:38:17 ]
>>236
お手数おかけしました。
ということは、コードの問題ではなくて、環境固有の問題なのでしょうか。
実は実行環境はRPGツクールVXなのです。
こちらの環境ではelseで付け加えて値を見ると、同じ文字の組み合わせがありました。
ツクール内部で呼び出しているので、通常の環境とは異なっているのかもしれませんね。

238 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 12:43:09 ]
cygpath -d /cygdrive/c

240 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 12:44:27 ]
$ cygpath -w '/cygdrive/c/program files'
c:\program files

$ cygpath -d '/cygdrive/c/program files'
c:\PROGRA~1



241 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 12:54:58 ]
>>232
>0が真になるのは良いとして
>falseも真という意味ですよね
>nilだけが偽と

うんにゃ。nilとfalseが偽と見なされる。
成功したときは数値を返し、失敗したときはnilを返す。falseは返さない。
これでいいじゃん?


243 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 12:57:12 ]
正規表現目当てでRubyに挑戦中
str1=str2
でなく
str1=str2.dup
と書かなきゃコピーにならんとこは
わたしのような初心者にはドエライ罠だったんですけど・・・

244 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 13:09:18 ]
>>243
「明示的な複製」が自力で必要な場面は意外と少ないんだ
データを返す組み込みクラスのメソッドの多くは結果を複製して返す
知らないとどこかで絶対に一度は嵌るが、知ってしまうと意外とそうでもない

>>242
falseは(Rubyには型としては無いけど)booleanで使うといいよね
nilはそれ以外の「空」とか「無し」とか
「失敗」をfalseにするかnilにするかは若干迷うけど、「成功」がtrueという値になると思えるならfalseだな

if文ではfalseもnilもelseに行くから深く考えなくてもいいし

245 名前:238 mailto:sage [2008/01/25(金) 13:13:23 ]
皆さん、ありがとうございます。

>>239->>240
wdoc = wordOLEObject.Documents.open `cygpath -w #{File.expand_path 'Readme'}`
こんな感じでしょうか?

これだと、今度は逆にCygwin以外のWindows環境では動きません。環境の判別法
ははないものでしょうか?
欲を言えば、分岐なしでどちらの環境でも動くならありがたいのですが。

>>241
Cygwin版のRubyと共存させるわけですか...。それも一つの手だなあ。
ActiveScriptRuby 使いたいし。
ただ、環境が安定するかどうかが不安です。


246 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 14:03:12 ]
>>245
環境の判別はRUBY_PLATFORMで。
分岐なしで動くようにするのは無理。
強いて言えば238で自分で書いてるのが分岐なしで動くようにする方法になるのかもしれんが。

247 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 14:05:07 ]
> 分岐なしで
どこをどう作っても内部的には分岐使ってる
気にすんな

248 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 14:16:30 ]
最初は抵抗あるけど、サブルーチンだと割り切ってメソッドに切り分ければ
あ〜ら不思議あら不思議

249 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 14:19:51 ]
あえてCygwin版を使うメリットって何?
Cygwin環境で閉じた使い方をする分にはパス周りのトラブルが少ないのから?

250 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 14:22:48 ]
昔は全部Cygwinでないとどうにもならなかったんだよ
5年くらい前の話



251 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 15:09:02 ]
>>250
つまり、今はそうでもないってこと?

252 名前:238 mailto:sage [2008/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にはいろいろ便利なことがあるので。







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

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

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