用自定义函数替换 Print 语句调用
Posted
技术标签:
【中文标题】用自定义函数替换 Print 语句调用【英文标题】:Replace Print statement calls with a custom function 【发布时间】:2019-07-21 01:48:52 【问题描述】:有一个旧版 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";
这里;
指示打印语句不要更改行,Tab
指示将插入点定位到绝对列号。
问题:如何在保留Tab
和semicolon
的行为的同时用我自己的函数替换Print
?
【问题讨论】:
打印和绘图函数是 Basic 的保留,并且在编译器中包含特殊处理,因此您不能简单地交换语句。您需要使用正则表达式搜索源代码以匹配打印并替换为调用您自己的函数。用,
替换裸;
字符以接收它们作为参数,paramarray
将允许您需要的可变数量。
@AlexK。我期望相同,所以我尝试使用正则表达式选项通过 Notepad++ 替换此类语句,但无法创建匹配的正则表达式来替换。
@bjan 你可以从Print #\w+, (?:[^;\r\n]+;?)+
之类的东西开始
我建议您编辑问题以添加 [regex] 和 [notepad++] 标签 and 至少采用一个示例输入并提供所需输出的示例。您可能会以这种方式获得正则表达式解决方案(如果您只使用编辑器,我认为需要分两步完成)。
@AhmedAbdelhameed 谢谢
【参考方案1】:
你应该让你的函数期待一个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"
【讨论】:
这个答案对于使用 Notepad++ 用正则表达式替换文本来说是一个很大的帮助。这也让我偏离了原来的问题,所以我删除了 Edit 1 和 Edit 2以上是关于用自定义函数替换 Print 语句调用的主要内容,如果未能解决你的问题,请参考以下文章