如何排序在VBScript版本号字符串数组?(How to sort array of versio

2019-06-24 14:06发布

我使用SVN和标签标记的版本,用版本号命名的每个标签目录。 这是一切优秀的,但现在我在使用Visual构建临自动化的构建过程的过程。

我使用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。

Answer 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

从获取cFormat类在这里



文章来源: How to sort array of version number strings in VBScript?