用vbs查询csv
问题描述:
有这样一个csv文件,我可以用下面的代码很容易地阅读它。但正如你所看到的,csv中有多个name1,group1,status1,name2,group2等列。每个用户将有不同数量的列。我在想,如果有使用地方我打电话objRecordset.Fields.Item("Group1")
像("Group%")
外卡的方式,或者如果我可以自动递增数,直到没有记录发现用vbs查询csv
用户名,域名,网站,MCO,NAME1组别1,状态1,名称2,第2组,状态2,名称3,组3,STATUS3 保利纳,AA,雅典,希腊,Adobe公司的Acrobat Pro,ACROBAT009,住,,,,,, 乔治,AA,希腊雅典的Spotfire 2.20,SPOTFIRE220 ,住,,,,,,
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
答
你举的例子表明,最大群号码是最后一场,所以也许:
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? – 2012-08-08 11:50:29
你会接受错误吗? :) – Fionnuala 2012-08-08 11:51:53
真棒,这是一种享受。谢了哥们 – chemist 2012-08-08 11:59:01