質問
ストレージ内に複数のファイル名プレフィックスのファイルが混在している場合、特定のプレフィックスで始まるファイルの中から更新日時が最も古いファイルを取得するにはどうすればよいですか?
回答
「ファイル名一覧取得処理」コンポーネントとマッピングロジックを組み合わせることで実現できます。実装方法は要件に応じて複数の選択肢があります。
※以下はあくまで一例となりますので、お客様の要件に合わせて適宜調整してください。
## 方法1:「二つのキーによるソート」ロジックを使用する方法(7手順)
ファイル/ディレクトリが混在している場合に有効な方法です。
1. 「ファイル名一覧取得処理」コンポーネントを配置し、ファイル情報を取得したいフォルダを指定する
2. 「ファイル名一覧取得処理」で取得したデータを入力データに指定したマッピングを追加し、[繰り返し] > [基本] > 「二つのキーによるソート」ロジックを配置する
3. 入力データより「type」、「updated」要素をソートするキーの対象とし、ロジックのプロパティにてそれぞれ「type」:降順、「updated」:昇順 のソート方法を設定する
※一つ目のキー「type」要素を降順でソートすることでファイル/ディレクトリの並び替えをおこない、次点の優先度のキー「updated」要素を昇順とすることで古い更新日時順として並び替えます
4. 出力データのスキーマを「ファイル名一覧取得処理」から読み取り、マッピングを設定する
5. もう一つマッピングを追加し、手順2~4で作成したマッピングを入力データに指定する
6. 繰り返しロジックを配置せず、マッピングを設定することで、更新日時が一番古いファイルの情報を取得する
※「XMLデータログ出力」コンポーネントにデータを出力するか、スクリプト変数にファイルデータを代入することができます
7. 取得した更新日時が一番古いファイルの情報を元に、任意のコンポーネント等で活用する
## 方法2:「条件による値の抽出」と「キーによるソート」を組み合わせる方法(11手順)
特定のファイル名プレフィックスでフィルタリングしたい場合に有効な方法です。
1. 「ファイル名一覧取得処理」コンポーネントを配置し、ファイル情報を取得したいフォルダを指定する
2. 「マッピング」コンポーネントを二つ、「変数代入」コンポーネントを一つ配置する
3. 一つ目のマッピングにて、[繰り返し] > [条件指定] > 「条件による値の抽出」ロジックを配置する
4. [条件] > [文字列] > 「同じ」ロジックを配置し、入力データの「type」属性と単一文字列定数「file」を入力する
5. [条件] > [文字列] > 「始まりが同じ」ロジックを配置し、比較値に対象のプレフィックス(例:「test01」)を設定する
6. [条件] > [真偽] > 「AND演算」ロジックを配置し、二つの条件を入力して「条件による値の抽出」ロジックの条件値とする
7. 上記マッピングを実装することで、typeがfile、かつ特定のファイル名のデータを一つ目のマッピングで抽出する
8. 二つ目のマッピングを開き、繰り返しロジックを配置せず、[繰り返し] > [基本] > 「キーによるソート」ロジックを配置して「updated」要素を昇順にソートする
※事前にtypeがfileのデータを抽出しているため、「二つのキーによるソート」ロジックは不要です
9. ファイル名を格納するための文字列型のスクリプト変数を作成する
10. 変数代入コンポーネントを開き、二つ目のマッピングコンポーネントの「name」属性からスクリプト変数に代入する
11. ファイル操作コネクターから「移動処理」コンポーネントを配置し、移動元と移動先のファイル名にスクリプト変数を指定する
[重要な注意事項]
• 手順8(方法2)では、繰り返しロジックを配置せずにマッピングを設定してください。これにより最初の要素(最も古いファイル)のみが取得されます
• 「始まりが同じ」ロジックは、「条件による値の抽出」ロジックの条件として使用する必要があります
• 異なるプレフィックスのファイルを取得したい場合は、方法2の手順3から11を繰り返して実装してください
コメント
0件のコメント
記事コメントは受け付けていません。