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

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にはいろいろ便利なことがあるので。


253 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 17:01:18 ]
ソースさらすなら、バグが発生する最小限のソースをうpしようよ・・・



254 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 18:35:50 ]
>>253
一部をアップした結果「その部分だけでは分からない」と言われたんだろ?
そういうときはファイルそのものをアップしてもらった方が手っ取り早い
特に初心者には、どこがどこに影響を及ぼしてるのか、簡単には分からないんだから

255 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 10:14:26 ]
arr.each{|i|
 puts i
 i-=2 if gets == "prev" # 逆方向に進ませたい!
}

みたいな事やろうと思ったらwhileと自前の変数でやるしかないんですかね。


257 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 10:18:40 ]
>>256
残念ながら、自前で書かないと出来ないですね。

# 外部イテレータが欲しい。

258 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 10:27:29 ]
continue -2
とかできたらいいのに。

259 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 10:27:50 ]
ああ、Ruby だと next だ。

260 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 12:38:23 ]
>>145
遅レスだが、なんでrubydb使ってないの?
エラー行へのジャンプも普通にあるよ?
んでもって、refe.elとか使えばEmacs上でヘルプも見れる

もし、*nix環境ならfastRI入れてri-ruby.el入れるといいんじゃない?
↑はSoftware Design2月号のEmacs特集の受け売りで
俺はWin環境でMeadowだから使ってないけど

261 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 12:42:42 ]
>>252
WSHのFileSystemObjectを使うのが常套手段
jp.rubyist.net/magazine/?0004-Win32OLE

262 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 13:28:37 ]
Emacsの有名どころではruby-electric.elがあるがこれがまた動作が微妙
導入時は喜ばれるが1週間くらいして無言で外されることで有名

263 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 14:52:22 ]
中括弧とdo〜endぐらいならいいんじゃない?
それぐらいなら手で打てってことかもしれんが

Meadowでxmpfilter使っている人います?
cmdproxy.exeで試したんだけど、スクリプト評価後にプロンプトや
ロゴ表示が残ってしまってションボリな感じ





264 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 20:12:24 ]
passphraseではなくpasswordなので、これはパスワード認証
のためのログインパスワードであって、秘密鍵ファイルを読むための
パスフレーズではないのでは?

でもって、
Public/private keys are always tried before the explicit password authentication, even if you provide a password.
(net-ssh.rubyforge.org/chapter-2.html)

なので、公開鍵認証が行われている、と。

パスフレーズのほうは、空にするか、ssh-agentとかにお任せすることになるのではないでしょうか。


266 名前:264 mailto:sage [2008/01/26(土) 21:59:13 ]
>>265 ありがとうございます
ssh-agent初めて知りました

267 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 22:27:33 ]
unicodeを表すのに、Javaとかでよく使われている ¥uXXXX という表現方法がありますが
これをRubyでデコードするにはどうしたらいいですか。
つまり '¥uXXXX' からunicode文字を得たいです。

268 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 22:34:21 ]
str.gsub(/¥¥u((?:[¥da-f]{2}){1,6})/) { [ $1.hex ].pack('U') }


269 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 22:38:37 ]
>>267
>>268 でいいと思うけど、後ならnkfを使うかな

270 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 22:42:46 ]
>>268
仕組みがさっぱりわからないので、参考になるページがあれば教えてください。

271 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 22:57:30 ]
普通に定義そのまんまだな
Unicodeの解説とか読めばいいんじゃね

272 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 23:00:34 ]
>>270
Rubyコード的には、
¥uXXXXのXXXX部分(文字列)を16進数に変換してpack('U')でUnicode文字にしてる。


273 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 23:10:01 ]
正規表現が極力正確なマッチになるように書かれてるから難しく見えるんだと思う



274 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 23:15:14 ]
ぶっちゃけ /¥¥u([0-9a-f]+)/ あたりのほうがみやすくて実用的かもな。


275 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 23:19:22 ]
>>272
逐語的に訳すとこんな感じ?
"\u"より後に続く数字またはa, b, c, d, e, fの2文字の組を
1個から6個ずつまとめてから16進数に変換する

Rubyリファレンスマニュアルの正規表現のページと見比べてみりゃ
なんとなくわかるんじゃない?







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

前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