2

如此处所述(复合格式字符串: http: //msdn.microsoft.com/en-us/library/txafckwd.aspx)适用于 VB.NET 和 C#.NET(.NET Framework)。

但是,我在任何地方都没有看到 VB6 的这种情况,谷歌也没有返回任何有用的东西。

这是我想做的.NET Framework(VB.NET和C#.NET)的一些示例代码,但在VB6中:

在 VB.NET 中:

Dim myName As String = "Fred" 
String.Format("Name = {0}, hours = {1:hh}", myName, DateTime.Now)

在 C# 中:

string myName = "Fred";
String.Format("Name = {0}, hours = {1:hh}", myName, DateTime.Now);

如果有人知道如何在 VB6 中执行此操作,或者它是否存在于 VB Classic 的某个隐藏角落,我很想知道。谢谢。

4

4 回答 4

7

这个功能应该做你想做的

'Example:
Debug.Print FS("Name = {0}, Time = {1:hh:mm}, Number={2:#.00}", "My name", Now(), 12.5)

Function FS(strText As String, ParamArray values())
    Dim i As Integer
    i = 0

    For Each Value In values
        Dim intStart As Integer
        intStart = InStr(strText, "{" & i & "}")
        If intStart < 1 Then intStart = InStr(strText, "{" & i & ":")

        If intStart > 0 Then
            Dim intEnd As Integer
            intEnd = InStr(intStart, strText, "}")

            Dim strFormatedValue As String

            Dim intFormatPos As Integer
            intFormatPos = InStr(intStart, strText, ":")
            If intFormatPos < intEnd Then
                Dim strFormat As String
                strFormat = Mid(strText, intFormatPos + 1, intEnd - intFormatPos - 1)
                strFormatedValue = Format(Value, strFormat)
            Else
                strFormatedValue = Value
            End If

            strText = Left(strText, intStart - 1) & _
                      strFormatedValue & _
                      Mid(strText, intEnd + 1)

        End If
        i = i + 1
    Next

    FS = strText

End Function
于 2012-10-22T14:51:14.590 回答
2

VB6 中最接近 NET 复合格式的是运行时内置的Format函数。
但是,它与提供相同的功能相去甚远。
在我看来,除非你有非常简单的要求,否则你就不走运了。

于 2012-10-22T12:51:47.167 回答
1

您最好考虑模拟 C/C++,例如 sprintf。如果您在 google 上搜索“vb6 call sprintf”,这里有一些有用的文章,例如这篇文章。

于 2012-10-22T13:02:57.540 回答
0

如果这不仅仅是 VB6 函数中内置的学术问题,请替换和格式化。两者都没有 .NET Format 功能强大。您可以轻松滚动自己。为您编写自定义函数并将其添加到您重复使用的方法的 .bas 文件中。然后,您可以通过添加 .bas 文件将您喜欢的方法添加到项目中。这是一个类似于 .NET Format 函数的函数。

Public Function StringFormat(ByVal SourceString As String, ParamArray Arguments() As Variant) As String
   Dim objRegEx As RegExp  ' regular expression object
   Dim objMatch As Match   ' regular expression match object
   Dim strReturn As String ' the string that will be returned

   Set objRegEx = New RegExp
   objRegEx.Global = True
   objRegEx.Pattern = "(\{)(\d)(\})"

   strReturn = SourceString
   For Each objMatch In objRegEx.Execute(SourceString)
      strReturn = Replace(strReturn, objMatch.Value, Arguments(CInt(objMatch.SubMatches(1))))
   Next objMatch

   StringFormat = strReturn

End Function

例子:

StringFormat("您好 {0}。我想见见 {1}。他们都为 {2} 工作。{0} 为 {2} 工作了 15 年。", "Bruce", "Chris", “凯尔”)

这个和类似的答案在这里,VBScript:格式化字符串的最简单方法是什么?

于 2012-10-22T16:14:34.203 回答