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