从CSV文件导入,如何跳过第一个X行
问题描述:
我正在编写一个应用程序来处理并将csv
文件上传到远程服务器。 应用程序需要相当灵活,允许自定义列映射。从CSV文件导入,如何跳过第一个X行
的第一大障碍我来是读取文件,许多文件有数据开始行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
因为有可能是在ADO查询中sql
溶液)
答
发现了大量的实验和搜索之后的答案,转移到表适配器,下面的代码:
Private _filepath As String
Private _directory As String
Private _filename As String
Private _extension As String
Private _selsheet As Integer
Private _skiprows As Integer
Private _data As New DataTable
Private _excelconn As New OleDbConnection
//Private _reader As OleDbDataReader
Private _excelcommand As New OleDbCommand
Private _excelta As New OleDbDataAdapter
_excelcommand.CommandText = "SELECT * FROM [" & _excelsheets(_selsheet) & "]"
_excelcommand.Connection = _excelconn
_excelta.SelectCommand = _excelcommand
_data = New DataTable
_excelta.Fill(_skiprows, Int32.MaxValue, _data)
For i = 0 To _data.Columns.Count - 1
If _data.Rows(0).Item(i).ToString <> "" And IsNothing(_data.Columns(_data.Rows(0).Item(i).ToString)) Then
_data.Columns.Item(i).ColumnName = _data.Rows(0).Item(i).ToString
End If
Next
_data.Rows.RemoveAt(0) //removes first data row containing labels
有在搜索中有几个例子可能是有趣的:http://*.com/search?q=skip+first+rows+read – Fionnuala 2012-08-03 19:32:01