質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

4回答

9078閲覧

CSV形式のファイルをDatatableにInsertする

xxx8

総合スコア41

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

1クリップ

投稿2018/08/15 02:20

編集2018/08/15 02:46

前提・実現したいこと

カンマ区切り(,)かつフィールドをダブルクォート(")で囲まれているCSV形式のファイルを
DDataTableにInsertしたいです。

発生している問題・エラーメッセージ

以下のサイトを参考に実装しました。
CSV形式のファイルをDataTableや配列等として取得する

デバック中に該当のDataTableを右クリックして「ウォッチ式に追加」→「虫眼鏡マーク」
→「DataSetビジュアライザー」にて、中身を確認したところ文字化けを起こしていました。

念のためDataGridViewに表示して確認しましたがが同様に文字化けを起こしていました。
※Jet Provider、ODBC Provider両方でこの文字化けが起きました。

問題の考察

文字コードが関係しているのかと勝手に思っています。

今回、読み込む元となったCSV形式のファイルの文字コードは「UTF-8 BOM付き」です。

読み込む元の文字コードが変わる恐れはなさそうなのですが、できればどんな文字コードでも
対応できるようにしたいです。

また、DataTableには1行目をヘッダとして登録したいです。

なお、今回CSV形式のファイルをDataTableにInsertする機能を実装したいという背景には
CSV形式のファイル内のデータに対して並び替え、データの抽出を行いたいためというのがあるためです。

解決できず、とても困っています。
どうぞ、よろしくお願い申し上げます。

【追記】Jet Provider使用

'CSVファイルのあるフォルダ
Dim csvDir As String = "C:\test"
'CSVファイルの名前
Dim csvFileName As String = "test.csv"

'接続文字列
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 dt As New DataTable
da.Fill(dt)

補足情報(FW/ツールのバージョンなど)

Visual Studio 2015
VB.NET

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

Jet Provider使用

JET を使う場合、何もしないと CSV ファイルの文字コードが Shift_JIS でない限りダメです。

文字コードが UTF-8 など SHift_JIS 以外の場合の対応策は、schema.ini というファイルを作り、それに文字コードを指定して CSV ファイルと同じディレクトリに配置することです。

また、JET プロバイダはデフォルトで最初の 8 行のデータをスキャンして各列のデータ型を推測しますが、その際、予期しない型に推測されてしまうことも schema.ini で型を指定することとにより防ぐことができます。

投稿2018/08/15 05:03

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

昔同じ問題に直面してTextFieldParserを使いました。

投稿2018/08/15 11:28

tekka

総合スコア514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Jet Providerって古い気がするので、もしかしたら、Shift-JIS Only と思って検索したら、

CSV パーサー と言うページがありました。 やっぱり、S-JISみたいです。
対応方法は、"schema.ini というファイルを作り、それに文字コードを指定..." とありました。他に、TextFieldParser とか使う方法もありますね。 詳細は、こちらを見て頂いた方が早いかと。


時々、CSVファイルも扱いますが、大抵は手抜きの力業で済んでいる...。

投稿2018/08/15 02:51

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xxx8

2018/08/15 03:01

ご回答ありがとうございます。 早速、TextFieldParserを使用して実装してみようかと思います。
guest

0

CSVに限らずエンコードが異なる場合は例えば以下のようなサイトを参考にして、ファイルの読み込み時にエンコードの種別を指定して読み込む。

目的の文字コードに合ったEncodingオブジェクトを取得する

これで良いのでは?

投稿2018/08/15 02:39

MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xxx8

2018/08/15 02:49

回答ありがとうございます。 とても初歩的な質問かと思いますが、お許しください。 「【追記】Jet Provider使用」にソースを記載いたしました。 「目的の文字コードに合ったEncodingオブジェクトを取得する 」 を実装する場合、どの部分で適切なEncodingオブジェクトを選択して テキストファイルを読み込まないといけないのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問