使用VB脚本进行自然排序 [英] Natural Sorting using VB script

查看:82
本文介绍了使用VB脚本进行自然排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用自然排序对以下项目进行排序:

I want to sort below items using natural sorting:

"Z1","Z3","Z2","Z20","Z10"

"Z1","Z3","Z2","Z20","Z10"

排序后,我期望下面的顺序:

After sorting, I am expecting the order below:

"Z1","Z2","Z3","Z10","Z20"

"Z1","Z2","Z3","Z10","Z20"

当我尝试使用数组列表时,

When I tried using array list,

Set oAlist=CreateObject("System.Collections.ArrayList")
oAlist.sort

我得到了基于ASCII的排序结果:

I am getting a sorting result based on ASCII:

Z1,Z10,Z2,Z20,Z3

Z1,Z10,Z2,Z20,Z3

请帮助我了解如何使用vb脚本进行自然排序

Please help me on how to do this natural sorting using vb script

推荐答案

理论上请参见此处(点击链接! ).实用演示

For theory see here (follow the links!). Practical demo

记录集:

Option Explicit

Const adInteger          =          3 ' 00000003
Const adVarChar          =        200 ' 000000C8

Dim sInp : sInp = "Z1,Z3,Z2,Z20,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)

ArrayList

ArrayList

Option Explicit

Dim sInp : sInp = "Z1,Z3,Z2,Z20,Z10,E1,D3,C2,B20,A10"
Dim aInp : aInp = Split(sInp, ",")
WScript.Echo "A:", 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)

这篇关于使用VB脚本进行自然排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆