1000件を超える繰り返しの中で条件分岐したい

いつもお世話になっております。

1000件を超えるデータテーブルの繰り返しについて以前こちらでお伺いした際、
繰り返しデータテーブルの各行は処理が遅くなり適さないということ、
また、InvokeCodeで行う方法を教えて頂きました。

今回、1行ずつ、今日の日付とデータテーブルの任意の列にある日付を比較し、今日の日付以前であれば処理があり、
そうでなければ、処理をスルーする内容を希望しております。

以前お伺いしたInvokeCodeでは、条件分岐の方法が分からず、
どの様に対応したらよいか教えて頂きたく
よろしくお願いいたします。

こんにちは

処理の内容によって、記述の仕方が変わってきます。
とくにアクティビティを呼び出す必要がある場合は、それに応じた呼び出しが必要ですし、これが難しい場合もあります。

可能であればもう少し具体的な例を提示いただく方が良いかと思います。
ちなみに1000件程度であれば、処理にもよりますが、通常実行でも問題ないレベルである場合が多いかと思います。

1 Like

いつもありがとうございます。
処理対象は2万行となります。

データテーブルを1行ずつ見て行き、
指定列①の日付が今日より過去であれば、指定列②へ過去と記入
処理はそれだけになりますが、繰り返す行数が多くて困っていました。

こんにちは

このケースでは条件分岐は不要です。以下実装例です。

dt.AsEnumerable.Where(Function(r) DateTime.Parse(r(0).ToString).Date < DateTIme.Today).ToList().ForEach(
Sub(r) 
	r(1)="過去"
End Sub
)

Sample20220606-2.zip (2.7 KB)

1 Like

いつもありがとうございます。
以下のエラーとなりました。
日付にハイフンがあるので読み取れないということでしょうか。
image

こんにちは

まずエラーの詳細を確認してください。デバッグ実行で、エラーで停止時に$exceptionDetailの内容を
確認してみてください。

日付の内容が怪しいようでしたら、InvokeCodeの前に、例えばWriteLineアクティビティで

dt.Rows(0)(1).ToString

で日付がどのように表示されるか確認してみてください

1 Like

ありがとうございます。

日付が怪しいようです。
ローカル値の中身もハイフン付きのままでした。
image

繰り返しの前に、一度、-を/へ置換したら良いでしょうか。

こんにちは

セパレーターは"-"でも問題ないと思います。

途中に空欄や日付として不正な文字はありませんでしょうか?そのようなものを除外するために以下お試しください。

Dim temp As DateTime
dt.AsEnumerable.Where(Function(r) DateTime.TryParse(r(0).ToString,temp) AndAlso DateTime.Parse(r(0).ToString).Date < DateTIme.Today).ToList().ForEach(
Sub(r) 
    r(1)="過去"
End Sub
)
1 Like

ありがとうございます。
お陰様で無事に作成できました。

いつも本当にありがとうございます。

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