2012-05-18 60 views
0

我正在使用SVN和標籤來標籤發行版,每個標籤目錄都使用版本號命名。這很好,但現在我正在使用Visual Build Pro自動執行此構建過程。如何在VBScript中對版本號字符串數組進行排序?

我使用svn ls來檢索標籤列表(當然,它不會按排序順序返回),然後使用Split()進行排序以找到最新的列表來檢出並建立。這全部在VBScript中執行。

麻煩的是,作爲字符串,版本號不能按數字順序排序,而是按字母順序排列。給你:

1.0.1 
1.0.10 
1.0.2 
etc 

我需要的是:

1.0.1 
1.0.2 
1.0.10 
etc 

在.NET中很容易,因爲我可以創造一個List(Of Version)和排序,但我不能這樣做,在VBScript。我可以使用Set verObj = Create.Object("System.Version")創建一個版本類型,但這不是它自己的好處。

我已經通過這裏的相關問題有一個很好的看,但沒有任何與Windows或VBScript相關。

回答

0

由於VBScript沒有本地排序,因此您必須使用其他技術:具有適當排序功能的Javascript/JScript,斷開連接的ADO記錄集或帶有一點廣告素材格式的.NET ArrayList。爲了證明最後一個選項:

Dim aTests : aTests = Array(_ 
     "1.0.1" _ 
    , "1.0.10" _ 
    , "1.0.2" _ 
) 
    WScript.Echo Join(aTests, vbCrLf) 
    Dim oFmt : Set oFmt = New cFormat 
    Dim alVers : Set alVers = CreateObject("System.Collections.ArrayList") 
    Dim sVers 
    For Each sVers In aTests 
     Dim aParts : aParts = Split(sVers, ".") 
     alVers.Add oFmt.formatArray("{0,4}.{1,4}.{2,4}", aParts) 
    Next 
    alVers.Sort 
    WScript.Echo "---------------" 
    WScript.Echo Join(alVers.ToArray(), vbCrLf) 
    WScript.Echo "---------------" 
    For Each sVers In alVers 
     WScript.Echo Replace(sVers, " ", "") 
    Next 

輸出:

1.0.1 
1.0.10 
1.0.2 
--------------- 
    1. 0. 1 
    1. 0. 2 
    1. 0. 10 
--------------- 
1.0.1 
1.0.2 
1.0.10 

here

+0

偉大的東西獲取cFormat類。這就是訣竅。 –

相關問題