行のコメントアウト部分の開始を示すアポストロフィを見つけるために vb6 が使用する規則は何ですか?
次の理由により、そのようなルールを定義する能力に自信がありません。
- 文字列リテラル内のアポストロフィ
- 文字列操作でネストされた二重引用符内のアポストロフィ
- コメントで二重引用符が発生する可能性があるという事実
- 行が複数の行にまたがることができるという事実
- 1 行を分割するコロン
- 私が知らない他のルールの可能性
行のコメントアウト部分の開始を示すアポストロフィを見つけるために vb6 が使用する規則は何ですか?
次の理由により、そのようなルールを定義する能力に自信がありません。
本当に知りたい場合は、 VBA 言語仕様が BNF 文法と共に MSDN でオンラインになっています。VBA は VB6 と 99% 同等です。コメントの識別に関するルールは同じでなければなりません。
また、デッド コードを排除しようとしている場合は、MZ-Toolsを入手してください。それは無料です。コード レビュー ツールを使用します。「MZ-Tools は、プロジェクト グループ、プロジェクト、またはファイル レベルで (コンテキスト メニューを使用して) ソース コードを確認し、未使用の変数、定数、パラメーター、プライベート プロシージャなどを検出できます。」未使用のサブルーチンと関数を削除するには、すべての呼び出し元を一覧表示する MZ-Tools 機能を使用します。
EDITとして不必要に宣言されたアイテムを削除する方法についてのコメントで議論がありますPublic
: MZ Tools はこれを助けません。
これは、私が試したどの例でも機能するようです。使用している唯一のルールは、文字列リテラル内のアポストロフィを無視することであり、コメントを開始するための rem という単語の使用を考慮していません。残念なことに、"""" (4 つの二重引用符) が単一の二重引用符を含む文字列リテラルであることを昨日まで知りませんでした。
Public Function CommentStripOut(ByVal strLine As String) As String
Dim InLiteral As Boolean
Dim strReturn As String
Dim LenLine As Long
Dim counter As Long
Dim s1 As String
Dim s2 As String
strReturn = strLine
LenLine = Len(strLine)
InLiteral = False
For counter = 1 To LenLine
s1 = Mid$(strLine, counter, 1)
If counter < LenLine Then
s2 = Mid$(strLine, counter + 1, 1)
Else
s2 = ""
End If
If s1 = """" Then
If Not InLiteral Then
InLiteral = True
Else
If s2 = """" Then
counter = counter + 1
'skip on by 1 because
'want to treat escaped
'double quote as a single
'character
Else
InLiteral = False
End If
End If
Else
If Not InLiteral Then
If s1 = "'" Then
strReturn = Left$(strLine, counter - 1)
Exit For
End If
End If
End If
Next counter
CommentStripOut = strReturn
End Function