• 検索結果がありません。

ループ

ドキュメント内 ASTERIA WARP book 1708 (ページ 33-39)

レイヤーの利用

4.6 ループ

あるコンポーネントが起点となり、それ以降の処理を複数回繰り返すような構成を「ループ」

といいます。

ループの構成にする場合、コンポーネントの「ループを開始」プロパティを「はい」に設定し ます。ループ処理では、ループ開始後、終了コンポーネントやLoopEndコンポーネント(「コ ントロール」タブの「ループを終了します」)にたどり着くとループ開始コンポーネントに戻り、

その後の処理を繰り返します。コンポーネントの「ループを開始」プロパティを「はい」に設定 すると、出力ストリームのマークが、ループを表す3重の囲みになります。

4

4.6 ループ

ループの起点とすることのできる主なコンポーネントには、次のようなものがあります。

FileGet ワイルドカードで指定したファイルを1ファイルず

つループ

FileList あるフォルダのファイル一覧を取得して1情報ずつ

ループ

Mapper 入力レコードを1行ずつループ

RDBGet SELECT結果を指定行数ずつループ

RecordGet CSVファイルを読み込みながら指定行数ずつループ

(常にループ処理となります)

たとえばRDBに対してSELECT文を発行するRDBGetコンポーネントでは、ループを使

用しなかった場合、取得した結果セットをまとめて次のコンポーネントへ渡します。そしてすべ ての結果セットを一度に処理するため、大量データを扱う場合の限界は物理メモリに依存しま す。一方、ループを使用すれば、指定行数ずつ処理させることができますので、少ないメモリ使 用量での実行が可能です。

それでは「CSVファイル処理」フローを新しく修正し、ループを使用するフローを作ってみ ましょう。

1. 左上のツリーペインで「CSVファイル処理」フローを右クリックし、メニューから「複 製」を選択して、フローの名前を「CSVファイル処理(ループ)」(「( )」は全角)としま す(ツリーペインでフローアイテムを上下にドラッグすることで、フローの並び順を変え ることができます)。

2. FileGetの「ファイルパス」プロパティを「input/sample*.csv」とし、「ループを開始」プ ロパティを「はい」に変更します。

3. FilePutの「ファイルパス」プロパティの入力欄をクリックし、入力されているパスの文

字列を削除します。

このフローでは、FileGetで取得するファイル数に応じてループします。用意したサンプル ファイルは2つで、以下のものです。

ループ実行の際には、FilePutも複数回実行されますので、FilePutのファイルパスが固定の 文字列の場合、2度め以降の実行で、同名のファイルとして上書きされます(これは初期設定の 場合であり、「書込み処理」プロパティと「上書きを許可」プロパティの設定で変えることがで きます)。

そこでFilePutの「ファイルパス」プロパティの値を実行時に決定し、保存ファイル名を毎

回変えることにします。具体的には、入力対象ファイルが「input/sample1.csv」の場合に出力

4

4.6 ループ

ファイルパスを「output/loop_sample1.csv」とし、入力対象ファイルが「input/sample2.csv」 の場合に出力ファイルパスを「output/loop_sample2.csv」とします。その方法として、入力対 象ファイルのパスから最後のファイル名を取得し、その文字列の直前に「output/loop_」文字 列を付加したものを、FilePutの「ファイルパス」プロパティの値として設定します。

それには、FilePutの「ファイルパス」プロパティの値をマッパーで設定します。マッパーを ダブルクリックしてマッピングウィンドウを表示し、レイヤーを1つ追加します(ここではレ イヤーの名前を「条件なしレイヤー」とします)。続いて以下に示すマッパー関数とそのプロパ ティ設定を用いて図のようにマッピングします。

Filename 「文字列」タブの「ファイルパスからフォルダ名また はファイル名を取得」

Embed 「文字列」タブの「文字列をフォーマット」

対象 プロパティ 設定値

Filename 取り出す部分 ファイル名

Embed データ output/loop_$input1

マッピングウィンドウの入力側(左側)にあるストリーム変数の「FilePath」は、FileGetコ ンポーネント使用時に使用できる変数で、ここから実際に読み込んだファイルのファイルパスを 取得できます。ループの場合は、ループごとの処理対象ファイルのパスになります。

4

4.6 ループ

Embed関数では、Embed関数に接続した入力値を、予約語「$input1」で参照できます。

Embed関数の入力側には複数の項目を接続することができますので、それらは「$input2」、

「$input3」といった記述で参照できます。

「$input1」の代わりに、「${input1}」という書式で入力することもできます。

このフローを実行すると、新しく次のような2つのCSVファイルが生成されます。

入力ファイルである「sample2.csv」の「注文番号」項目の値には、いずれも「SJS」の文字 列が含まれていませんので、出力された「loop_sample2.csv」ファイルにはレコードデータが 含まれません。このようなとき、FileGetの直後に条件判断のコンポーネントを置くことで、入 力ファイルの「注文番号」項目の値に「SJS」文字列が含まれているファイルのみ処理を行い、

「SJS」文字列が含まれていないファイルは処理しない、といった構成(条件分岐)にすることが

できます。次のセクションで、フローに条件分岐を追加します。

ドキュメント内 ASTERIA WARP book 1708 (ページ 33-39)

関連したドキュメント