在 VBScript 中对多维数组进行排序

2024-01-04

如何根据孔大小参数对多维数组进行“排序”?

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

> 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 没有本机排序,因此您必须自行排序,或者从朋友那里获得一些帮助。

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

  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

output:

================================================================
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

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

如果类似的东西解决了您的问题,请直接说出来,我们可以讨论库函数中的支持代码。

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

  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)

output:

========================================
        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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 VBScript 中对多维数组进行排序 的相关文章

  • VBScript 从 Shell 获取结果

    Set wshShell WScript CreateObject WSCript shell wshshell run runas 如何获取结果并显示在 MsgBox 中 您将需要使用 WshShell 对象的 Exec 方法而不是 Ru
  • 将一维数组转换为二维数组并加入 PHP [重复]

    这个问题在这里已经有答案了 我有这个一维数组 array1 Array coupon code gt GTY777R coupon description gt Credito 5 USD array2 二维数组 Array 0 gt Ar
  • 在 Drupal 中对视图进行排序时忽略“The”

    当用户在 Drupal 站点中对视图进行排序时 如何忽略 The 你有没有尝试过调查视图自然排序模块 http drupal org project views natural sort 取自上面链接的模块页面 提供排序的视图过滤器 以更自
  • Javascript - 使数组索引 toLowerCase() 不起作用

    我试图将所有数组索引设置为小写字符串 但它不起作用 我在这里查看了其他答案并尝试了他们的解决方案 例如使用toString 添加之前toLowerCase但它不起作用 这很奇怪 我创建了一个问题的jsfiddlehere https jsf
  • 如何从对象数组中删除所有重复项?

    This is a large array of objects e g let totalArray id rec01dTDP9T4ZtHL4 fields user id 170180717 user name abcdefg even
  • 按元素聚合数组

    Spark scala 相当新 我想知道是否有一种简单的方法以按列方式聚合 Array Double 这是一个例子 c1 c2 c3 1 1 1 0 1 0 3 4 1 2 1 0 0 0 4 3 2 1 0 0 0 0 0 0 2 3 1
  • for 循环内的 Promise 的 setTimeout

    我想做的是这样的 循环数据集合 对于每个数据元素调用 API 等待 Promise 失败或解析 暂停 30 秒 然后对下一个数据元素再次执行此操作 直到没有任何内容可以迭代集合 最后显示 完成 消息 到目前为止 这是我编写的代码 在其他问题
  • 对列表进行排序,同时保持一些元素始终位于顶部

    我们有一个List
  • 帕斯卡三角形定位

    我编写了一个打印出帕斯卡三角形的Java程序 但是我不知道如何正确定位它 方案1 public class Triangle public static void main System out println nTriangle int
  • 在数组/对象中查找项目的最快方法

    在 Javascript AS3 中查找列表或对象中项目的索引的最快方法是什么 我对这两种语言都提出这个要求 因为这两种语言的语法相似 假设 myArray one two three myObject one 1 two 2 three
  • 执行数组内的函数

    是否可以从数组内部执行匿名函数 也在数组内部定义 return execute function logic 或者我应该在外面定义它然后再调用它 从技术上讲 您可以将该函数括在括号中并像这样调用它 return function retur
  • 在php中对带有特殊字符的多维数组进行排序

    我有一个多维数组 我按字母顺序排序 但问题是 带有丹麦语特殊字符 它们应该按该顺序排序 但不会按该顺序返回 这是我的数组 部分已删除 Array 0 gt Array Name gt John 1 gt Array Name gt Pate
  • Unix 排序实用程序:使用十六进制字节值作为分隔符

    我想知道是否可以使用十六进制值作为 Unix 的分隔符sort公用事业 基本上我想做一些类似的事情 sort t x00
  • “未捕获的类型错误:Array.removeAt() 不是函数”,

    I got a Array removeAt 的 MSDN 文档 https msdn microsoft com en us library bb383998 aspx功能 但是当我尝试时 我收到此错误 未捕获的类型错误 Array re
  • 在Python 3中将二进制字符串转换为字节数组

    尽管有很多相关的问题 但我找不到任何符合我的问题的问题 我想更改二进制字符串 例如 0110100001101001 转换成字节数组 同一个例子 b hi 我试过这个 bytes int i for i in 011010000110100
  • 如何使用批处理文件实现快速排序?

    虽然通常情况下 为工作选择正确的语言是件好事 但有时尝试用一种非常不合适的语言做一些事情可能会很有启发 它可以帮助您更好地理解问题 也许你不知道have按照您认为的方式解决它 它可以帮助您更好地理解该语言 也许它支持的功能比您想象的还要多
  • 如何按单个整数字段对 JSON 进行排序? [复制]

    这个问题在这里已经有答案了 我有以下 JSON title title order 0 order 9 order 2 JSON 包含很多字段 我如何根据字段对它们进行排序order field 我一直在寻找 Nodejs 中内置的东西 但
  • 如何按值删除数组中的多个项目?

    我正在尝试做一个removeAll 函数 它将删除具有该特定值 而不是索引 的数组的所有元素 当我们对循环进行任何更改时 棘手的部分就出现了 索引往往会移动 使其很难像我们想要的那样工作 并且每次更改时都重新启动循环 这在大数组上效率非常低
  • 从java中的字符串数组中删除空值

    java中如何从字符串数组中删除空值 String firstArray test1 test2 test4 我需要像这样没有 null 空 值的 firstArray String firstArray test1 test2 test4
  • 如何使用 PHP 获取列中的所有值?

    我一直在到处寻找这个问题 但仍然找不到解决方案 如何从 mySQL 列中获取所有值并将它们存储在数组中 例如 表名称 客户 列名称 ID 名称 行数 5 我想获取此表中所有 5 个名称的数组 我该如何去做呢 我正在使用 PHP 我试图 SE

随机推荐