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