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 1024Schema.iniの詳細はググるとたくさん出てくるので省略。ここが詳しいかも。 この例はファイル"TEST.csv"の文字コードがUTF-8の場合。CharacterSetにUTF-8のコードページ番号である65001を設定。
接続:
あとは、TADOTableとかTADODataSetなどを使えば普通のデータベース感覚でCSVが使用できる。TDataSourceを介してTDBGridに接続するのもOK。
ただし、ODBCテキストドライバはUPDATEとDELETEをサポートしていないので、リードオンリー用途と思った方がいいかも。
さもなくば、TJvCsvDataSetを使う(リンク先PDF)か。