2

VB.NET および C#.NET (.NET Framework)については、こちら (複合フォーマット文字列: http://msdn.microsoft.com/en-us/library/txafckwd.aspx ) で説明されているとおりです。

しかし、私はVB6でこれをどこにも見たことがなく、Googleは有用なものを何も返しませんでした.

.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複合フォーマットに最も近いのは、ランタイムに組み込まれているフォーマット関数です。
ただし、同じ機能を提供することにはほど遠いです。
私の意見では、非常に単純な要件がない限り、運が悪いです。

于 2012-10-22T12:51:47.167 に答える
1

sprintf などの C/C++ をエミュレートするという観点から考えたほうがよいでしょう。「vb6 call sprintf」でググると、便利な記事がいくつかあります。たとえば、 this oneなどです。

于 2012-10-22T13:02:57.540 に答える
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( "Hello{0}。{1}に会ってほしい。どちらも{2}で働いている。{0}は{2}で15年間働いている。"、 "Bruce"、 "Chris"、 「カイル」)

これと同様の答えがここにあります、VBScript:文字列をフォーマットする最も簡単な方法は何ですか?

于 2012-10-22T16:14:34.203 に答える