Bu VBScript İşlevi ne yapıyor

VBScript'te bir fonksiyonum var, ne yapıyor? C# 2.0 kullanarak nasıl basitleştirebilirim.

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

Teşekkürler!

1
VBScript değil, bana çok farklı hayvanlara VB.NET gibi görünüyor.
katma yazar Tim, kaynak

3 cevap

.NET String.Format yöntemi.

Kıvrımlı ayraçlı yer tutucuları (örneğin "{0} {1}" ) olan bir biçim dizesi alır ve her birini sırasıyla args 'dan karşılık gelen bir değerle değiştirir. dizi. İşlevde herhangi bir değişiklik yapmadan String.Format için değiştirebilirsiniz.

4
katma
Bunun string.format ile ilgisi yok. Regex desen eşleştirmesi kullanıyor.
katma yazar Bradley Uffner, kaynak
Haklısın, özür dilerim.
katma yazar Bradley Uffner, kaynak
Bazı kod örneği ile önerebilir misiniz? Teşekkürler
katma yazar Manoj Singh, kaynak
@BradleyUffner string.format'ın çok basitleştirilmiş bir sürümünü uygulamak için regex pattern eşleştirmesini kullanıyor
katma yazar Jon, kaynak

Belirtilen regex deseniyle eşleşen ve onu işleve iletilenlerin listesinden başka bir dizeyle değiştiren her şey için bir dize arıyor.

Regex ile (sınırlı) becerilerime dayanarak, giriş dizesinde 1 veya 2 basamaklı sayıları aramak ve bunları işleve iletilen bir dizideki değerle değiştirmek gibi görünüyor.

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

Ve bağlantılı sayfadan kullanım örneği.

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
katma

Kodu C# 'ye dönüştürdüm

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

lütfen bana herhangi bir sorun bildirin

1
katma