miau's blog?

VBReport

TYPersonal2 で配布されてるアプリケーションで、VBプロジェクトの構成を見ることができる。
関数の呼び出し関係がツリービューで表示されるので、他人の書いたプロジェクトで流れを把握したときなんかに便利。

・・・のだけど、例えば

Private Sub Hoge()
.
.
MsgBox("Hoge() でエラーが発生しました")
End Sub


みたいなコードがあると、Hoge()→Hoge() と再帰呼び出しを行ってると判断されて、ツリービューが無駄に深くなってしまう。(つまり、文字列判定を行っていないのだ)

今回のプロジェクトでは、「エラー処理の際は関数名を出力する」という決まりごとがあるようで、すべての関数で上記のように無駄な解析が行われてしまう。
こうなると解析には数十分かかるわ、完成したツリーも可読性が悪いわで使い物にならない。

幸いこのアプリケーションはソースも配布されてるので、ちょっといじってみました。


とりあえず、解析前に文字列部分をカットしてしまえばいいはずなので、そういう関数を作成。

'******************************************************************************
'機能:文字列のカット
'引数:ソース
'戻り値:
'******************************************************************************
Private Function CutString(ByVal o_Source As Variant) As String
Dim intFrom As Long
Dim intTo As Long

'元の値で初期化
CutString = o_Source

'文字列の開始位置を取得
intFrom = InStr(1, o_Source, """")
Do While intFrom > 0
'文字列の終端を取得
intTo = InStr(intFrom + 1, o_Source, """")
If intTo <= 0 Then
'対応してない→コメント内部と判断
'MsgBox ("見なかったことに")
Exit Function
End If

'終端と思いきや実は違う場合
Do While Mid(o_Source, intTo + 1, 1) = """"
'再度終端の検索
intTo = InStr(intTo + 2, o_Source, """")
If intTo <= 0 Then
'対応してない→コメント内部と判断
'MsgBox ("見なかったことに")
Exit Function
End If
Loop

'文字列部分のカット
o_Source = Mid(o_Source, 1, intFrom - 1) & Mid(o_Source, intTo + 1)
intFrom = InStr(1, o_Source, """")
Loop

CutString = o_Source
End Function

VB って文字列中に改行入れれないから処理楽でいいですね。
もっとスマートに書けそうな気もするけど、とりあえずそれは置いといて。

            StrBuf = CutComment(StrBuf)


ってな呼び出しをしてる部分があるので、その直前に

            StrBuf = CutString(StrBuf)

を入れる。

これで解析時間が数秒に短縮されました。大満足。
posted at 01:54:03 on 2004-03-19 by miau - Category: VB6 No Trackbacks - Permalink

TrackBack

このエントリにトラックバックはありません
現在トラックバックは受け付けていません。

Comments

No comments yet

Add Comments

現在コメントは受け付けていません。
お手数ですが、 こちら のコメント欄にでも記載していただければと思います。