顯然,我在嘗試使用schema.ini來定義csv時缺少一些東西。我的代碼似乎忽略了schema.ini。schema.ini來定義csv
的SCHEMA.INI被放置在相同的子目錄的CSV和如下:
[excel.csv]
Format = CSVDelimited
Col1=TSP text width 17
Col2=Svc text width 17
Col3=DTM text width 3
其由「標題」行和一個「數據」行是如下CSV數據:
"TSP","Svc","DTM"
"006958581","006927792","rdt"
我嘗試使用的代碼如下:
Imports System.Data.OleDb
Module Module1
Sub Main()
Dim Csv_in_name As String = "excel.csv"
Dim Csv_in_path As String =
"C:\Documents and Settings\Administrator\My Documents" + _
"\Visual Studio 2008\Projects\csv_reader\csv_reader\bin\Debug"
Dim cn As New OleDbConnection
Dim adapter As New OleDbDataAdapter
Dim cmd As New OleDbCommand
Dim dtset As New DataSet
Dim dt As New DataTable
Dim cnstr As String =
"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data source = " + _
Csv_in_path + "\; Extended Properties=""Text;HDR=No;FMT=Delimited"""
cn.ConnectionString = cnstr
cn.Open()
cmd.Connection = cn
cmd.CommandText = "Select * from " + Csv_in_name
adapter.SelectCommand = cmd
adapter.Fill(dtset, "MyTable")
dt = dtset.Tables("MyTable")
cn.Close()
dt.WriteXml(Csv_in_path + "\data.xml")
End Sub
End Module
當HDR=No
在T他連接字符串,代碼似乎忽略schema.ini由字段分隔符名稱證明。兩行被解釋爲數據和XML數據如下:
<?xml version="1.0" standalone="yes" ?>
<NewDataSet>
<MyTable>
<F1>TSP</F1>
<F2>Svc</F2>
<F3>DTM</F3>
</MyTable>
<MyTable>
<F1>006958581</F1>
<F2>006927792</F2>
<F3>rdt</F3>
</MyTable>
</NewDataSet>
當HDR=Yes
,符合市場預期SCHEMA.INI被忽略,字段通過在CSV的第一行正確標記。 XML數據如下:
<?xml version="1.0" standalone="yes" ?>
<NewDataSet>
<MyTable>
<TSP>006958581</TSP>
<Svc>006927792</Svc>
<DTM>rdt</DTM>
</MyTable>
</NewDataSet>
由於SCHEMA.INI存在於這兩種情況下,我會預期在第一個實例,但具有相同字段分隔符中,因爲這些第二個實例2行數據的是schema.ini中的定義。爲什麼schema.ini被忽略?
您知道如何格式化您的問題,以便更好地顯示代碼和文件內容。 – 2011-06-02 15:05:45
而這一個是怎麼來的VB.NET從一些其他網站(MSDN論壇,3.5年前發佈!)複製? http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/ba46bd29-984c-4431-825f-a9cb0b57db2b/ – 2011-06-02 15:17:12