tl;博士
跳到下面的问题。
背景
在我的代数数学程序中,可以按以下形式输入公式(作为 VB6 代码行)。 (字符串内的空格将被忽略):
formula1$ = "SUM (a,b,c)"
formula2$ = "SUM (x,y,z)"
formula3$ = "PRODUCT (a,x)"
formula4$ = "PRODUCT ((SUM (a,b,c)) , (SUM (x,y,z))) "
formula5$ = "PRODUCT (" + formula1$ +") , (" + formula2$ +")"
(我知道,对于用户来说有点麻烦,但在处理长公式时平衡更好)。
formula5$
的内容与formula4$
的内容相同。
有一个变量
formula5_descr$
很有用,在检查/打印时它描述了 formula5$
的规格,因此:
debug.print formula5_descr$ ' --> "PRODUCT (" + formula1$ +") , (" + formula1$ +")"
formula5_descr$
的代码可以手动生成。然而这很难做到,也不能指望用户这么做。
我想让用户输入更简单的代码形式,例如:
formula5$ = "PRODUCT (formula1$ ) , ( formula2$ )"
然后可以修改程序以解析公式字符串
"PRODUCT (formula1$ ) , ( formula2$ )"
,并用相关字符串的内容(即formula1$
和formula2$
)替换任何字符串引用(即SUM (a,b,c)
和SUM (x,y,z)
)。
问题
问题来了 - 在 VB6 中如何用字符串变量的内容替换字符串内的字符串变量的名称?
理想情况下会有一个函数
REVEAL()
这样:
REVEAL("formula1$") --> "SUM (a,b,c)"
注意 MS Access 中存在针对 VBA 的解决方案这一事实并不意味着该解决方案自动适用于 VB6。它们是相似但不同的语言,VB6 的安装不一定会安装与 MS Access 相同的组件。
你想要做的是所谓的字符串插值,而vb6已经足够老了,没有any支持该功能。您需要执行其他操作,例如使用字典将
formula1$
这样的键映射到 SUM (a,b,c)
这样的值,然后手动将键替换为最终字符串中的值。
使用字典按键存储公式。 之后,只需将公式名称替换为它们的值即可。
Option Explicit
Dim dictFormulas As New Dictionary
Private Sub Command1_Click()
ReadLines Text1.Text
PrintFormulas
End Sub
Private Sub ReadLines(strText As Variant)
Dim i As Long
Dim strLines() As String
strLines = Split(strText, vbNewLine)
For i = LBound(strLines) To UBound(strLines)
AddFormula strLines(i)
Next
End Sub
Private Sub AddFormula(strLine As String)
Dim strFormulaName As String
Dim strFormulaValue As String
Dim strItem As Variant
Dim strFormulaVect() As String
strFormulaVect = Split(strLine, "=")
strFormulaName = Trim(strFormulaVect(0))
strFormulaValue = Trim(strFormulaVect(1))
For Each strItem In dictFormulas.Keys
strFormulaValue = Replace(strFormulaValue, strItem, CStr(dictFormulas(strItem)))
Next
dictFormulas.Add strFormulaName, strFormulaValue
End Sub
Private Sub PrintFormulas()
Dim strItem As Variant
For Each strItem In dictFormulas.Keys
Debug.Print strItem & "=" & CStr(dictFormulas(strItem))
Next
End Sub
字典是 Microsoft 脚本库 (SCRRUN.DLL) 的一部分,必须在项目 > 参考中添加为参考