Q&A
【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ファイルです
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2017/11/03 07:51
2017/11/03 07:55