2019年12月15日

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を選択し、マウス右ボタンでのポップアップメニュー中の”すべてのマッピングを追加”で、自動で生成も可能)




あとはプログラムで、
      FDBatchMove1.Execute;
とすれば良いのだが、IDE上でも実行が可能になっている。
FDMemTable1のActiveをTrueにしておき、FDBatchMove1選択、マウス右クリックで下記メニューを出し、"実行"選択で、実行される。

下記のような感じになります。

(2)CSV出力 に続きます。



posted by しんくそふと at 00:00| Comment(0) | TrackBack(0) | 開発TIPS
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/186918224
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック