我需要读取CSV文件,我可以使用的唯一语言是VBscript.
我目前只是打开文件并拆分逗号,它工作正常,因为字段中没有任何引用的逗号.但我知道这是一个非常脆弱的解决方案.
那么,我可以使用VBscript模块这样的东西吗?在某个地方得到一个经过试验和测试的正则表达式,只能用逗号分隔而不是用引号括起来?
任何建议都感激不尽.
VBScript没有可与Perl相媲美的模块系统.但是,您可以使用ADO打开CSV文件,并像数据库表一样访问它们.代码将是这样的:
(有趣的评论仅仅是为了修复SO破解的VB语法突出显示)
Dim conn ''// As ADODB.Connection Dim rs ''// As ADODB.RecordSet Dim connStr ''// As String Dim dataDir ''// As String dataDir = "C:\" '" connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dataDir & ";Extended Properties=""text""" Set conn = CreateObject("ADODB.Connection") conn.Open(connStr) Set rs = conn.Execute("SELECT * FROM [data.txt]") ''// do something with the recordset WScript.Echo rs.Fields.Count & " columns found." WScript.Echo "---" WScript.Echo rs.Fields("Col1Name").Value If Not rs.EOF Then rs.MoveNext WScript.Echo rs.Fields("Col3Name").Value End If ''// explicitly closing stuff is somewhat optional ''// in this script, but consider it a good habit rs.Close conn.Close Set rs = Nothing Set conn = Nothing
创建一个schema.ini
准确描述输入的文件是最佳选择.如果你不这样做,你强制文本驱动程序猜测,如果它猜错了,所有的赌注都会关闭.在schema.ini
必须驻留在你的数据是同一个目录.
我看起来像这样:
[data.txt] Format=Delimited(;) DecimalSymbol=. ColNameHeader=True MaxScanRows=0 Col1=Col1Name Long Col2=Col2Name Long Col3=Col3Name Text Col4=Col4Name Text
并与此data.txt
:
a;b;c;d 1;2;"foo bar";"yadayada" 1;2;"sample data";"blah"
我得到这个输出:
C:\>cscript -nologo data.vbs 4 columns found. --- 1 sample data C:\>
值得一读这方面:关于 MSDN 关于文本文件的大量ADO.