読者です 読者をやめる 読者になる 読者になる

dbGo(ADO)を使ってODBC経由でCSVファイルをパースする

前準備:

Windowsが64bit版の場合は、コントロールパネルの「ODBC (32ビット)」ではなく、32bit版の"C:\Windows\SysWOW64\odbcad32.exe"を実行する。
ユーザーDSNかシステムDSNに"Microsoft Text Driver"が含まれているか確認。

接続:

OLE DB プロバイダーは「Microsoft OLE DB Provider ODBC Drivers」を選択。
接続文字列はこんな感じ。
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=Text Files;DBQ=G:\;DefaultDir=G:\;DriverId=27;FIL=text;MaxBufferSize=2048;PageTimeout=5;"
DBQの値がテキストファイルが存在するフォルダ。DefaultDirはDBQと合わせる。

フィールド定義:

ファイルと同じフォルダにSchema.iniを作成すると、CSVファイルのフィールド情報などを詳細に定義できる。
[TEST.csv]
ColNameHeader=True
Format=CSVDelimited
CharacterSet=65001
Col1=user_id Integer
Col2=user_name Char Width 32
Col3=notes Char Width 1024
Schema.iniの詳細はググるとたくさん出てくるので省略。ここが詳しいかも。 この例はファイル"TEST.csv"の文字コードUTF-8の場合。CharacterSetにUTF-8のコードページ番号である65001を設定。

接続:

あとは、TADOTableとかTADODataSetなどを使えば普通のデータベース感覚でCSVが使用できる。
TDataSourceを介してTDBGridに接続するのもOK。
ただし、ODBCテキストドライバはUPDATEとDELETEをサポートしていないので、リードオンリー用途と思った方がいいかも。
さもなくば、TJvCsvDataSetを使う(リンク先PDF)か。