Let’s say I have a batch process that executes 4 times per loop, and needs to execute a total of 9 items.
Example:
- Iteration 1 executes 4 items of 9, leaving 5 left
- Iteration 2 executes 4 times of 9, leaving 1 left
- Iteration 3 only executes 1 item because that’s all that is left.
Currently I handle it with a modulus operation:
$number_of_items = 9
$number_of_executions_per_loop = 4
For $iteration = 1 to $number_of_items Step $number_of_executions_per_loop
If $number_of_items < ($iteration * $number_of_executions_per_loop) Then
$iteration_execution_count = MOD($number_of_items,$number_of_executions_per_loop)
Else
$iteration_execution_count = $number_of_executions_per_loop
EndIf
ExecuteJobsFunction($iteration_execution_count)
Next
I am wondering if there is a cleaner way to handle these types of scenarios that I see frequently. Is there a math trick that can be done to determine how many items to execute?
1
Judging by the dollar signs sprinkled in your code, you appear to be using some extremely high level and possibly highly inefficient script, so taking a MOD()
is probably the least of your concerns, and what you do is just fine.
But if you really really want to simplify it, then you might want to consider something like the following:
number_of_items = 9
number_of_executions_per_loop = 4
For iteration = 1 to number_of_items Step number_of_executions_per_loop
iteration_execution_count = number_of_executions_per_loop
If iteration_execution_count > number_of_items - iteration Then
iteration_execution_count = number_of_items - iteration
EndIf
ExecuteJobsFunction(iteration_execution_count)
Next