有一个旧版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
指示将插入点定位到绝对列号。
问题:如何在保留Print
和Tab
的行为的同时,用自己的函数替换semicolon
?
答案 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 ++,我相信您将需要分两个步骤进行操作。
要替换方法名称(从Print
到MyPrint
),请使用以下模式:
Print\h+(#\w+)
并替换为:
MyPrint \1
Demo。
要用逗号替换分号,可以使用以下模式:
(?: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"