On Monday, 11 December 2017 at 15:33:08 UTC, Vino wrote:
On Monday, 11 December 2017 at 15:15:47 UTC, Biotronic wrote:
On Monday, 11 December 2017 at 14:52:35 UTC, Vino wrote:
Example Program and Output

import std.algorithm: filter, map, sort;
import std.container.array;
import std.file: SpanMode, dirEntries, isDir ;
import std.range: chain;
import std.stdio: writefln;
import std.typecons: Tuple, tuple;

void main () {
auto FFs = Array!(string)("C:\\Temp\\BACKUP", "C:\\Temp\\EXPORT", "C:\\Temp\\PROD_TEAM");
int AgeSize = 2;
foreach(d; FFs[]) {
auto dFiles = Array!(Tuple!(string, string))(dirEntries(d, SpanMode.shallow).filter!(a => a.isDir).map!(a => tuple(a.name, a.timeCreated.toSimpleString[0 .. 20]))); writefln("%(%-(%-63s %s %)\n%)", chain(dFiles[]).sort!((a,b) => a[0] > b[0]));
}
}

You're somewhat close. You're sorting based on the 0th element of your tuples, while you should sort on the 1st. Something like this:

import std.algorithm: filter, map, sort;
import std.array : array;
import std.file: SpanMode, dirEntries, isDir ;
import std.range: join;
import std.stdio: writefln;
import std.typecons: tuple;

void main () {
    auto folders =  ["D:\\Dev"];

    auto sorted = folders
        .map!(a => dirEntries(a, SpanMode.shallow))
        .join
        .filter!(a => a.isDir)
.map!(a => tuple(a.name, a.timeCreated.toSimpleString[0 .. 20]))
        .array
        .sort!((a,b) => a[1] > b[1]);

    writefln("%( %( %-63s %s %) \n%)", sorted);
}

--
  Biotronic

Hi,

I tired that but no luck, below is the output, in your code you have one folder "auto folders = ["D:\\Dev"];" if you have multiple folder then output is not sorted.

C:\Temp\BACKUP\dir2 2017-Sep-09 22:44:11 C:\Temp\BACKUP\dir1 2017-Sep-06 16:06:42 C:\Temp\BACKUP\DND3 2017-Sep-05 14:31:00 C:\Temp\BACKUP\t1 2017-Dec-11 04:10:02 C:\Temp\BACKUP\dir3 2017-Dec-10 06:56:07 C:\Temp\EXPORT\DND6 2017-Sep-05 14:31:00 C:\Temp\PROD_TEAM\DND1 2017-Sep-05 14:31:01

Are you sure that's the output from my code? Let's step through the code:

    // Iterating over folders:
    folders
    // Create a range where each element is a range of DirEntry
    // in the given folder.
    .map!(a => dirEntries(a, SpanMode.shallow))
// Join these together to a single range of DirEntry instead of
    // a range-of-ranges-of-DirEntry.
    .join
    // Remove anything that's not a folder.
    .filter!(a => a.isDir)
    // Grab the information we actually care about.
    .map!(a => tuple(a.name, a.timeCreated))
    // Enumerate to an array, so we can sort it.
    .array
    // Sort this array by the second tuple element (timeCreated).
    .sort!((a,b) => a[1] > b[1]);

If this code does not do what you're asking, there's a bug outside of the code, probably in the standard library.

If instead you are invoking the program multiple times with a single folder each time, the output you describe is to be expected.

Apart from that, I'm not sure what could be wrong.

--
  Biotronic

Reply via email to