CSVファイルは様々なツールで扱えるフォーマットですが、これを扱うコンポーネントやクラスは標準で用意されているものを使うというよりも、それぞれの開発者が必要に応じて作成した入出力用のモジュールを使ったり、あるいは誰かが作ったものを利用したりというケースや、ODBC Text Driver などを使うケースが多かっただろうと思います。
しかし最近の Delphi / C++Builder 向けの機能を利用すると、スマートに CSV を扱えます。

利用可能な方法と、その比較

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 ConnectorsDelphi / C++Builder / RAD Studio 10.2 Tokyo および 10.3 Rio に追加インストールでき、リモートデータベース以外に FireDAC の接続性を拡張するコンポーネントです。Professional 以上のすべての商用エディションでご利用いただけます。

トライアル版は、製品ページからのお申し込みで無料でご利用いただけます。

Anonymous