【问题标题】:How to sort array of version number strings in VBScript?如何在 VBScript 中对版本号字符串数组进行排序?
【发布时间】:2012-05-18 20:47:19
【问题描述】:

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

【问题讨论】:

    标签: svn vbscript build-automation


    【解决方案1】:

    由于 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 类

    【讨论】:

      猜你喜欢
      • 2016-10-01
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多