在编译程序时资源文件的大小会对应用程序的大小产生直接影响,合理的将资源文件简便化是一种编程规范。假如,我们有一个过程会产生两种或以上的结果,我们在资源文件中就会编写出两条资源,
假如:"您得到的是 结果1" 和 "您得到的是 结果2",如果使用参数替换法,两条资源文件可以压缩成一条,即
"您得到的是 %1",之后我们在程序中进行对
"%1" 的替换,替换成相应结果既可。但是,在 VB 中只有
Replace() 这个函数,它一次只能替换一个参数(可处于多个位置),下面我们对它进行一些完善,是之能满足我们替换多参数的要求。具体的说明函数中已注释。
对函数的引用实例:
Public Function ArgReplace()
Function ArgReplace(ByVal Expression As String, _
Argv() As String, Optional ArgFormat As String = "%#", _
Optional ArgLBound As Long = 1) As String
'/*ArgFormat 参数表示一种参数格式,"#"代表数字通配符,默认格式为 %1 %2...
'ArgLBound 参数表示输入数组的最低边界,也是"#"所代表通配符的最底限,函数
'运行错误则返回原表达式,否则则返回替换后的表达式*/
ArgReplace = Expression
On Error GoTo ErrExit
Dim j As Long, sExpression As String
sExpression = Expression
If LBound(Argv()) >= ArgLBound Then
'/*这里要说明一点,在替换通配符"#"和替换参数标识时需要按照
'从大到小的顺序替换,否则可能出现错误,例如: 我们有一个需要
'进行参数替换的表达式 "%1 %12",如果按照从大到小的顺序替换
'后应为 "参数1 参数12",但如果按照从小到大的顺序,则 "%1" 会
'被先替换为参数1,而后表达式中已经不存在 "%12",函数终止,其得
'到的结果会是 "参数1 参数1 2"(参数1和字符2中间没有空格,这里
'写成这样是为了容易区分)*/
For j = UBound(Argv()) To LBound(Argv()) Step -1
ArgReplace = Replace$(sExpression, Replace$(ArgFormat, _
"#", CStr(j)), Argv(j))
sExpression = ArgReplace
Next
End If
ErrExit:
End Function
Argv() As String, Optional ArgFormat As String = "%#", _
Optional ArgLBound As Long = 1) As String
'/*ArgFormat 参数表示一种参数格式,"#"代表数字通配符,默认格式为 %1 %2...
'ArgLBound 参数表示输入数组的最低边界,也是"#"所代表通配符的最底限,函数
'运行错误则返回原表达式,否则则返回替换后的表达式*/
ArgReplace = Expression
On Error GoTo ErrExit
Dim j As Long, sExpression As String
sExpression = Expression
If LBound(Argv()) >= ArgLBound Then
'/*这里要说明一点,在替换通配符"#"和替换参数标识时需要按照
'从大到小的顺序替换,否则可能出现错误,例如: 我们有一个需要
'进行参数替换的表达式 "%1 %12",如果按照从大到小的顺序替换
'后应为 "参数1 参数12",但如果按照从小到大的顺序,则 "%1" 会
'被先替换为参数1,而后表达式中已经不存在 "%12",函数终止,其得
'到的结果会是 "参数1 参数1 2"(参数1和字符2中间没有空格,这里
'写成这样是为了容易区分)*/
For j = UBound(Argv()) To LBound(Argv()) Step -1
ArgReplace = Replace$(sExpression, Replace$(ArgFormat, _
"#", CStr(j)), Argv(j))
sExpression = ArgReplace
Next
End If
ErrExit:
End Function
Sub Main()
Sub Main()
'/*我们假定有一个资源文件,其中的字符串表中有编号 1001 到 1011 的资源,
'且其内容为: 1001 CW 1002 1003 L 1004 o 1005 v 1006 e 1007 1008 W
'1009 Y 1010 C 1011 !,并且有 1000 为 %1%2%3%4%5%6%7%8%9%10%11*/
Dim ArrArg(1 To 11) As String, i As Integer
For i = 1 To 11
ArrArg(i) = LoadResString(1000 + i)
Next
MsgBox ArgReplace(LoadResString(1000), ArrArg()), vbInformation, "LoVE"
'//其运行结果为 "CW Love WYC!"
End Sub
'/*我们假定有一个资源文件,其中的字符串表中有编号 1001 到 1011 的资源,
'且其内容为: 1001 CW 1002 1003 L 1004 o 1005 v 1006 e 1007 1008 W
'1009 Y 1010 C 1011 !,并且有 1000 为 %1%2%3%4%5%6%7%8%9%10%11*/
Dim ArrArg(1 To 11) As String, i As Integer
For i = 1 To 11
ArrArg(i) = LoadResString(1000 + i)
Next
MsgBox ArgReplace(LoadResString(1000), ArrArg()), vbInformation, "LoVE"
'//其运行结果为 "CW Love WYC!"
End Sub