タイトル : Re^3: CSVを読み込みたい 投稿日 : 2023/02/19(Sun) 00:31 投稿者 : 魔界の仮面弁士
> > 3) CSV の型を明示指定するための Schema.ini ファイルの配置は行われているのか > すいません、これについては確認方法を検討がつかない状況です。 たとえば、電話番号が数値に変換されてしまうとか、ハイフン区切りの数値が日付として 誤解されてしまうといった状況が発生する場合、列定義を Schema.ini ファイルとして記述します。 ini ファイルはメモ帳等で自作しても良いですが、これを作成するための画面も用意されています。 まず、"C:\Windows\SysWOW64\odbcad32.exe" を実行します。もしくは [コントロール パネル]-[ODBC データ ソースのセットアップ (32 ビット)] からでも呼び出せます。 ユーザー/システム/ファイルいずれかの DNS タブで[追加]を押して、 "Microsoft Text Driver (*.txt; *.csv)" もしくは "Microsoft Text-Treier (*.txt; *.csv)" のいずれかを選択します。 データソース名に任意の名前を付けてから、 [現在のフォルダーを使用する]を Off にして、 [フォルダーの選択]を押して、目標のフォルダーを選択します。 次に[オプション]ボタンを押して[書式の定義]ボタンを押し、 対象の csv が表示されたら、[推量] ボタンで列定義を読み取り、 データ型や列名に誤りがあれば修正します。 正しく設定されると、そのフォルダー内に "schema.ini" ファイルが生成されます。 この設定により、CSV だけでなく、セミコロン区切りやタブ区切り、固定長テキストなどにも対応できます。 "schema.ini" が無い場合は自動判断となりますが、その場合の既定値は、レジストリの HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Jet\4.0\Engines\Text から読み込まれます(Jet 4.0 Provider の場合)。 > > 4) ファイルのパス指定に問題がある。 > これは、ファイルをダイアログで選択しているので間違いはないと思っています。 とは言ったものの、実際には間違っていたようですね。 > だとすると「FilePath」には「(ファイルが置かれているパス)¥TEST.csv」までが > 入っているので、間違いってことですね。 JET Provider の Excel I-ISAM の場合、ブックがデータベース、シートがテーブルという扱いです。 (実際にはシートだけでなく、特定のセル範囲を指定して読み取ることもできますが) それに対して Text I-ISAM の場合、フォルダーがデータベース、ファイルがテーブルという扱いです。 つまり、こうした文字列になるはずです。 「Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\txtFilesFolder\; Extended Properties="text;HDR=Yes;FMT=Fixed";」 「Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\tsvFilesFolder\; Extended Properties="text;HDR=No;FMT=TabDelimited";」 しかし最近の環境であれば、Jet Provider や ACE Provider に頼るよりも、 CSV 読み取り用のライブラリを NuGet した方が使い勝手が良いかも…。 https://www.blakepell.com/blog/csv-to-datatable-in-vb-net-or-c https://tech-and-investment.com/csv1/ https://tech-and-investment.com/csv2/ |