VB6の関数一覧を出力する

ちょっとした小ネタです。

VB6のソースから関数の一覧を抜き出したいと言われたので、PowerShellでサクっと作ってみました。


Get-ChildItem -recurse -include *.bas | % {[string]::Join("`n", ((Get-Content $_) | % { $_.Trim() })).Replace("_`n", "").Split("`n") | ? { $_ -match "Public (Sub|Function)" }}

これを実行するとカレントディレクトリとその配下にあるディレクトリからVB6のモジュールファイルを検索して、その中に定義されているPublicな関数とプロシージャが標準出力に出力されます。

調子に乗ってワンライナーで書いたので読みづらいですが、やっている事は、

  1. Get-ChildItemでカレントディレクトリとその配下にある「.bas」ファイルを検索する。
  2. Get-Contentでファイルの内容を配列で取得する。
  3. string.Trimメソッドで各要素の先頭と末尾のスペースを削除する。
  4. string.Joinメソッドで、その配列を改行コードで連結する。
  5. string.Replaceメソッドで、"_" + 改行コードを削除する(VBの_改行を削除する)。
  6. string.Splitメソッドを使って、改行コードで分割する。
  7. 正規表現を使って、関数の定義を探す。

となります。

こういった処理が一行で書けてしまうのもPowerShellの魅力のひとつですね。