2019年12月15日

FDBatchでCSVファイル入出力(2)

これは Delphi Advent Calendar 2019 の 15 日目の記事の続きです。

(2)CSV出力
使うコンポーネントは、下記になります。
FDMemTable1に、(1)で作成したデータを事前に取り込んでいます。
FDBatchMoveDataSetReader1のDataSetに、FDMemTable1を設定。
FDBatchMoveTextWriter1のFileNameに出力先のファイル名を設定。
FDBatchMove1の、ReaderにFDBatchMoveDataSetReader1を、WriterにFDBatchMoveTextWriter1を設定します。
今回は、FDMemTable1の全フィールドを落とすことにするので、Mappingsの定義はなしで行います。
こちらも、IDE上で実行可能です。
ソースで行うのであれば、
      FDBatchMove1.Execute;
となります。


今回は、DataSetは、TFDMemTableを使っていますが、TFDTableにすることも可能です。
パフォーマンスも魅力ですが、IDE上で実行できるので、データベースのデータをちょっとCSVファイルに落としたい時などに便利だと思います。

以上

<Delphi 10.3 Update 3で作成しています>


posted by しんくそふと at 00:00| Comment(0) | TrackBack(0) | 開発TIPS

FDBatchでCSVファイル入出力(1)

これは Delphi Advent Calendar 2019 の 15 日目の記事です。

FCBatchMoveで、CSVファイルの入出力が思いのほかパフォーマンスが良かった(自作ライブラリ比)ので、纏めてみました。
日本郵便のサイトから住所の郵便番号(CSV形式)のデータを、TFDMemTableに、項目を絞って取り込む処理(1)と、取り込んだTFDMemTableのデータを、CSVファイルに出力する処理(2)について纏めました。
(1つの記事で文字数オーバーになったので、2記事に分割されています)

(1)CSV取り込み
使うコンポーネントは、下記になります。

FDBatchMoveTextReader1が、読み込みCSVの設定、FDBatchMoveDataSetWriter1が、出力先(この場合、FDMemTable1)の設定となる。
FDBatchMove1が、この2つを繋ぐことになる。
住所の郵便番号(CSV形式)は、15項目あるがこのうち7項目(郵便番号と、都道府県名、市区町村名、町域名のカタカナと漢字)を抽出することにする。
まず、事前にFDMemTable1に下記のフィールドを定義する。すべて、string型で、とりあえず余裕を持った長さで設定した。

次に、FDBatchMoveTextReader1の定義を行う。
FileNameプロパティに、住所の郵便番号(CSV形式)で落としたファイル(KEN_ALL.CSVを使いました)を指定します。
プロパティのDataDef内のFiledsを選択し、CSVのフィールドを定義する。

住所の郵便番号(CSV形式)は、15項目あるので、Filedsを15設定する。
取り込むFiledsのみ、きちんと定義した。取り込むデータのみ、DataTypeは、atStringとし、それ以外は、DataTypeは、atOtherにしておく。また、FieldSize、Percisionは、すべて0にしておく。
(FDBatchMoveを選択し、マウス右ボタンでのポップアップメニュー中の”テキスト形式を推測”で、フィールド定義を生成出来るが、意図しない型やサイズが設定されることがあるので、CSVファイルの場合はあまりお勧めしない)
また、DataDefプロパティのRecordFormatプロパティが、rfCommaDoubleQuote(Default値)になっていることを確認する。

FDBatchMoveDataSetWriter1の設定は、DataSetプロパティに、FDMemTable1を設定する。

FDBatchMove1の設定は、Readerプロパティに、FDBatchMoveTextReader1を、Writerプロパティに、FDBatchMoveDataSetWriter1を設定する。この後、Mappingsを開き、下記のように、Readerのフィールドと、Writerのフィールドを紐づける。
(Readerのフィールドと、Writerのフィールドが同名で紐づけられれば、FDBatchMoveを選択し、マウス右ボタンでのポップアップメニュー中の”すべてのマッピングを追加”で、自動で生成も可能)




...more
posted by しんくそふと at 00:00| Comment(0) | TrackBack(0) | 開発TIPS