使用VB脚本进行自然排序
发布时间:2020-12-17 00:02:18 所属栏目:大数据 来源:网络整理
导读:我想使用自然排序对项目进行排序: “Z1”,“Z3”,“Z2”,“Z20”,“Z10” 排序后,我期待以下订单: “Z1”,“Z10”,“Z20” 当我尝试使用数组列表时, Set oAlist=CreateObject("System.Collections.ArrayList")oAlist.sort 我得到一个基于ASCII的排序结果:
我想使用自然排序对项目进行排序:
“Z1”,“Z3”,“Z2”,“Z20”,“Z10” 排序后,我期待以下订单: “Z1”,“Z10”,“Z20” 当我尝试使用数组列表时, Set oAlist=CreateObject("System.Collections.ArrayList") oAlist.sort 我得到一个基于ASCII的排序结果: Z1,Z10,Z2,Z20,Z3 请帮我看看如何使用vb脚本进行自然排序
理论上见
here(点击链接!).实用演示
记录: Option Explicit Const adInteger = 3 ' 00000003 Const adVarChar = 200 ' 000000C8 Dim sInp : sInp = "Z1,Z3,Z10" Dim aInp : aInp = Split(sInp,",") WScript.Echo "A:",Join(aInp) Dim oRS : Set oRS = CreateObject("ADODB.Recordset") oRS.Fields.Append "Word",adVarChar,50 oRS.Fields.Append "Length",adInteger oRS.Open Dim sWord For Each sWord In aInp oRS.AddNew oRS.Fields("Word").value = Left(sWord,1) oRS.Fields("Length").value = CInt(Mid(sWord,2)) oRS.UpDate Next oRS.Sort = "Word,Length" Dim aTable : aTable = oRS.GetRows() ReDim aOut(UBound(aTable,2)) Dim i For i = 0 To UBound(aOut) aOut(i) = aTable(0,i) & aTable(1,i) Next WScript.Echo "B:",Join(aOut) 数组列表 Option Explicit Dim sInp : sInp = "Z1,E1,D3,C2,B20,A10" Dim aInp : aInp = Split(sInp,Join(aInp) Dim oNAL : Set oNAL = CreateObject( "System.Collections.ArrayList" ) Dim oSB : Set oSB = CreateObject( "System.Text.StringBuilder" ) Dim sWord For Each sWord In aInp oSB.AppendFormat_2 "{0}{1,4}",Left(sWord,1),CInt(Mid(sWord,2)) sWord = oSB.ToString() oSB.Length = 0 oNAL.Add sWord Next oNAL.Sort ReDim aOut(oNAL.Count - 1) Dim i For i = 0 To UBound(aOut) aOut(i) = Left(oNAL(i),1) & CInt(Mid(oNAL(i),2)) Next WScript.Echo "B:",Join(aOut) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |