Different Output after each execution
Moritz Maxeiner via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Aug 18 09:53:46 PDT 2017
On Friday, 18 August 2017 at 15:46:13 UTC, Vino.B wrote:
> On Friday, 18 August 2017 at 11:24:24 UTC, Moritz Maxeiner
> wrote:
>> On Friday, 18 August 2017 at 10:50:28 UTC, Moritz Maxeiner
>> wrote:
>>> On Friday, 18 August 2017 at 10:06:04 UTC, Vino wrote:
>>>> On Friday, 18 August 2017 at 08:34:39 UTC, ikod wrote:
>>>>> On Friday, 18 August 2017 at 08:00:26 UTC, Vino.B wrote:
>>>>>> Hi All,
>>>>>>
>>>>>> I have written a small program to just list the
>>>>>> directories, but when i run the program each time i am
>>>>>> getting different output, hence request you help, below is
>>>>>> the code
>>>>>>
>>>>>> [...]
>>>>>
>>>>> Do you expect some strict execution order when you run
>>>>> 'parallel' foreach?
>>>>
>>>> Yes, the order of execution should be the same as the order
>>>> of the directory provided to scan.
>>>
>>> Then you cannot parallelize the work[1], use:
>>>
>>> ---
>>> auto dFiles = dirEntries(Dirlist[i],
>>> SpanMode.shallow).filter!(a => a.isDir);
>>> foreach (d; dFiles)
>>> {
>>> writefln("%-63s %.20s", d,
>>> d.timeCreated().toSimpleString);
>>> }
>>> ---
>>>
>>> [1] You cannot parallelize computations that depend on each
>>> other, which you make yours do by requiring a specific order
>>> of execution.
>>
>> Small correction: You *could* parallelize the conversion to
>> string `d.timeCreated().toSimpleString`, but then you'd need
>> to merge the resulting sets of strings generated in each work
>> unit to regain the original order.
>
> Hi,
> Thank you very much, it worked and need one more help, with
> the below line i am able to list all directories which contains
> the pattern *DND*, now i need the revers, list all the
> directories expect those containing the pattern *DND*.
>
> dirEntries(i, SpanMode.shallow).filter!(a => a.isDir).filter!(a
> => globMatch(a.baseName, "*DND*"))
Negating the filtering rule should yield you the inverse set:
---
dirEntries(i, SpanMode.shallow).filter!(a => a.isDir).filter!(a
=> !globMatch(a.baseName, "*DND*"))
---
Also I don't see a reason to use two filter invocations here, you
can join the conditions to a single filter (same for the
unnegated one):
---
dirEntries(i, SpanMode.shallow).filter!(a => a.isDir &&
!globMatch(a.baseName, "*DND*"))
---
More information about the Digitalmars-d-learn
mailing list