我有一个CSV文件格式为"标题(年份)"并编写了一个脚本将其转换为" title~ year"每行所以它读取
adam~1999
betty~1983
charlie~2001
david~2004
我需要通过VBScript或命令行找到一种方法来输出按日期排序的文件,以便它可以读取
david~2004
charlie~2001
adam~1999
betty~1983
如果我可以在每行中将日期移到行的前面,那么我可以在命令提示符下使用简单的排序命令,但我不确定是否可以将我的文件转换为
1999~adam
1983~betty
2001~charlie
2004~david
我拍摄的内容是否可能?
答案 0 :(得分:2)
如果使用ADO,.csv文件只是一个可以由SQL操作的数据库表。
演示代码:
Option Explicit
Const adClipString = 2
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim oDb : Set oDb = CreateObject("ADODB.Connection")
Dim sCs : sCs = Join(Array( _
"Provider=Microsoft.Jet.OLEDB.4.0" _
, "Data Source=" & oFS.GetParentFolderName(WScript.ScriptFullName) _
, "Extended Properties=""" & Join(Array( _
"text" _
, "HDR=No" _
, "Delimited=~" _
), ";") & """" _
), ";")
oDb.Open sCs
WScript.Echo oDb.Execute("SELECT * FROM [31052397.txt] ORDER BY [Title]").GetString(adClipString, , vbTab, vbCrLf, "<Null>")
WScript.Echo "-------------------------"
WScript.Echo oDb.Execute("SELECT * FROM [31052397.txt] ORDER BY [Date] DESC").GetString(adClipString, , vbTab, vbCrLf, "<Null>")
oDb.Close
输出:
cscript 31052397.vbs
adam 1999
betty 1983
charlie 2001
david 2004
-------------------------
betty 1983
adam 1999
charlie 2001
david 2004
最小的schema.ini,以帮助提供者发挥其魔力:
[31052397.txt]
Format=Delimited(~)
ColNameHeader=False
Col1=Title Char
Col2=Date Integer
链接:ADO,ConnectionString,GetString,schema.ini。
更新评论:
如今,找不到&#34;提供商的最可能原因是&#34;错误是您以64位模式运行脚本。查看here选项。
当然,可能没有安装所请求的提供商。检查可用的提供者/驱动程序
快速测试:可能使用Text驱动程序:
sCs = Join(Array( _
"Driver={Microsoft Text Driver (*.txt; *.csv)}" _
, "Dbq=" & oFS.GetParentFolderName(WScript.ScriptFullName) _
, "Extensions=asc,csv,tab,txt" _
), ";")
(对我来说,这表明不将正在运行的系统更改为最新的硬件和操作系统版本对你有好处)