データテーブルの双方方向の突合処理

データサンプル
サンプルcsv.zip (333 Bytes)

上記画像は、サンプルcsv内の0701data.csvと0708data.csvを便宜上並べたものになります。
「システム操作」列は、このように転記するのではなく、システム上の操作で削除や更新等の作業を行いたいデータを表しています。

やりたいこと
2つのファイルの双方向の差分を判断
・商品名Cは0708data.csvにはないため、システム操作で削除を実施
・商品名Bは0701data.csv取得日以降に更新があったためシステム上で更新作業を実施→データ更新日がないデータもあるため、日付で見るのではなく同一商品名で一致していない列があるかどうかで更新があったか判断する必要がある
・商品名Dは0701data.csvにはないため、システム上に新規登録を実施

特に2つ目に挙げたデータの扱い方がわからず、上記やりたいことを実現するためのフローをご教示いただけないでしょうか。

これが似たような回答ですかねぇ。。。サンプルロボもあります。

ありがとうございます。
こちらの投稿は質問前に拝見しておりましたが、データテーブルの結合を使用するのはなぜなのでしょうか?
今回取得データのほうもまた、次回に取得したデータとの比較があるため生データのまま残しておきたいです。

投稿内容で抜けてしまっていましたが、商品名Aも一致はしていますが何もしないわけではなくシステム側の操作はしなければいけないため、突合した結果差分を抽出するのではなく、処理の分岐条件のためだけになります。
(こちらの内容は質問内容に追記します)

「やりたいこと」の説明に齟齬があったためこちらに補足いたします。

・前回取得データは、削除するデータのみが処理対象
・今回取得データは、一致不一致に関係なく全件が処理対象→しかしデータによって処理内容を変えるため、条件判断が前回取得データとの比較になる
・実際のcsvデータの列は20列ほど項目があり、そのすべての列を1行ずつ突合させる必要があります。その過程で、突合させる相手がいなければ削除、商品名は一致するがその他の列の内容が一致しなければ更新等になります。

という状況です。言葉足らずの投稿で申し訳ございません。

データテーブルの結合は「頭に描くイメージ」が少し難しいです。
まずは、シンプルにループで回すでも良いかと思います。

1)今回データの行ループ
・商品名が一致する行が「前回」データにあるか?
 ・あるなら、データ更新日を比較
   ・今回データが前回データより「未来」の日付=<判定結果:更新対象のデータ>
   ・今回データが前回データと「同じまたは過去」の日付=<判定結果:何もしないデータ>
 ・ないなら、<判定結果:追加対象のデータ>
・上記の判定結果で処理する(新規登録・更新)

2)前回データの行ループ
 ・商品名が一致する行が「今回」データに無いか?
  ・ないなら、<判定結果:削除対象のデータ>として削除

.NET構文(LINQやINTERSECT等)でも工夫すれば出来ます。が、技術的に難解になりがちです。
上記のようなシンプル実装では物足りない(または速度が遅くて話にならない)場合は、.Net構文で頑張るでも良いと思います。

説明がうまくできていないため、新しく以下のトピックを立て直しました。こちらは解決済にさせていただきます。(削除方法がわかりませんでした)

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.