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