ループ処理
あるコンポーネントが起点となって、それ以降の処理を複数回繰り返すことを「ループ」といいます。ループの構成にする場合、コンポーネントの「ループを開始」プロパティを「はい」に設定する方法と、ループ処理が前提のコンポーネントを使う方法があります。
Mapper コンポーネントでループを設定する
1.ループ構成にしたいフローを表示し、配置済みのMapperコンポーネントを選択する
2.インスペクタで「ループを開始」プロパティの値欄をクリックし、「はい」を選択する
HINT
ループ処理
ループとは、あるコンポーネントが起点になって、それ以降の処理を複数回繰り返すことを指します。ループの開始後、フローは、起点となったコンポーネントに続くコンポーネントに沿って実行され、ループの終了を示すコンポーネント(LoopEnd、ParallelSubFlow、終了コンポーネント)にたどり着くと、ループを開始したコンポーネントに戻り、処理を繰り返します。
3.ループ処理が設定される
ループ処理が設定され、Mapperコンポーネントアイコンの出力ストリームの文字が、繰り返しを表す表示(3重の囲み)に変わります。
HINT
「ループを開始」プロパティ
Mapperコンポーネントの「ループを開始」プロパティを「はい」に設定することで、ループ処理を実行できます。CSV、FixedLength、Record の各ストリーム形式では、通常 1 つのストリームに複数のレコードが含まれていますが、Mapper の「ループを開始」プロパティを「はい」にすると、次のコンポーネントに、単一レコードのみを含むストリームとして渡すようになり、レコードの数だけ処理をループさせることができます。なお、Mapper コンポーネントの代わりに、後述する RecordGetコンポーネントを使ってファイルを 1 行ずつループ処理することもできます。
ファイル単位のループを設定する(FileGet コンポーネント)
1.ループ構成にしたいフローで、FileGetコンポーネントの「ファイルパス」プロパティをワイルドカードで(複数のファイルを含むように)指定する
HINT
FileGetコンポーネントの「ループを開始」プロパティ
FileGetコンポーネントの「ファイルパス」プロパティにワイルドカード(「*」または「?」)が指定されていて、複数のファイルが処理対象になっている場合、ファイル単位でのループ処理を設定できます。FileGetの「ループを開始」プロパティが「いいえ」の場合は、すべてのファイルがまとめてストリームに出力されますが、「はい」に設定すると、FileGetコンポーネントがループの起点となって、1 ファイルずつストリームに出力されます。
2.FileGetコンポーネントの「ループを開始」プロパティで「はい」を選択する
ファイル単位でのループ処理が設定され、FileGetコンポーネントアイコンの出力ストリームの文字が、繰り返しを表す表示に変わります。
HINT
FileGetコンポーネントでループ処理を設定した場合、対象のファイルがCSVファイルであってもファイル単位のループとなり、レコード単位でのループとはなりません。CSVファイルを読み込みながらレコード単位でループさせたい場合は、RecordGetコンポーネントを使用します。
ファイルを 1 行ずつループ処理する(RecordGetコンポーネント)
1.ループ構成にしたいフローで、「ファイル」タブのRecordGetコンポーネント(「CSVまたはFixedLength形式のファイルをレコード単位で読み込みます」)を配置する
2.「ファイルパス」プロパティでループ対象のファイルを指定し、「読込み開始行」と「取得行数」を設定する
RecordGetコンポーネントがループの起点となって、ループの終了を示すコンポーネントまでの処理を繰り返し実行するよう設定できます。
HINT
RecordGetコンポーネントは常にループで処理するコンポーネントです。CSVまたはFixedLength形式のファイルに対し、全体を一度に読み込むのではなく、指定行数ごとに読み込み、ループ処理を行います。
RecordGetコンポーネントの「読込み開始行」プロパティはループ処理を開始する行、「取得行数」プロパティは 1 回のループで単位となる行数です。ファイルを 1 行ずつ処理する場合は、「取得行数」に「1」を指定します。
ループを指定回数繰り返す(LoopStart コンポーネント)
1.対象のフローを表示し、ループの起点としたい位置へ、「コントロール」タブのLoopStartコンポーネント(「指定回数ループします」)を配置する
2.「ループする回数」プロパティに、ループ処理の回数を指定する
指定した回数分だけ、ループ処理が実行されるようになります。
HINT
ループの起点となるコンポーネントとその使い方として、以下のようなものがあります。
•RDBGetコンポーネント-RDBから取得したレコード(SELECT結果)を 1 行ずつループ
•FileList コンポーネント-ファイル一覧を取得して 1 情報ずつループ
•Mapperコンポーネント-入力レコードを1行ずつループ(入力と出力のストリーム変換が必要な場合)
•RecordLoopコンポーネント-入力レコードを 1 件ずつループ(入力と出力のストリーム変換が不要な場合)
•TextSplitLoopコンポーネント-文字列を区切り文字で分割してループ
• POP3コンポーネントなど-受信メールを1通ずつループ