Windowsでの標準入力リダイレクト ― 2006年11月07日 08時17分47秒
ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
もう2週間近く前に出会った現象。書いておいたほうがいいと思うので、書
いておきます。
--- ここから ---
ご参考:
Windows版Rubyで出会った現象。Rubyに限らず、他の言語でも起きるはず。
昨日と今日、はまってました。
doc = nil
if input_filename != nil then
File.open(input_filename) {|f|
doc = REXML::Document.new f
}
else
doc = REXML::Document.new $stdin
end
の標準入力をパラメータに渡してXMLのDocumentを作る部分、
doc = REXML::Document.new $stdin
が動かない。
あれこれググったり、REXMLのドキュメントやらソースやら、RubyのIOパッ
ケージのドキュメントやらソースやら延々と読んでみたけど、わからず。
何度目かのググリで、それらしいのに、ヒット。
# ActiveRubyのRubyコンソールで、ruby xxx.rb param ではなく xxx.rb
param と
# .rbの拡張子の関連付けを使った起動をすると、動かない。詳しくは、
# http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/37865
# Windowsでの標準入力リダイレクト
# を参照。
# レジストリを書き換えるか、rubyコマンドを明示して指定すればよい。
要は、Windowsの仕様というかバグというか。
http://support.microsoft.com/default.aspx?scid=kb;en-us;321788
STDIN/STDOUT Redirection May Not Work If Started from a File
Associationでは、最新のサービスパックでいいみたいに書いてあるけど、ぼ
くのマシンはXP SP2で最新のはず。でも、起きた。
--- ここまで ---
この件を、ruby-listに書いておいてくださった、大谷さんありがとうござ
います。また、そのアーカイブを検索可能にしてくださっている長岡技術大学
のShin-iciho Haraさん、ありがとうございます。
とにかく、助かりました。
生まれて初めてRubyで30行以上書いた。\(^O^)/
詳しくは、
http://www.geneontology.org/
をみてほしいが、Gene Ontologyという遺伝子のオントロジーデータを処理す
るのに、Rubyで書いてみた。
普段ならJavaで書くんだけど、RubyでXML処理はどうやるんだろうと思って、
やってみた。REXMLを使ってみたが、非常に簡単。遅いけれど、今回はスピー
ドは要求されないし、ファイルサイズも100MBやGBの世界じゃなくて10MBくら
いだから、REXMLはメモリに全部もってくるのが基本だけど、サイズ的に大し
たことないので、やってみようかなと。
rdocの書き方も初めて勉強しました。\(^O^)/
まつもとさんがまだRubyの本を書いているころから、RubyはALGOLシンタッ
クスのLispだなどといって好きな言語だったんですが、体がC/C++/Java系に慣
れていて、たとえば if のブロックが { } ではなくthen endなのが、けっこ
う嫌いだった。
でも、500行くらい書くとなんかこっちに体が慣れてきて、どうでもよくな
ってくるね。^^;
逆にJavaに戻ってくると if () と () が必要なのが煩わしくなってくるし、
; も汚く思えてくる。
勝手なもんだね。\(^O^)/
---
もう2週間近く前に出会った現象。書いておいたほうがいいと思うので、書
いておきます。
--- ここから ---
ご参考:
Windows版Rubyで出会った現象。Rubyに限らず、他の言語でも起きるはず。
昨日と今日、はまってました。
doc = nil
if input_filename != nil then
File.open(input_filename) {|f|
doc = REXML::Document.new f
}
else
doc = REXML::Document.new $stdin
end
の標準入力をパラメータに渡してXMLのDocumentを作る部分、
doc = REXML::Document.new $stdin
が動かない。
あれこれググったり、REXMLのドキュメントやらソースやら、RubyのIOパッ
ケージのドキュメントやらソースやら延々と読んでみたけど、わからず。
何度目かのググリで、それらしいのに、ヒット。
# ActiveRubyのRubyコンソールで、ruby xxx.rb param ではなく xxx.rb
param と
# .rbの拡張子の関連付けを使った起動をすると、動かない。詳しくは、
# http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/37865
# Windowsでの標準入力リダイレクト
# を参照。
# レジストリを書き換えるか、rubyコマンドを明示して指定すればよい。
要は、Windowsの仕様というかバグというか。
http://support.microsoft.com/default.aspx?scid=kb;en-us;321788
STDIN/STDOUT Redirection May Not Work If Started from a File
Associationでは、最新のサービスパックでいいみたいに書いてあるけど、ぼ
くのマシンはXP SP2で最新のはず。でも、起きた。
--- ここまで ---
この件を、ruby-listに書いておいてくださった、大谷さんありがとうござ
います。また、そのアーカイブを検索可能にしてくださっている長岡技術大学
のShin-iciho Haraさん、ありがとうございます。
とにかく、助かりました。
生まれて初めてRubyで30行以上書いた。\(^O^)/
詳しくは、
http://www.geneontology.org/
をみてほしいが、Gene Ontologyという遺伝子のオントロジーデータを処理す
るのに、Rubyで書いてみた。
普段ならJavaで書くんだけど、RubyでXML処理はどうやるんだろうと思って、
やってみた。REXMLを使ってみたが、非常に簡単。遅いけれど、今回はスピー
ドは要求されないし、ファイルサイズも100MBやGBの世界じゃなくて10MBくら
いだから、REXMLはメモリに全部もってくるのが基本だけど、サイズ的に大し
たことないので、やってみようかなと。
rdocの書き方も初めて勉強しました。\(^O^)/
まつもとさんがまだRubyの本を書いているころから、RubyはALGOLシンタッ
クスのLispだなどといって好きな言語だったんですが、体がC/C++/Java系に慣
れていて、たとえば if のブロックが { } ではなくthen endなのが、けっこ
う嫌いだった。
でも、500行くらい書くとなんかこっちに体が慣れてきて、どうでもよくな
ってくるね。^^;
逆にJavaに戻ってくると if () と () が必要なのが煩わしくなってくるし、
; も汚く思えてくる。
勝手なもんだね。\(^O^)/
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
※投稿には管理者が設定した質問に答える必要があります。