Windowsでの標準入力リダイレクト
2006-11-07


ASAHIネット([URL]のjouwa/salonからホットコーナー([URL] )に転載したものから。
---
 もう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の拡張子の関連付けを使った起動をすると、動かない。詳しくは、
# [URL]
# Windowsでの標準入力リダイレクト
# を参照。
# レジストリを書き換えるか、rubyコマンドを明示して指定すればよい。

 要は、Windowsの仕様というかバグというか。
[URL]
STDIN/STDOUT Redirection May Not Work If Started from a File
Associationでは、最新のサービスパックでいいみたいに書いてあるけど、ぼ
くのマシンはXP SP2で最新のはず。でも、起きた。
--- ここまで ---

 この件を、ruby-listに書いておいてくださった、大谷さんありがとうござ
います。また、そのアーカイブを検索可能にしてくださっている長岡技術大学
のShin-iciho Haraさん、ありがとうございます。
 とにかく、助かりました。

 生まれて初めてRubyで30行以上書いた。\(^O^)/
 詳しくは、
[URL]
をみてほしいが、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^)/

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット