このVBScript関数は何ですか

私はVBScriptに関数を持っていますが、何をしていますか? C#2.0を使ってどうすれば簡単にできますか?

Function FormatString(format, args)
    Dim RegExp, result

    result = format

    Set RegExp = New RegExp 

    With RegExp
        .Pattern = "\{(\d{1,2})\}"
        .IgnoreCase = False
        .Global = True
    End With

    Set matches = RegExp.Execute(result)

    For Each match In matches   
        dim index
        index = CInt(Mid(match.Value, 2, Len(match.Value) - 2))
        result = Replace(result, match.Value, args(index))
    Next
    Set matches = nothing
    Set RegExp = nothing

    FormatString = result
End Function

ありがとう!

1
VBScriptではなくVB.NETのように見えます。非常に異なる動物です。
追加された 著者 Tim,

3 答え

.NETの簡易版のように見える String.Format メソッド。

中括弧で区切られたプレースホルダ(例: "{0} {1}" )で書式文字列を取り、それぞれを args アレイ。機能を変更せずに String.Format のためにスワップアウトすることができます。

4
追加された
これはstring.formatとは関係ありません。正規表現のパターンマッチングを使用しています。
追加された 著者 Bradley Uffner,
あなたは正しいです、私は謝罪します。
追加された 著者 Bradley Uffner,
いくつかのコードサンプルでお勧めしますか?ありがとう
追加された 著者 Manoj Singh,
@ BradleyUffner正規表現のパターンマッチングを使用して、string.formatの非常に単純化されたバージョンを実装しています
追加された 著者 Jon,

それは、指定された正規表現パターンと一致するすべての文字列を検索し、関数に渡された正規表現パターンのリストから他の文字列に置き換えます。

私の(限られた)スキルに基づいて正規表現では、入力文字列内の1桁または2桁の数字を探していて、関数に渡される配列の値に置き換えているようです。

Here is some documentation from MSDN. http://msdn.microsoft.com/en-us/library/hs600312.aspx

It could be replaced with String.Format as documented here http://msdn.microsoft.com/en-us/library/system.string.format.aspx

そしてリンクされたページからの使用例。

DateTime dat = new DateTime(2012, 1, 17, 9, 30, 0); 
string city = "Chicago";
int temp = -16;
string output = String.Format("At {0} in {1}, the temperature was {2} degrees.",
                              dat, city, temp);
Console.WriteLine(output);
// The example displays the following output:
//    At 1/17/2012 9:30:00 AM in Chicago, the temperature was -16 degrees.   
1
追加された

コードをC#に変換しました。

static string FormatString(string format, string[] args)
{
    System.Text.RegularExpressions.Regex RegExp;
    System.Text.RegularExpressions.MatchCollection matches;
    string result;

    result = format;

    RegExp = new System.Text.RegularExpressions.Regex(@"\{(\d{1,2})\}", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    matches = RegExp.Matches(result);

    foreach (System.Text.RegularExpressions.Match match in matches)
    {
        int index;

        index = Convert.ToInt32(match.Value.Substring(1, match.Value.Length - 1));
        result = result.Replace(match.Value, args[index]);
    }

    matches = null;
    RegExp = null;

    return result;
}

問題があれば教えてください

1
追加された