2012-10-22 51 views
2

如此處所述(複合格式字符串:http://msdn.microsoft.com/en-us/library/txafckwd.aspx)適用於VB.NET和C#.NET框架)。VB6中的複合字符串格式(即:使用{0},{1}和{2}格式化的字符串)

但是,我還沒有看到任何地方的VB6,谷歌沒有返回任何有用的東西。

這裏是我想要做的.NET框架(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經典的一些隱蔽的角落存在,我很想知道。謝謝。

回答

2

在VB6中最接近NET複合格式的東西是運行時內置的Format函數。
但是,它提供的功能相差甚遠。
在我看來,除非你有非常簡單的要求,否則你運氣不好。

1

在模擬C/C++(例如sprintf)方面你會做得更好。如果您是谷歌的「vb6 call sprintf」,例如,如one,有一些有用的文章。

6

這個函數應該做你想做的

'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 
+0

感謝,這肯定是最短的功能我已經看到了不復合函數格式化(這是一件好事),因爲我已經看過一個約5-8倍的時間。上投票。 –

0

如果這不只是建立在VB6功能的學術問題進行替換和格式。它們都不如.NET格式的功能強大。你可以輕鬆推出自己的。編寫自定義函數並將其添加到您重複使用的方法的.bas文件中。然後,您可以通過添加.bas文件將您最喜歡的方法添加到項目中。這是一個可以用於.NET格式函數的函數。

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年。「‘布魯斯’,‘克里斯’,‘凱爾’)

這和類似的答案在這裏,VBScript: What is the simplest way to format a string?

+0

謝謝您的貢獻,但是,如果您沒有意識到,RegExp obj在VB6中不存在,我認爲您需要導入它或從參考列表中創建對它的引用,但是,您不會由於可以在任何具有Internet Explorer 5.1(或5.5)或更高版本的計算機上使用,因此無需在包裝中分發導入。我忘記了需要思考的引用的名稱,並且不確定是否已經將上述內容寫入該導入或基於內置的.NET支持編寫了上述內容。 –

+0

正如我在找到其他文章的鏈接後發現的那樣,對這個庫的引用是這樣的:Microsoft VBScript Regular Expressions 5.5。我想這畢竟是5.5(而不是5.1)。 –

+0

@ Ethan-SoldMySoulToMicrosoft我不記得引用,因爲我這樣做只是作爲另一個問題的快速示例,但它是在VB6中完成的。試圖向你展示,雖然內置函數不存在,但編寫一個自定義函數來完成你所要求的是很容易的。 – jac