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

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

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

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

Q&A

解決済

1回答

563閲覧

【エラーが特定できません】CSVデータをデータテーブルに文字列として取り込みたい

hazuki

総合スコア8

VB.NET

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

0グッド

1クリップ

投稿2017/11/02 06:14

【CSVデータをデータテーブルに文字列として取り込みたい】という質問を前回し、iniファイルを使えば出来そうなことを確認したので、今回その方法を試してみました。

テキストファイルの名前がその都度変わるので、1つのiniファイルを埋め込まれたリソースとして持っておき、それを毎回ローカルにコピーし、CSVデータも名前を固定の物に変えてコピーしたものを同じディレクトリに入れています。

ファイル作成、コピーまではうまくいくのですが、データテーブルに入れようとするところで【エラーが特定できません】と落ちてしまいます・・・分かる方がいましたらよろしくお願いします。

vb.net

1Private Function Fun_CopyFile() As String 2 3 '現在のコードを実行しているAssemblyを取得 4 Dim myAssembly As System.Reflection.Assembly = _ 5 System.Reflection.Assembly.GetExecutingAssembly() 6 '指定されたマニフェストリソースを読み込む 7 Dim sr As New System.IO.StreamReader( _ 8 myAssembly.GetManifestResourceStream("STR.schema.ini"), _ 9 System.Text.Encoding.GetEncoding("shift-jis")) 10 '内容を読み込む 11 12 Dim s As String = sr.ReadToEnd() 13 '後始末 14 sr.Close() 15 16 17 '書込むファイルを指定する(2番目の引数をfalseにすることで新規ファイルを作成する) 18 Dim iniFileName As String = "schema.ini" 19 Dim csvFileName As String = "STR.csv" 20 Dim Directory As String = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 21 Dim iniFilePath As String = Directory & "\" & iniFileName 22 Dim csvFilePath As String = Directory & "\" & csvFileName 23 24 System.IO.File.Copy(Me.IEdt_CSVファイル.Text, csvFilePath, True) 25 Dim sw As StreamWriter = New StreamWriter(iniFilePath, False, System.Text.Encoding.GetEncoding("shift-jis")) 26 27 Try 28 'ファイルに書込む 29 sw.Write(s) 30 sw.Flush() 31 sw.Close() 32 33 Catch ex As Exception 34 35 End Try 36 37 Return csvFilePath 38 39 End Function

vb.net

1 Public Shared Function ToCsvIn(ByVal Str_FilePath As String) As DataTable 2 3 'CSVファイルのあるフォルダ 4 Dim csvDir As String = System.IO.Path.GetDirectoryName(Str_FilePath) 5 'CSVファイルの名前 6 Dim csvFileName As String = System.IO.Path.GetFileName(Str_FilePath) 7 8 '接続文字列 9 Dim conString As String = _ 10 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ 11 + csvDir + ";Extended Properties=""text;HDR=No;FMT=Delimited""" 12 Dim con As New System.Data.OleDb.OleDbConnection(conString) 13 14 Dim commText As String = "SELECT * FROM [" + csvFileName + "]" 15 Dim da As New System.Data.OleDb.OleDbDataAdapter(commText, con) 16 17 'DataTableに格納する 18 Dim dt As New DataTable 19 20 Try 21 da.Fill(dt) '★ここでエラーが特定できませんでおちます 22 Catch ex As Exception 23 Debug.WriteLine(ex.Message) 24 End Try 25 26 Return dt 27 28 End Function 29
[STR.csv] Format=CSVDelimited ColNameHeader=false MaxScanRows=0 CharacterSet=Shift_JIS textacterSet=932 Col1=a1 text Col2=a2 text Col3=a3 text . . . というようなiniファイルです

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

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

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

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

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

guest

回答1

0

ベストアンサー

Schema.ini の記述が間違っています。以下の記述がありますが、

[STR.csv] ...省略 CharacterSet=Shift_JIS textacterSet=932 ...省略

"CharacterSet=" の値は"Shift_JIS"ではなくコードページである932をセットしてください。
また、"textacterSet"と言うエントリは存在しません。結果として以下のようになります。

[STR.csv] Format=CSVDelimited ColNameHeader=false MaxScanRows=0 CharacterSet=932 Col1=a1 text Col2=a2 text Col3=a3 text . . .

投稿2017/11/03 01:34

dodox86

総合スコア9183

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

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

hazuki

2017/11/03 07:51

ありがとうございます!エラーが出ずにできました!
dodox86

2017/11/03 07:55

ご報告ありがとうございます。よかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問