1

コードのポスト マイグレーションの一環として、多くのファイルを処理したいと考えています。移行ツールは RegEx を処理でき、以下のように記述します:
'# Replace ".Columns(", ".Columns.Item( "
)

私たちの要件の NullString 単語を二重引用符に置き換えたい、つまり ""
例 Optional ByVal strID2 As String = NullString

Optional ByVal strID2 As String = ""になる必要があります

これは、VB6 の NullString がクラス変数になり、関数宣言では定数である必要があるため必要です。
したがって、以下の基準のいずれかを持つ正規表現が必要です。

  1. 関数宣言にあることを確認してください。つまり、「関数」という単語があり、その名前があり、角かっこ「(」を開きます。次に、[= NullString] が出現する場合は、閉じ角かっこ「)」を押すまで [= ""] に置き換える必要があります。宣言は複数行である可能性があります。
  2. その Optional パラメータかどうかを確認してください。したがって、単語「Optional」、「As String = NullString」に一致し、NullString を「」に置き換えます。

2 つのうちの 1 つを基準として使用できますが、RegEx を作成できません。以下は私のサンプルファイルで、各行に必要なものを説明しました。


私のサンプルファイルの内容

Line 1 :Public Function getAllAddresses(ByVal lngObjectType As String, ByVal strID1 As String, Optional ByVal strID2 As String = NullString, Optional ByVal strID3 As String = NullString, Optional ByVal blnExtraAddresses As Boolean = False, Optional ByRef objDataRequest As CDataRequest = Nothing) As ADORecordset
Line 2 : Dim s as String
Line 3 :s = NullString
Line 4 (ブランク):
Line 5 :Public Function getDefaultPaymentAddress(ByVal lngObjectType As Integer, ByVal strID1 As String, ByVal strID2 As String, Optional ByRef objDataRequest As CDataRequest = Nothing) As typAddress
Line 6 :Public Function myfunc(Optional ByVal strID2 As String = NullString, _
Line 7 :                  Optional ByVal strID3 As String = NullString, _
Line 8 :                  Optional ByVal blnExtraAddresses As Boolean = False, _
Line 9 :                  Optional ByRef objDataRequest As CDataRequest = Nothing) As String
Line 10 :ファイルの終わりまでの'Some code comments with = NullString
:


各行の期待される出力:

  1. 行 1 : 大きな行であるため、NullString が引用符で置き換えられた宣言全体が出力されます。つまり、"" です。
  2. 2行目:そのまま
  3. 3行目: そのまま [ NullStringは置き換えてはいけないことに注意]
  4. Line 4 : そのまま、つまり空白
  5. 5行目:そのまま。ここには NullString がないため、一致しません
  6. 6 行目から 9 行目 : 2 つの NullString を二重引用符で置き換えます (6 行目と 7 行目)
  7. 10行目:そのまま。これは単なるコメントです。
    のようなものがあるかもしれませIf myVar = NullString Thenんが、一致して置き換えられるべきではありません。
    助けてくれてありがとう。
    よろしく、
    ニック
4

1 に答える 1

1

1 つの正規表現ですべての変更を行うことはできません。

次のことを試すことができます。

' Repeat this until there are no more changes.
Search: (Function +\w+ *\([^)]*?)\bNullString\b
Replace: $1""

' Use a multiline match for this one.
Search: ^([ \t]*\w+ *= *)NullString\b
Replace: $1""
于 2012-07-12T16:25:28.377 に答える