(ruby)(grep的なプログラム)
API関数の定数の値を調べるのがめんどいので
VC++2008 や VC++2008ExpressEdition等をインストールする時に 一緒にインストールされる
「Windows SDK」 の 「Include」フォルダ内の
(デフォルトだと C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include)
*.hファイル内を 調べて 指定した正規表現にヒットした場合に
それを リストアップしていく rubyのスクリプトを考えてみました
まぁ 同じような事をするソフトはたくさんありますけど
表示の仕方を 自分が好きなように変更できるのが スクリプトの良さですよね
スクリプト名は 「ts.rb」としておきます
そして こんな感じの バッチファイルを組めば
.rb の 拡張子まで書かなくてもよくなりますね
あとは パスの通った所に 置いておきます
では 使い方の 一例ですが
例えば API関数関連 の 「DRIVE_・・・」 という 定数の値を知りたい場合なら
コマンドプロンプトで さっきの Includeフォルダ を 開きます
そして 以下のコマンドを実行すれば ヒットした行が 標準出力されます
ちょっとややこしいですけど
ファイルパターンは 「'」でくくります
正規表現は 「"」でくくります
もし大文字小文字を同一視するなら 第3引数に 「i」オプションを入れます
ファイルに出力するなら
と リダイレクトします
moreで見るなら
と パイプします
VC++2008 や VC++2008ExpressEdition等をインストールする時に 一緒にインストールされる
「Windows SDK」 の 「Include」フォルダ内の
(デフォルトだと C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include)
*.hファイル内を 調べて 指定した正規表現にヒットした場合に
それを リストアップしていく rubyのスクリプトを考えてみました
まぁ 同じような事をするソフトはたくさんありますけど
表示の仕方を 自分が好きなように変更できるのが スクリプトの良さですよね
if ARGV[2] == 'i' regex = Regexp.new(ARGV[1], Regexp::IGNORECASE) else regex = Regexp.new(ARGV[1]) end Dir.glob(ARGV[0].gsub(/\\/,'/')).each{|fn| isfirstfound = true f = File.open(fn, 'r') lc = 0 while line = f.gets() lc += 1 if ( line =~ regex ) if ( isfirstfound ) isfirstfound = false puts("\n>>>> #{fn.gsub(/\//,'\\')} <<<<") end puts("#{lc.to_s().rjust(6,"0")}:#{line}") end end }とりあえず テキストのサーチなので
スクリプト名は 「ts.rb」としておきます
そして こんな感じの バッチファイルを組めば
.rb の 拡張子まで書かなくてもよくなりますね
あとは パスの通った所に 置いておきます
@echo off .\ts.rb %1 %2 %3
では 使い方の 一例ですが
例えば API関数関連 の 「DRIVE_・・・」 という 定数の値を知りたい場合なら
コマンドプロンプトで さっきの Includeフォルダ を 開きます
そして 以下のコマンドを実行すれば ヒットした行が 標準出力されます
ts '*.h' "^#define DRIVE_" |
ファイルパターンは 「'」でくくります
正規表現は 「"」でくくります
もし大文字小文字を同一視するなら 第3引数に 「i」オプションを入れます
ts '*.h' "^#define drive_" i |
ts '*.h' "^#define mci_" i > out.txt |
moreで見るなら
ts '*.h' "^#define mci_" i | more |