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

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

ただいまの
回答率

90.40%

  • VB.NET

    1102questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 1,097

hazuki

score 2

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

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

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

Private Function Fun_CopyFile() As String

        '現在のコードを実行しているAssemblyを取得
        Dim myAssembly As System.Reflection.Assembly = _
            System.Reflection.Assembly.GetExecutingAssembly()
        '指定されたマニフェストリソースを読み込む
        Dim sr As New System.IO.StreamReader( _
            myAssembly.GetManifestResourceStream("STR.schema.ini"), _
                System.Text.Encoding.GetEncoding("shift-jis"))
        '内容を読み込む

        Dim s As String = sr.ReadToEnd()
        '後始末
        sr.Close()


        '書込むファイルを指定する(2番目の引数をfalseにすることで新規ファイルを作成する)
        Dim iniFileName As String = "schema.ini"
        Dim csvFileName As String = "STR.csv"
        Dim Directory As String = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
        Dim iniFilePath As String = Directory & "\" & iniFileName
        Dim csvFilePath As String = Directory & "\" & csvFileName

        System.IO.File.Copy(Me.IEdt_CSVファイル.Text, csvFilePath, True)
        Dim sw As StreamWriter = New StreamWriter(iniFilePath, False, System.Text.Encoding.GetEncoding("shift-jis"))

        Try
            'ファイルに書込む
            sw.Write(s)
            sw.Flush()
            sw.Close()

        Catch ex As Exception

        End Try

         Return csvFilePath

    End Function
 Public Shared Function ToCsvIn(ByVal Str_FilePath As String) As DataTable

        'CSVファイルのあるフォルダ
        Dim csvDir As String = System.IO.Path.GetDirectoryName(Str_FilePath)
        'CSVファイルの名前
        Dim csvFileName As String = System.IO.Path.GetFileName(Str_FilePath)

        '接続文字列
        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

        Try
            da.Fill(dt)   '★ここでエラーが特定できませんでおちます
        Catch ex As Exception
            Debug.WriteLine(ex.Message)
        End Try

       Return dt

    End Function
[STR.csv]
Format=CSVDelimited
ColNameHeader=false
MaxScanRows=0
CharacterSet=Shift_JIS
textacterSet=932
Col1=a1 text
Col2=a2 text
Col3=a3 text
.
.
.
というようなiniファイルです
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

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 16:51

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

    キャンセル

  • 2017/11/03 16:55

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

    キャンセル

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

  • ただいまの回答率 90.40%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • VB.NET

    1102questions

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