Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting VBS对文本文件的行进行排序_Sorting_Vbscript - Fatal编程技术网

Sorting VBS对文本文件的行进行排序

Sorting VBS对文本文件的行进行排序,sorting,vbscript,Sorting,Vbscript,我正在寻找一种对文本文件的行进行排序的好方法,我不知道是否最好的方法是使用数组。这是我的档案: VW;blue;20000;link VW;blue;21000;link VW;blue;29000;link VW;blue;28000;link VW;blue;22000;link VW;red;20000;link VW;red;28000;link VW;red;30000;link VW;red;21000;link VW;red;26000;link MERCEDES;blue;300

我正在寻找一种对文本文件的行进行排序的好方法,我不知道是否最好的方法是使用数组。这是我的档案:

VW;blue;20000;link VW;blue;21000;link VW;blue;29000;link VW;blue;28000;link VW;blue;22000;link VW;red;20000;link VW;red;28000;link VW;red;30000;link VW;red;21000;link VW;red;26000;link MERCEDES;blue;30000;link MERCEDES;blue;38000;link MERCEDES;blue;40000;link MERCEDES;blue;31000;link MERCEDES;blue;37000;link MERCEDES;red;40000;link MERCEDES;red;40000;link MERCEDES;red;47000;link MERCEDES;red;41000;link MERCEDES;red;44000;link 大众汽车;蓝色20000;链接 大众汽车;蓝色21000;链接 大众汽车;蓝色29000;链接 大众汽车;蓝色28000;链接 大众汽车;蓝色22000;链接 大众汽车;红色20000;链接 大众汽车;红色28000;链接 大众汽车;红色30000;链接 大众汽车;红色21000;链接 大众汽车;红色26000;链接 梅赛德斯蓝色30000;链接 梅赛德斯蓝色38000;链接 梅赛德斯蓝色40000;链接 梅赛德斯蓝色31000;链接 梅赛德斯蓝色37000;链接 梅赛德斯红色40000;链接 梅赛德斯红色40000;链接 梅赛德斯红色47000;链接 梅赛德斯红色41000;链接 梅赛德斯红色44000;链接 我需要重新整理一个文件,对每个品牌的汽车进行分类,蓝色的价格较高,红色的价格较低。(只有这两种颜色)。我要寻找的结果如下:

VW;blue;29000;link VW;blue;28000;link VW;blue;22000;link VW;blue;21000;link VW;blue;20000;link VW;red;20000;link VW;red;21000;link VW;red;26000;link VW;red;28000;link VW;red;30000;link MERCEDES;blue;40000;link MERCEDES;blue;38000;link MERCEDES;blue;37000;link MERCEDES;blue;31000;link MERCEDES;blue;30000;link MERCEDES;red;40000;link MERCEDES;red;40000;link MERCEDES;red;41000;link MERCEDES;red;44000;link 大众汽车;蓝色29000;链接 大众汽车;蓝色28000;链接 大众汽车;蓝色22000;链接 大众汽车;蓝色21000;链接 大众汽车;蓝色20000;链接 大众汽车;红色20000;链接 大众汽车;红色21000;链接 大众汽车;红色26000;链接 大众汽车;红色28000;链接 大众汽车;红色30000;链接 梅赛德斯蓝色40000;链接 梅赛德斯蓝色38000;链接 梅赛德斯蓝色37000;链接 梅赛德斯蓝色31000;链接 梅赛德斯蓝色30000;链接 梅赛德斯红色40000;链接 梅赛德斯红色40000;链接 梅赛德斯红色41000;链接 梅赛德斯红色44000;链接
有什么想法吗?

数据库问题应该用数据库工具(、ODBC、SQL等)来解决。在本演示中():


另请参见:,。

是的,这很容易做到,将所有内容读入锯齿状数组,根据您的偏好将其循环到另一个锯齿状数组中,然后输出。您可以尝试使用断开连接的ADODB记录集进行排序。无论如何,在排序之前,您需要拆分每个字符串以提取一个键字段。好的,谢谢您的帮助,明天我们将尝试它。这是一个带有选项的通用排序例程。与下面使用ADO读取文件的答案不同,这里您读取文件并使用ADO在内存中创建数据库。必须使用VBScript解决吗?这将是一个在公园散步与JScript?这很有趣,我试图安装“Microsoft Access数据库引擎x64”我有一个错误,说我必须卸载我的office x86。因此,我尝试安装“MicrosoftAccess数据库引擎x86”,但出现了一个错误,说明我必须卸载我的Officex64。让我们试试旧版本。我可以安装“MicrosoftAccess数据库引擎x64”2010Release。令人惊讶的是,对7400行的文件进行排序需要0.5秒!非常感谢你Ekkehard Horner!
Option Explicit

Const adClipString = 2

Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
WScript.Echo oFS.OpenTextFile("schema.ini").ReadAll()
WScript.Echo "--------------------------"
Dim oDb : Set oDb = CreateObject("ADODB.Connection")
Dim sCS : sCS = Join(Array( _
                    "Driver=Microsoft Access Text Driver (*.txt, *.csv)" _
                  , "Dbq=" & oFS.GetAbsolutePathName(".") _
                  , "Extensions=asc,csv,tab,txt" _
                ), ";")
WScript.Echo sCS
WScript.Echo "--------------------------"
oDb.Open sCS
Dim sSQL 
For Each sSQL In Array( _
                    "SELECT * FROM [48669323.csv]" _
                  , "SELECT * FROM [48669323.csv] ORDER BY Brand, Color, Price" _
                  , "SELECT * FROM [48669323.csv] ORDER BY Brand, Color, IIF(Color='red', Price * -1, Price)" _
                 )
    WScript.Echo sSQL
    WScript.Echo "--------------------------"
    WScript.Echo oDb.Execute(sSQL).GetString(adClipString, , ",", vbCrLf, "<NULL>")
    WScript.Echo "--------------------------"
Next
oDb.Close    
cscript 48669323.vbs
[48669323.csv]
Format=Delimited(;)
ColNameHeader=False
Col1=Brand Text
Col2=Color Text
Col3=Price Long
Col4=WTF Text

--------------------------
Driver=Microsoft Access Text Driver (*.txt, *.csv);Dbq=C:\Users\eh\tmp;Extensions=asc,csv,tab,txt
--------------------------
SELECT * FROM [48669323.csv]
--------------------------
VW,blue,20000,link
VW,blue,21000,link
VW,blue,29000,link
VW,blue,28000,link
VW,blue,22000,link
VW,red,20000,link
VW,red,28000,link
VW,red,30000,link
VW,red,21000,link
VW,red,26000,link
MERCEDES,blue,30000,link
MERCEDES,blue,38000,link
MERCEDES,blue,40000,link
MERCEDES,blue,31000,link
MERCEDES,blue,37000,link
MERCEDES,red,40000,link
MERCEDES,red,40000,link
MERCEDES,red,47000,link
MERCEDES,red,41000,link
MERCEDES,red,44000,link

--------------------------
SELECT * FROM [48669323.csv] ORDER BY Brand, Color, Price
--------------------------
MERCEDES,blue,30000,link
MERCEDES,blue,31000,link
MERCEDES,blue,37000,link
MERCEDES,blue,38000,link
MERCEDES,blue,40000,link
MERCEDES,red,40000,link
MERCEDES,red,40000,link
MERCEDES,red,41000,link
MERCEDES,red,44000,link
MERCEDES,red,47000,link
VW,blue,20000,link
VW,blue,21000,link
VW,blue,22000,link
VW,blue,28000,link
VW,blue,29000,link
VW,red,20000,link
VW,red,21000,link
VW,red,26000,link
VW,red,28000,link
VW,red,30000,link

--------------------------
SELECT * FROM [48669323.csv] ORDER BY Brand, Color, IIF(Color='red', Price * -1, Price)
--------------------------
MERCEDES,blue,30000,link
MERCEDES,blue,31000,link
MERCEDES,blue,37000,link
MERCEDES,blue,38000,link
MERCEDES,blue,40000,link
MERCEDES,red,47000,link
MERCEDES,red,44000,link
MERCEDES,red,41000,link
MERCEDES,red,40000,link
MERCEDES,red,40000,link
VW,blue,20000,link
VW,blue,21000,link
VW,blue,22000,link
VW,blue,28000,link
VW,blue,29000,link
VW,red,30000,link
VW,red,28000,link
VW,red,26000,link
VW,red,21000,link
VW,red,20000,link

--------------------------