0

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 ではそれができません。を使用して Version 型を作成できますSet verObj = Create.Object("System.Version")が、それだけではダメです。

ここで関連する質問をよく調べましたが、Windows または VBScript に関連するものはありません。

4

1 に答える 1

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

ここから cFormat クラスを取得します

于 2012-05-18T21:35:16.527 に答える