ルールを無視したCSVファイルをDataTableとして取得するには

解決


おも  2007-10-28 04:27:57  No: 137973

お世話になっております<(_ _)>

検索して見つけたTipsを参考にしながら、Jet ProviderでCSVファイルをデータテーブルに読み込んでいます。VB2005です。
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
'CSVファイルのあるフォルダ
Dim csvDir As String = strCsvPath(事前に定義)
'CSVファイルの名前
Dim csvFileName As String = strCsvFileName(事前に定義)

'接続文字列
Dim conString As String = _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
    + csvDir + ";Extended Properties=""text;HDR=No;FMT=Delimited"""
Dim con As New System.Data.OleDb.OleDbConnection(conString)

Dim commText As String = "SELECT * FROM [" + csvFileName + "]"
Dim da As New System.Data.OleDb.OleDbDataAdapter(commText, con)

'DataTableに格納する
Dim csvDT As New DataTable
da.Fill(csvDT)
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
しかし、ロードするCSVファイルの中に変な表現のセルがあり、正常にデータテーブルに入れられません。うまくデータテーブルに入れる方法をご教授ください。

CSVファイルをエディタで開くと、基本的には下記のようにデータが羅列されています。

"カレー","店名X","住所","電話番号",,,,,
"中華","店名Y","住所","電話番号",,,,,

しかし時々、下記の2列目のようにダブルクオート(")が挿入されている項目があって、その項目以降のデータが正常にデータテーブルに入れられていません。

"パスタ","店名"Z"","住所","電話番号",,,,,

「"店名""Z"""」と記録していれば問題なく読めるのでしょうけれど、CSVファイルを出力しているのは私では無いのでどうすることもできません(エクセルで開くと正常に読み込んでいます。)

今月からプログラミングを勉強し始めたばかりで、サンプルなどを参考にしながら試行錯誤しております。データベースの知識は一切ありませんが、DataGridViewに表示するのが容易なため、DatatableにCSVをDTに読み込んでおります。後々データベースも勉強して実装していく予定ですので、配列ではなくDatatableにすばやく取得できる方法を探しております。

アドバイスよろしくお願いいたします。


魔界の仮面弁士  2007-10-28 04:36:33  No: 137974

そういった「不正な」CSV は、Jet 等で単純に処理することはできないので、
面倒でも、自力で一文字ずつ解析していくことになるかと思います。

> エクセルで開くと正常に読み込んでいます
ならば、Excel に読ませてから再出力させるとか。


おも  2007-10-28 08:48:33  No: 137975

ご返信ありがとうございます。
ArrayListに渡す方法を見つけましたので、ルールを定義して、とりあえず入れ子にしたにArrayListにいれることができました。


おも  2007-10-28 08:51:25  No: 137976

解決済みチェックを忘れていました<(_ _)>


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加