2011-10-28 182 views
1

我有一個VBScript函數,它在做什麼?我如何使用C#2.0來簡化它。什麼是VBScript函數做什麼

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 

謝謝!

+0

看起來像VB.NET對我來說,不是的VBScript - 非常不同的動物。 – Tim

回答

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; 
} 

請讓我知道的任何問題

4

看起來像.NET String.Format方法的簡化版本。

它採用帶大括號分隔佔位符的格式字符串(例如"{0} {1}"),並將每個依次替換爲args數組中的對應值。您可能可以將其替換爲String.Format,而不會對功能進行任何更改。

+0

你可以請一些代碼示例建議!謝謝 –

+0

這與string.format無關。它使用正則表達式模式匹配。 –

+3

@BradleyUffner它使用正則表達式模式匹配來實現一個非常簡化版本的string.format – Jon

1

它正在搜索匹配指定正則表達式模式的所有字符串,並將其替換爲傳入該函數的列表中的其他字符串。

基於我的(有限)正則表達式的技能,它似乎在輸入字符串中尋找1或2位數字,並將其替換爲傳入該函數的數組中的值。

以下是來自MSDN的一些文檔。 http://msdn.microsoft.com/en-us/library/hs600312.aspx

它可以用的​​String.Format來代替,這裏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.