用字符串变量的内容替换字符串内的 VB6 字符串变量的名称?

问题描述 投票:0回答:2

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 string-interpolation
2个回答
0
投票

你想要做的是所谓的字符串插值,而vb6已经足够老了,没有any支持该功能。您需要执行其他操作,例如使用字典将

formula1$
这样的键映射到
SUM (a,b,c)
这样的值,然后手动将键替换为最终字符串中的值。


0
投票

使用字典按键存储公式。 之后,只需将公式名称替换为它们的值即可。

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) 的一部分,必须在项目 > 参考中添加为参考

© www.soinside.com 2019 - 2024. All rights reserved.