如何在VBScript中对版本号字符串数组进行排序?

时间:2012-05-18 20:47:19

标签: svn vbscript build-automation

我正在使用SVN和标签来标记版本,每个标签目录都以版本号命名。这很好,但现在我正在使用Visual Build Pro自动化这个构建过程。

我正在使用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相关。

1 个答案:

答案 0 :(得分: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

获取cFormat类