質問
更新情報が格納されたCSVファイルから変更対象の項目のみを抜き出し、ベースとなるファイルと比較を行った上で、新たに1つのファイルに書き出す処理を作成したいです。
具体的には、以下のようなベースファイル(マスタ)があり、
A,B,C,D,E
あ,い,う,え,お
か,き,く,け,こ
さ,し,す,せ,そ
以下のような入力ファイルがあったとき、
A,F,C,D,G
あ,さ,し,す,せ
か,ち,つ,て,こ
な,に,ぬ,ね,の
一行目(ABC...)をキーにベースファイルとの差分(上記赤字部)を比較して、以下のようなファイルを出力したいです。
A,B,C,D,E
あ,い,し,す,お
か,き,つ,て,こ
な,し,ぬ,ね,そ
また、更新情報である入力ファイルについては項目数が一定ではなく可変であるものを想定しています。
回答
構築の一例として、以下の構築を案内します。
なお前提として、[CSV読み取り処理]の[列一覧]やマッピングのスキーマなどは動的に指定することができないため、ベースとなるファイルや入力ファイルの想定されうる最大数で設定する必要があります。
■スクリプトイメージ

■処理内容
- 入力ファイルを読み取ります
- 入力ファイルの行と列を入れ替えます
- 後続の比較処理のため、行列を入れ替えた可変ファイルを一時ファイルとして書き出します
- ベースファイルを読み取ります
- ベースファイルの行と列を入れ替えます
- マッピングを行います
- マッピング後データの行と列を再び入れ替えます
- 完成ファイルを書き出します
- 処理3で作成した一時ファイルを削除します
■マッピング内容

- [CSVファイルによる置換]ロジックで、比較用の一時ファイル(入力ファイル)とベースファイルのキー項目を比較し、キーが一致する場合には一時ファイルの値を返します(一致しない場合はベースファイルのキー値が返されます)。
返す値の[値列番号]は、マッピングするスキーマのインデックスと同じものを設定してください。(例:行列入れ替え後の3列目を比較する場合、3を設定) - [条件判定による出力の切り替え]ロジックで、1の値がベースファイルのキー項目と一致しているか確認し、対応する列へ出力します。
成立時は置換が行われていない、すなわち更新データのキーが一致しなかったことを意味するため、ベースファイルの値を出力します。
逆に不成立の場合には、[CSVファイルによる置換]ロジックの値を出力します。

コメント
0件のコメント
記事コメントは受け付けていません。