我正在编写一个应用程序来处理csv
文件并将其上传到远程服务器。应用程序需要相当灵活,允许列的自定义映射。
我遇到的第一个大障碍是读取文件,许多文件的数据从第 5 行开始,顶部有一些垃圾数据,示例如下:
Account: 123
----------
Date: 15/12/2011
----------
Type: Full
----------
Column1,Column2,Column3,Column4
Data1,Data2,Data3,Data4
Data1,Data2,Data3,Data4
理想情况下,我想要一种方法来获取第一行数据,但这可能会很棘手。
我正在使用带有连接字符串的 Jet 连接到文件:
If (_extension = ".csv") Then
_excelconn.ConnectionString = String.Format( _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}" & _
"; Extended Properties=""text;HDR=No;FMT=Delimited""", _directory)
End If
然后通过代码获取数据:
If ValidateAll() Then
Try
ConnectExcel() ' Opens connection to csv/excel file
_excelcommand.CommandText = "SELECT * FROM [" & _excelsheets(_selsheet) & "]" ' Currently selected sheet, returns SELECT * FROM [1234#csv]
_excelcommand.Connection = _excelconn
_reader = _excelcommand.ExecuteReader()
While _reader.Read()
'MsgBox(_reader(0).ToString)
'Dostuff
End While
Catch ex As Exception
_errors.Add(ex.ToString)
retval = -1
End Try
End If
这是一个例外,因为我无法访问reader(2)
第一行。
连接字符串或语句中是否有任何方法SELECT
告诉 Jet 跳过工作表的前 X 行?如果没有,有没有办法只处理reader.Read()
行号是否高于 X?
我知道将整个文件读取到数组并从那里解析或将文件内容复制到新的 csv 文件可能是可能的,但如果有办法避免这种情况并通过 jet/ado 完成,那么我更喜欢那!
(标记sql
为可能sql
在 ado 查询中有解决方案)