Rubyの魔神 このページをアンテナに追加 RSSフィード

   「Ruby」は宝石の魔神のイメージ(The Jinn of the Ruby)
   [VB] [VB6] [C#] [Android] [電子工作] [個人メモ] [仕事メモ] [アイデア] [TstLink] [CE] [LTSA] [自動化] [Qt] [OCaml] [TOOLS]
   [3Dプリンタ] [RAA] [Forge]   [機能別索引] [逆引きRuby] [マニュアル] [るびま] [標準ライブラリ] [るりまサーチ] [Try! Ruby] [PRaggerまとめ] [ピジョン・ブラッド]
   [Rubyコーディング規約] [プログラミングのオキテ] [Rubyist SNS] [TOOLBIS]
   [RubyネットワークProg] [druby] [コードなにがし] [RDocテンプレ] [Ruby/Tkサンプル]
   [WAVE] [Xperia] [github] [twitterなど] [Java] [EA] [マクロ]

2008-03-12

ファイルを読んで行単位で検索

| 10:45 | ファイルを読んで行単位で検索 - Rubyの魔神 を含むブックマーク はてなブックマーク - ファイルを読んで行単位で検索 - Rubyの魔神 ファイルを読んで行単位で検索 - Rubyの魔神 のブックマークコメント

#! ruby -Ks
#File.readlines(ファイル名).grep(正規表現)
a = File.readlines("test.txt").grep(/aa/)
p a

以下も可能

#! ruby -Ks
a = open("test.dat").grep(/aa/)
p a
トラックバック - http://ruby.g.hatena.ne.jp/garyo/20080312

2007-12-06

自分のIPアドレスを表示する方法

| 05:55 | 自分のIPアドレスを表示する方法 - Rubyの魔神 を含むブックマーク はてなブックマーク - 自分のIPアドレスを表示する方法 - Rubyの魔神 自分のIPアドレスを表示する方法 - Rubyの魔神 のブックマークコメント

require "socket" 
p IPSocket::getaddress(Socket::gethostname) 

koushkoush2007/12/08 09:31Erubisも良さそうですよ~
http://jp.rubyist.net/magazine/?0021-Erubis

garyogaryo2007/12/10 13:14ありがとうございます。高速そうですね。

トラックバック - http://ruby.g.hatena.ne.jp/garyo/20071206

2007-12-01

TmailなどRubyのライブラリでインストール時「can't find header files for ruby.」エラーで失敗する時の対処方法まとめ

| 19:06 | TmailなどRubyのライブラリでインストール時「can't find header files for ruby.」エラーで失敗する時の対処方法まとめ - Rubyの魔神 を含むブックマーク はてなブックマーク - TmailなどRubyのライブラリでインストール時「can't find header files for ruby.」エラーで失敗する時の対処方法まとめ - Rubyの魔神 TmailなどRubyのライブラリでインストール時「can't find header files for ruby.」エラーで失敗する時の対処方法まとめ - Rubyの魔神 のブックマークコメント

Tmailはnet/smtpやnet/popで受信したメールを解析して本文やタイトルにしてくれるライブラリです。

Windowsにインストールする時に以下の問題があります。

1.手動でインストールする場合

問題点1

  http://i.loveruby.net/ja/projects/tmail/

  上記からダウンロードしてそのままsetup.rbを実行すると失敗します。

原因1

  拡張ライブラリ(ext)をコンパイルしようとするのでインストールに失敗します。

解決方法1

  ダウンロードしたファイルを解等し、そのフォルダで以下を実行

  拡張ライブラリをコンパイルせずにインストールできます。

ruby setup.rb config --without-ext
ruby setup.rb setup
ruby setup.rb install

  参考

  http://rubyist.g.hatena.ne.jp/hiro-ueda/20071010/1192024253

2.gemでインストールする場合

問題点1

gem install tmailを実行すると「can't find header files for ruby.」エラーで失敗することがあります。

 C:\Documents and Settings\garyo>gem install tmail
 Building native extensions. This could take a while<a class="okeyword" href="g:rgss:keyword:...">...</a>
 can't find header files for ruby.
原因1

 以下の条件がそろった時に発生


 a)Visual C++やMinGWなどコンパイル環境があり

 b)ActiveScriptRubyの標準インストールを行っている。


 Tmailはコンパイル環境が無いときは何もしない「make.bat」を作って拡張ライブラリのコンパイルを行わない。

 しかしコンパイル環境がある場合はコンパイルを行おうとする。

 ActiveScriptRubyを標準インストールした場合は「ruby.h」などヘッダーをインストールしていないため

 コンパイルが必要なライブラリのインストール時は「can't find header files for ruby.」エラーになる。

  

解決方法1

 以下のASRDev18.msiをインストールして「gem install tmail」を実行する

 http://arton.hp.infoseek.co.jp/ASRDev18.msi

 詳細は以下の質問を参考

 http://q.hatena.ne.jp/1196376031

トラックバック - http://ruby.g.hatena.ne.jp/garyo/20071201

2007-11-29

「batファイルにrubyを埋め込む方法」が必要なわけ

| 07:08 | 「batファイルにrubyを埋め込む方法」が必要なわけ - Rubyの魔神 を含むブックマーク はてなブックマーク - 「batファイルにrubyを埋め込む方法」が必要なわけ - Rubyの魔神 「batファイルにrubyを埋め込む方法」が必要なわけ - Rubyの魔神 のブックマークコメント

@echo off
ruby -x "%~f0" %*
goto :EOF

#!ruby
#---------------ruby script starts here
puts "hello, rb.bat"
#---------------ruby script ends here
__END__
:EOF
[ruby

これは面白いですね。でもいつ使うんだろ?

.rbが動くなら.rbでいいし、.rbが動かないなら.batでも動かない?

.rbとrubyが関連付けされてないときに使うのかな。

【追記】コメント欄でotnさんに以下を教えていただきました。ありがとうございます。

BATへのRuby埋め込みですが、Windowsのバグのために拡張子関連づけでRubyを起動するとリダイレクト・パイプが効かない(エラーになる)です。このため、標準入出力を使うスクリプトだとBAT埋め込みが必要でした。BATならリダイレクトが効く。RubyだけでなくWindows標準のVBSでも効かない。

このバグは現在では修正されてますが、レジストリをいじらないと修正が有効になりません。

InheritConsoleHandles でググって見てください。

http://ruby.g.hatena.ne.jp/garyo/20071129#c1196426934

試してみました。

test.rb

while s=gets
	puts s
end

C:\temp>test.rb

aaa

aaa

^Z

C:\temp>echo "hello" | test.rb

C:/temp/test.rb:1:in `gets': Bad file descriptor (Errno::EBADF)

from C:/temp/test.rb:1

プロセスが、存在しないパイプに書き込もうとしました。

test.bat

@echo off
ruby -x "%~f0" %*
goto :EOF

#!ruby
#---------------ruby script starts here
while s=gets
	puts s
end

#---------------ruby script ends here
__END__
:EOF

C:\temp>test.bat

aaa

aaa

^Z

C:\temp>echo "hello" | test.bat

"hello"

本当ですね(^-^)。これは良いことを知りました。

hiro-uedahiro-ueda2007/11/29 11:32gem になってますよ :)。青木さんがメンテナを委譲された後、gem 化されました。

$ gem search -r tmail

*** REMOTE GEMS ***
Bulk updating Gem source index for: http://gems.rubyforge.org
(省略)
tmail (1.1.1)
Ruby Mail Handler

garyogaryo2007/11/29 11:45hiro-uedaさんありがとうございます。
情報ありがとうございます。
ローカルのgemの環境がおかしくなっているみたいです。

C:\project\ruby>gem install tmail
Building native extensions. This could take a while...
can't find header files for ruby.

ERROR: While executing gem ... (RuntimeError)
ERROR: Failed to build gem native extension.
Gem files will remain installed in C:/ruby-1.8/lib/ruby/gems/1.8/gems/tmail-1.1.
1 for inspection.


Results logged to C:/ruby-1.8/lib/ruby/gems/1.8/gems/tmail-1.1.1/ext/tmail/base6
4/gem_make.out

hiro-uedahiro-ueda2007/11/30 11:09こちらでも同じエラーが出ました。gem 用 tmail の問題なんでしょうかね?

hiro-uedahiro-ueda2007/11/30 11:16たびたびすいません、どうも gem 化はされたものの Windows 環境は考慮してないみたいですね。ext 以下を build してる時点でおかしいので...

garyogaryo2007/11/30 14:24ありがとうございます。一度MLで聞いてみます。

otnotn2007/11/30 21:48BATへのRuby埋め込みですが、Windowsのバグのために拡張子関連づけでRubyを起動するとリダイレクト・パイプが効かない(エラーになる)です。このため、標準入出力を使うスクリプトだとBAT埋め込みが必要でした。BATならリダイレクトが効く。RubyだけでなくWindows標準のVBSでも効かない。

このバグは現在では修正されてますが、レジストリをいじらないと修正が有効になりません。
InheritConsoleHandles でググって見てください。

garyogaryo2007/12/01 07:43otnさん、そうだったんですか。初めて知りました。勉強になりますm(__)m

garyogaryo2007/12/01 19:25hiro-uedaさん、色々ありがとうございます。以下でまとめてみました。
http://ruby.g.hatena.ne.jp/garyo/20071201/1196503598

トラックバック - http://ruby.g.hatena.ne.jp/garyo/20071129

2007-11-19

Ruby Tips

| 01:14 | Ruby Tips - Rubyの魔神 を含むブックマーク はてなブックマーク - Ruby Tips - Rubyの魔神 Ruby Tips - Rubyの魔神 のブックマークコメント

配列に逆からアクセス

a[-1],a[-2],・・・で配列の最後、最後から2番目、・・・にアクセスできる


ハッシュを初めて使う時のnilエラーの対策

初めて使うハッシュはnilを返すのでnilは+=が定義されずエラーに・・・。三項演算子で回避してたけど

a={}
b="new"
a[b]=(a[b]?a[b]+1:1)

対処方法として「Hash.new(初期値)」でハッシュの初期値を与えればOK。

0でも""でも必要な初期値を与えておけば、場合分け不要になって綺麗です。

a=Hash.new(0)
p a["new"]+=1

timesでカウント値

timesでもカウント値、使えるんですね。知りませんでいた。わざわざfor文つかってました。

n=10

n.times{|i| p i} #0-9まで表示します。
トラックバック - http://ruby.g.hatena.ne.jp/garyo/20071119