CSVファイルは様々なツールで扱えるフォーマットですが、これを扱うコンポーネントやクラスは標準で用意されているものを使うというよりも、それぞれの開発者が必要に応じて作成した入出力用のモジュールを使ったり、あるいは誰かが作ったものを利用したりというケースや、ODBC Text Driver などを使うケースが多かっただろうと思います。
しかし最近の Delphi / C++Builder 向けの機能を利用すると、スマートに CSV を扱えます。
Table of Contents
利用可能な方法と、その比較
Delphi / C++で利用可能なCSVの取り扱い方法、特徴を比較した表を作ってみました。
自分で実装する (TStringList などを使って) | 誰かが実装したものを使う | ODBC Text Driver | Enterprise Connectors CSV Component | |
---|---|---|---|---|
必要なコード | ? | ? | 中 | 小 |
ローカルファイル | OK | OK | OK | OK |
http/ftp | 実装次第 | 実装次第 | NG | OK |
Amazon S3 | 実装次第 | 実装次第 | NG | OK |
Google Drive | 実装次第 | 実装次第 | NG | OK |
Sharepoint | 実装次第 | 実装次第 | NG | OK |
利用方法 | 実装次第 | 実装次第 | ODBC経由でTMemTable | TFDQueryで自由に操作可能 |
データ操作 | 実装次第 | 実装次第 | SQL | SQL |
データとUIのバインド | 実装次第 | 実装次第 | TDataSource | TDataSource |
従来型の方法はいずれもストレージ上のCSVファイルを扱うだけなのに対して、Enterprise Connectors の CSV コンポーネントでは、WebサーバやFTPサーバ上のファイル、さらにはクラウドストレージ上のファイルも利用できます。従来の方式ではHDDやSSD上のCSVファイルを利用するので、ローカルにないデータは別途ローカルにコピーしなければなりませんでした。その作業すらも省略可能である点は Enterprise Connectors の CSV コンポーネントの特徴の一つです。
とはいいつつ、極論すれば、たかだかCSVファイルという見方もあります。では他に何が違うのでしょうか?
実際に使ってみる
特徴を理解するには使ってみることが大事です。ここではすでに Enterprise Connectors の CSV コンポーネントがインストール済みとして説明します。製品版をお持ちでない場合はトライアル版でお試しいただけます。トライアル版の入手方法は記事の最後で説明します。
データエクスプローラでコンポーネントを設定して接続する
IDEの画面右上ペインにあるデータエクスプローラの FireDAC を開くと、CDATA CSV Data Source が確認できます。ここに接続定義を作成して作業開始します。
トライアル版を申し込み済みの方は、トライアル版コンポーネントとダウンロードリンクの一覧が記載された CSV ファイルをお持ちと思いますので、ここではそのファイルを参照するように URI で指定します。
設定が完了したら、「テスト」をクリックして CSV ファイルが参照できることを確認します。エラーが出なければ設定は完了です。
接続の確立を確認した後に、データエクスプローラ上で、作成した接続定義をドリルダウンしていくと、CSVファイルが用いられたテーブルが見えていることがわかります。
CSVファイルを操作する
VCLでもFireMonkeyでも良いのですが、アプリケーションのデザインフォームにデータエクスプローラからテーブルをドラッグ&ドロップで配置してみてください。すると、FireDAC からのデータベース接続と同じく、TFDConnection と TFDQuery の2つが配置されました。
フォーム上のTFDQuery をダブルクリックしてクエリエディタを開くと SELECT * FROM CData.CSV."FireDAC_Component_DownloadLinks.csv"
というクエリが設定されていますので、[実行]ボタンをクリックしてこのクエリを実行してみます。するとCSVファイルの内容が確かに表示できました。さらに where で絞り込みを行えるかどうかも試してみましょう。where name like ‘%Beta%’ を追加して実行すると、ベータ版のコネクタだけを抽出できました。
CSVファイルを SQL で操作できるというのは非常に不思議な感覚になりますが、どのようなデータソースに対しても SQL での操作性を提供するのが Enterprise Connectors の大きな特徴の一つです。
ひとつ注目していただきたいのは、この一連の操作は、通常のRDBMSに対して行うのと同じということです。Enterprise Connectors は、FireDACという Delphi / C++Builder の標準データアクセスコンポーネントフレームワークを使っています。FireDACの特長のひとつは、複数のデータベースに対して、共通のアクセス方式を提供することです。つまり、Enterprise Connectors によるCSVファイルの扱いは、いつでも他のRDBMS(あるいはEnterprise Connectors でサポートされる他のいずれのデータソース)に切り替え可能であるということです。
文字コードがShift JISのファイルを使用するには?
Enterprise Connectors CSV コネクタはデフォルトでは参照するデータがUnicodeであると想定して動作します。しかし日本国内で用いられるCSVファイルの多くは文字コードにShift JISが用いられています。これを読み込む場合は、接続エディタ上の Otherパラメータに ”charset=Shift-JIS;” という設定を追加します。
ローカルファイル以外のさまざまな保存場所のCSVファイルを扱うには?
この記事の最初のほうでも説明したとおり、Enterprise Connectors CSV コンポーネントはローカルファイルだけではなく、Webサーバ上からダウンロード可能なCSVを直接利用できます。接続可能なリソースは、HTTP/HTTPS, FTP/FTPS などのサーバだけではなく、Amazon S3, Google Drive, Box, Sharepoint などのストレージを参照できます。この詳細は下記のオンラインドキュメントで説明しています。
http://cdn.cdata.com/help/RVD/fire/RSBCSV_p_URI.htm
HTTP/HTTPSやFTP/FTPSで認証が不要なURLで公開されているCSVファイルなら、URLを直接記述するだけで利用できます。このときに文字コードがShift-JISなCSVの場合は、上記のように、Otherパラメータに ”charset=Shift-JIS;”の指定を忘れずに追加します。
ただし本記事は CSV ファイルが扱える件にフォーカスしていますので、これらのオンラインストレージの利用については別の記事で解説いたします。
クラウドストレージの利用が進む中、利用したいデータは様々な場所にあります。そのときのデータ形式の一つとして CSV は、今でもよく使われるフォーマットです。その CSV 自体を容易に扱えるだけではなく、その保存場所へのアクセスすらも容易に可能となる Enterprise Connectors CSV コンポーネントは、案外使いどころが多いかもしれません。
この記事で紹介した内容のまとめ
- Enterprise Connectors CSV コンポーネントは、単にローカルファイルを操作するだけではなく、様々な場所に置かれているCSVファイルを利用できます。
- CSVのデータ操作のために TStringList などで頑張る必要もなく、SQL で操作できます。
トライアル版でお試しください
Enterprise Connectors は Delphi / C++Builder / RAD Studio 10.2 Tokyo および 10.3 Rio に追加インストールでき、リモートデータベース以外に FireDAC の接続性を拡張するコンポーネントです。Professional 以上のすべての商用エディションでご利用いただけます。
トライアル版は、製品ページからのお申し込みで無料でご利用いただけます。