ページ

2008年1月3日木曜日

『いいよね小さなネズミになる やつらにも届かない場所がある すぐに狭い抜け穴 逃げ込めるような 小さなネズミになる』

0 件のコメント:
ruby -r win32ole -e 'puts WIN32OLE_TYPE.progids'
で、WIN32OLEを使えるプログラム一覧が出てくる。僕のPCで大体5500個ほど出てきた。
んで、これはプログラムIDだかなんだかでソートされてるやつっぽいから、ちゃんと人間がわかるようにアルファベット順に並び替えて違うファイルに書き出したい。いや別に上書きでもいいんだけど。
class Dogs
infile = open("C:\\win32.txt")
all = infile.readlines
infile.close
foo = File.open("C:\\win32_out.txt","w")
foo.puts all.sort
foo.close
end
これで、win32.txtの中にあるやつをアルファベット順にしてwin32_out.txtの中に書き出せた。バンザーイ。
Arrayオブジェクトのsortメソッドを使ったら、配列の中身が一気に指定された順に書き換えられるのかと思ってたから、ちょっとそこで10分ほど止まった。sortしても配列自体が書き換わるわけではないのな。

これを確認した上でさらに改良。
require 'win32ole'

infile = open("C:\\win32.txt")
all = infile.readlines
all = all.sort
infile.close

fo = File.open("C:\\win32_methods.txt","w")
all.each do |param|
begin
p param.chomp
fo.puts "【"+param.chomp+"】"
ie = WIN32OLE.new(param.chomp)
me = ie.ole_methods
me.each do |pam|
fo.puts pam +"\\n"
end
i = i+1
rescue
p "error"
end
end
fo.close
で、それぞれのCOMオブジェクトのメソッド一覧が出てくる・・・のだが、5500個のリストのさらに各メソッドの数となると膨大なのでめちゃくちゃ時間がかかる。まあ、5500個全てが有効なのかというとそういうわけではないけど。

っていうか、エラーにならないのに処理がストップする謎の現象が起きたので、そのオブジェクトだけ避けるunless文を逐一追加して回避してたんだけど、プリンタは立ち上がるは変なアラートは出るわでほぼフリーズ状態になってきたのでこの処理は中断することに。

仕方ないからよく使うアプリケーションをあらかじめ指定した上で遊んでみることにする。

『君の言葉を信じたい 素敵な嘘だから』

0 件のコメント:
eclipseでRubyを勉強しているんだが、標準出力で早速文字化けw悩まされるのはいつも文字コードだ。なんかそろそろ、文字化けしたものを見て、どの文字コードからどの文字コードへの変換で文字化けが起こってるのか判別出来そうだ。ちなみにUTF-8→SJISへの日本語変換時の文字化けは、虫編のつく感じがつらつらと並ぶ。一番よく遭遇する文字化け。

で、調べてみると、eclipseのコンソールはOS依存なので、OSの文字コードで表示されるとのこと。
RubyのクラスファイルがUTF-8なので、それからWindowsの文字コードであるSJISのコンソールに文字列が行くと当然文字化けするよな、と言う話。
じゃあどう回避するのかと言うと、
puts "檻の中の花".tosjis
と言う具合にしなければならない。面倒くさいよな。
Ruby1.9からだと、$stdoutとか言う環境オブジェクト内のメソッドで明示的にSJISに設定できるらしいんだけど、僕が使ってるバージョンは残念ながら1.8だ。たまたま最初に見た入門サイトで示されてたバージョンが1.8だから。まあちょっとした勉強だから別にどっちでもいいんだけどね。