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
シートの最初の X 行をスキップするように Jet に指示する接続文字列またはステートメントに方法はありますか? reader.Read()
そうでない場合、行番号が X より大きい場合にのみ処理する方法はありますか?
ファイル全体を配列に読み取ってそこから解析するか、ファイルの内容を新しいcsvファイルにコピーすることでおそらく可能であることはわかっていますが、それを回避してjet/adoを介して行う方法がある場合は、はるかに好むでしょうそれ!
(adoクエリに解決策sql
があるかもしれないとタグ付けされています)sql