Csvから一括で行を削除したい

csvデータ内で、一致するデータを一括で削除し元データへ反映させたいです。

一行ずつであればできるのですが、データ量が多いためlinqなどで一度に削除できる方法を模索しています。
一致するデータのデータテーブルへの抽出まではできるのですが、それをどのように元のcsvファイルに反映させれば良いかがわかりません。

具体的には、以下のようなcsvファイルで、flg=1のデータをcsvファイルから削除したいです。
スクリーンショット 2022-07-21 171222

宜しくお願い致します

こんにちは

一度DataTableに変換して処理するということでしょうか?
そうであれば、FIlterDataTableアクティビティで削除できると思います。
あるいはLINQを使いたいのであれば、例えば以下になります。

dt = dt.AsEnumerable.Where(Function(r) r("flg").ToString()<>"1").CopyToDataTable()

(ただし結果が空の場合に例外となるので、その可能性がある場合は、もう少し工夫が必要です)

質問の仕方が悪かったのですが、datatableとして処理をするわけではなく、あくまでcsvファイルから対象のデータを削除して保存するのが目的となります。

こんにちは

前提がやや曖昧ですが、CSVファイルの内容全体を一旦文字列として読み込むということでしょうか?
そうであれば、例えば以下になります

yourString = String.Join(vbCrLf,yourString.Split(vbcrlf.ToCharArray,StringSplitOptions.RemoveEmptyEntries).Where(Function(s) not s.EndsWith(",1")))

それをどのように元のcsvファイルに戻せば良いかと言うのが質問内容となります。

csvファイルから該当データが削除されて元のcsvに上書き保存できれば、中間処理はdatatableでもテキストでも良く、特に指定は無いです。

こんにちは

DataTableを介して処理を行うなら

ReadCSVアクティビティで対象ファイルを読み込んで、処理、結果をWriteCSVアクティビティで書き込みます。

文字列を介しての処理の場合は、ReadTextFileアクティビティでファイルを文字列として読み込み
文字列を処理したのちに、WriteTextFileアクティビティでファイルに出力します。

image

いずれの場合も文字コードの指定が必要な場合がありますので、その点は注意ください。
(多くの場合は UTF-8 か shift_jis になります)

1 Like

ありがとうございます。
これは、csvの中身を削除などをしなくてもそのまま上書きで良いのでしょうか?

こんにちは

ファイル自体を上書きしますので、特に処理は不要です。