在VBScript中对多维数组进行排序 [英] Sort multidimensional array in VBScript

查看:83
本文介绍了在VBScript中对多维数组进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何根据孔尺寸参数排序"多维数组?

How can I "Sort" the multidimensional arrays based on the hole size parameter please?

例如:一个简单的例子是(从文本文件加载):

eg: A simple example would be (Loaded from Text file):

> Liv1.HoleSize[0] = 22 Liv1.HoleX[0] = 250 Liv1.HoleY[0] = -55
> Liv1.HoleSize[1] = 14 Liv1.HoleX[1] = 750 Liv1.HoleY[1] = 0
> Liv1.HoleSize[2] = 22 Liv1.HoleX[2] = 900 Liv1.HoleY[2] = -55

然后必须产生:

> Liv1.HoleSize[0] = 14 Liv1.HoleX[0] = 750 Liv1.HoleY[0] = 0
> Liv1.HoleSize[1] = 22 Liv1.HoleX[1] = 250 Liv1.HoleY[1] = -55
> Liv1.HoleSize[2] = 22 Liv1.HoleX[2] = 900 Liv1.HoleY[2] = -55

推荐答案

由于VBScript没有本机排序,因此您必须进行自己的排序,或者从朋友那里获得一些帮助.

As VBScript has no native sort, you'll have to roll your own sort, or to get a little help from friends.

如果您的任务是按指定顺序将输入文件(如给定的verbatim)排序为输出文件,则 sort.exe 是您的朋友:

If your task is to sort your input file (verbatim as given) to an output file in the specified order, sort.exe is your friend:

  Dim sIn : sIn = "..\data\in00.txt"
  WScript.Echo readAllFromFile(sIn)
  WScript.Echo "-----------"
  Dim sCmd : sCmd = "sort /+19 " & qq(resolvePath(sIn))
  Dim aRet : aRet = goWSLib.Run(sCmd)
  If aRet(0) Then
     ' handle error
  Else
     WScript.Echo aRet(2)
  End If

输出:

================================================================
Liv1.HoleSize[0] = 22 Liv1.HoleX[0] = 250 Liv1.HoleY[0] = -55
Liv1.HoleSize[1] = 14 Liv1.HoleX[1] = 750 Liv1.HoleY[1] = 0
Liv1.HoleSize[2] = 22 Liv1.HoleX[2] = 900 Liv1.HoleY[2] = -55

-----------
Liv1.HoleSize[1] = 14 Liv1.HoleX[1] = 750 Liv1.HoleY[1] = 0
Liv1.HoleSize[0] = 22 Liv1.HoleX[0] = 250 Liv1.HoleY[0] = -55
Liv1.HoleSize[2] = 22 Liv1.HoleX[2] = 900 Liv1.HoleY[2] = -55

================================================================

如果这样可以解决您的问题,请这样说,我们可以在库函数中讨论支持代码.

If something like that solves your problem, just say so, and we can talk the support code in the library functions.

但是,如果您必须将输入文件解析为二维数组,那么最好的朋友就是断开ADODB记录集的连接:

If, however, you have (to) parse(d) the input file into a two-dimensional array, the best friend you can get is a disconnectes ADODB recordset:

  Dim aData : aData = Split(Join(Array( _
          "22 250 -55" _
        , "14 750 0"   _
        , "22 900 -55" _
        , "11 222 333" _
  )))
  Dim afData(3, 2)
  Dim nRows : nRows = UBound(afData, 1)
  Dim nCols : nCols = UBound(afData, 2)
  Dim i, r, c
  For i = 0 TO UBound(aData)
      r = i \   nRows
      c = i Mod (nCols + 1)
      afData(r, c) = aData(i)
'      WScript.Echo i, r, c, aData(i)
  Next
  For r = 0 To nRows
      For c = 0 To nCols
          WScript.StdOut.Write vbTab & afData(r, c)
      Next
      WScript.Echo
  Next
  WScript.Echo "-----------------"
  Dim oRS : Set oRS = CreateObject("ADODB.Recordset")
  For c = 0 To nCols
      oRS.Fields.Append "Fld" & c, adInteger
  Next
  oRS.Open
  For r = 0 To nRows
      oRS.AddNew
      For c = 0 To nCols
          oRS.Fields(c).value = afData(r, c)
      Next
      oRS.UpDate
  Next
  oRS.Sort = "Fld0"
  WScript.Echo oRS.GetString(adClipString, , vbTab, vbCrLf)
  WScript.Echo "-----------------"
  oRS.Sort = "Fld2"
  WScript.Echo oRS.GetString(adClipString, , vbTab, vbCrLf)

输出:

========================================
        22      250     -55
        14      750     0
        22      900     -55
        11      222     333
-----------------
11      222     333
14      750     0
22      250     -55
22      900     -55

-----------------
22      250     -55
22      900     -55
14      750     0
11      222     333

========================================

再次:如果这看起来很有希望,我们可以讨论如何根据您的需求调整/简化这种概念验证代码.

Again: if that looks promising, we can discuss how to adapt/streamline this proof of concept code to your needs.

这篇关于在VBScript中对多维数组进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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