用自定义函数替换Print语句调用

时间:2019-02-27 10:53:06

标签: regex replace vb6 notepad++

有一个旧版VB6应用程序,它使用Print语句在整个应用程序上写入日志。 Print的发生次数超过2万。我想在每个Print调用中写一些更多的日志信息。

可以通过用我自己的函数替换Print调用来实现。这对将来也有帮助。

其中一些语句如下:

Print #FileNo, Tab(1); "My Text Here";
Print #FileNo, Tab(col); Txt;
Print #FileNo, Tab(100); Format(TheDate, "DDMMMYYYY") & "    " & Variable_Name & "Field : " & Format(Field, "x")
Print #FileNo, Tab(1); Format(TheDate, "x") & " - " & TheName;
Print #FileNo, String(132, "-")
Print #FileNo, Tab(6); "SOME VALUE"; "SOME MORE VALUES";

这里;指示Print语句不要更改行,Tab指示将插入点定位到绝对列号。

问题:如何在保留PrintTab的行为的同时,用自己的函数替换semicolon

1 个答案:

答案 0 :(得分:5)

您应该使函数使用ParamArray自变量as suggested by Alex,而不是将一个调用分成多个调用。您的函数应如下所示:

' Remember to set the return type or change the function to a Sub.
Public Function MyPrint(fileNo As Byte, ParamArray text() As Variant) 'As SomeType
    ' Insert body here.
End Function

现在,让我们谈谈正则表达式。仅限于使用NotePad ++,我相信您将需要分两个步骤进行操作。

  1. 要替换方法名称(从PrintMyPrint),请使用以下模式:

    Print\h+(#\w+)
    

    并替换为:

    MyPrint \1
    

    Demo

  2. 要用逗号替换分号,可以使用以下模式:

    (?:MyPrint #\w+\K,\h*|(?!^)\G\h*)([^;\r\n]+);?
    

    并替换为:

    , \1
    

    Demo

示例输入

Print #FileNo, Tab(1); "My Text Here";
Print #FileNo, Tab(col); Txt;
Print #FileNo, Tab(100); Format(TheDate, "DDMMMYYYY") & "    " & Variable_Name & "Field : " & Format(Field, "x")
Print #FileNo, Tab(1); Format(TheDate, "x") & " - " & TheName;
Print #FileNo, String(132, "-")
Print #FileNo, Tab(6); "SOME VALUE"; "SOME MORE VALUES";

Print #FileNo, Tab(100); "First Text"; "Second Text"
Print #FileNo, "Third Text"; "Fourth Text"

最终输出:

MyPrint #FileNo, Tab(1), "My Text Here"
MyPrint #FileNo, Tab(col), Txt
MyPrint #FileNo, Tab(100), Format(TheDate, "DDMMMYYYY") & "    " & Variable_Name & "Field : " & Format(Field, "x")
MyPrint #FileNo, Tab(1), Format(TheDate, "x") & " - " & TheName
MyPrint #FileNo, String(132, "-")
MyPrint #FileNo, Tab(6), "SOME VALUE", "SOME MORE VALUES"

MyPrint #FileNo, Tab(100), "First Text", "Second Text"
MyPrint #FileNo, "Third Text", "Fourth Text"