在分隔符

时间:2015-06-25 13:53:55

标签: csv command-line vbscript

我有一个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

我拍摄的内容是否可能?

1 个答案:

答案 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

链接:ADOConnectionStringGetStringschema.ini

更新评论:

如今,找不到&#34;提供商的最可能原因是&#34;错误是您以64位模式运行脚本。查看here选项。

当然,可能没有安装所请求的提供商。检查可用的提供者/驱动程序

  1. 创建一个空的.udl文件并启动它。这将打开一个&#34;数据链接属性&#34;列出所有提供程序的对话框,允许您连接到所有可访问的数据源。好处:连接字符串将写入.udl文件(虽然采用UTF-16编码),可以复制/粘贴到您的代码中。
  2. ODBC数据源管理员可以以类似的方式使用
  3. .UDL & Dialogs

    快速测试:可能使用Text驱动程序:

    sCs = Join(Array( _
            "Driver={Microsoft Text Driver (*.txt; *.csv)}" _
          , "Dbq=" & oFS.GetParentFolderName(WScript.ScriptFullName) _
          , "Extensions=asc,csv,tab,txt" _
    ), ";")
    

    (对我来说,这表明将正在运行的系统更改为最新的硬件和操作系统版本对你有好处)