【问题标题】:querying csv with vbs用vbs查询csv
【发布时间】:2012-08-05 11:56:59
【问题描述】:

有一个像这样的 csv 文件,我可以使用下面的代码轻松读取它。但正如您所见,csv 中有多个 name1、group1、status1、name2、group2 等列。每个用户将有不同数量的列。我想知道是否有一种方法可以在我调用objRecordset.Fields.Item("Group1") 的地方使用通配符@ 类似("Group%") 或者我是否可以自动增加数字直到找不到记录为止

用户名、域、站点、MCO、名称1、组1、状态1、名称2、组2、状态2、名称3、组3、状态3 Paolina,AA,Athens,Greece,Adobe Acrobat Pro,ACROBAT009,Live,,,,,, George,AA,Athens,Greece,SpotFire 2.20,SPOTFIRE220,Live,,,,,,,

option explicit

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001

Dim strPathtoTextFile, objConnection, objRecordSet, objNetwork
Dim wshshell, Username

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

Set objNetwork = CreateObject("WScript.Network")
userName = objNetwork.UserName

strPathtoTextFile = "C:\Hunter\vbs\" 'must have a trailing \

objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & strPathtoTextFile & ";" & _
          "Extended Properties=""text;HDR=YES;FMT=Delimited"""

objRecordset.Open "SELECT * FROM Users.txt where [user name] like '" & UserName & "'", _
          objConnection, adOpenStatic, adLockOptimistic, adCmdText
Do Until objRecordset.EOF
    Wscript.Echo "Name: " & objRecordset.Fields.Item("User Name")
    Wscript.Echo "Group: " & objRecordset.Fields.Item("Group1")
    Wscript.echo "Status:" & objRecordset.Fields.Item("Status1")
    objRecordSet.MoveNext
Loop

【问题讨论】:

    标签: csv vbscript adodb


    【解决方案1】:

    您的示例表明最大组数是最后一个字段,所以也许:

    objRecordset.Open "SELECT * FROM Users.txt where [user name] like '" _
          & UserName & "'", _
          objConnection, adOpenStatic, adLockOptimistic, adCmdText
    MaxNum = _
          Replace(objRecordset.Fields(objRecordset.Fields.Count-1).Name,"Status","")
    Do Until objRecordset.EOF
        Wscript.Echo "Name: " & objRecordset.Fields.Item("User Name")
        For i=1 to MaxNum
           Wscript.Echo "Group: " & objRecordset.Fields.Item("Group" & i)
           Wscript.echo "Status:" & objRecordset.Fields.Item("Status" & i)
        Next
        objRecordSet.MoveNext
    Loop
    

    我没有测试过,但总体思路应该成立。

    【讨论】:

    • 为什么要使用.recordCount来计算.Fields.Count?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    相关资源
    最近更新 更多