On Friday, 8 September 2017 at 23:48:14 UTC, Ali Çehreli wrote:
On 09/08/2017 11:21 AM, Vino.B wrote:

> One final help on how to print the below
> output , just in case if this issue is fixed in next release,
>
> Output:
> [Tuple!string("C:\\Temp\\sapnas2\\BACKUP\\dir1"),
> Tuple!string("C:\\Temp\\sapnas2\\BACKUP\\DND5")][34, 4]
>
> Required output:
> C:\\Temp\\sapnas2\\BACKUP\\dir1                 34
> C:\\Temp\\sapnas2\\BACKUP\\DND5                  4

std.algorithm.zip can help:

void main () {
    auto results = coSizeDirList();
    auto dirs = results[][0];            // A range
    auto sizes = results[][1];           // Another range
auto combined = zip(dirs, sizes); // Corresponding elements linked

    foreach (result; combined) {
auto dir = result[0]; // The element from the first range auto size = result[1]; // The element from the second range
        writefln("%-40s %20s", dir, size);
    }
}

Ali

Hi Ali,

Thank you very much, as stated by you i used the auto function and now i am get the output without any warnings, but this do not help me in my overall program, meaning, when i call this sub function from the main thread function program it is not working as expected and throwing an error.

Sub Function:

auto coSizeDirList (string FFs, int SizeDir) {
        ulong subdirTotal;
        ulong subdirTotalGB;
        Array!string Subdir;
        Array!ulong Subsize;
        //Tuple!((Array!string), (Array!string)) Result;
auto dFiles = Array!string ((dirEntries(FFs, SpanMode.shallow).filter!(a => a.isDir))[].map!(a => a.name));
    foreach (d; dFiles[]) {
auto SdFiles = Array!ulong(dirEntries(d, SpanMode.depth).map!(a => a.size));
                                foreach(f; SdFiles[]) { subdirTotal += f; }
subdirTotalGB = (subdirTotal/1024/1024); { Subdir ~= d; Subsize ~= subdirTotalGB; }
                                if (subdirTotalGB > SizeDir)
                                subdirTotal = 0;
                    }
                        return tuple (Subdir[], Subsize[]);

}

Main Thread function :
void ptSizeDirList (string[] SizeDirlst, int SizeDir) {
 try {
 //Array!string MStext;
string[][] MStext; // Getting Error on this line, while trying to change it to auto;
 auto MSresult = taskPool.workerLocalStorage(MStext);
logF.writeln("Function \t : List the Folder whose Size greater then ", SizeDir, " GB");
 logF.writeln("Dir. Scanned \t :", SizeDirlst);
logF.writeln("************************************************************************************");
 logF.writefln("%-63s %.20s", "File Name", "Size (GB)");
logF.writeln("************************************************************************************");
 foreach (string Fs; parallel(SizeDirlst[0 .. $], 1)) {
                        auto FFs = Fs.strip;
                        auto MSizeDirList = task(&coSizeDirList, FFs, SizeDir);
                        MSizeDirList.executeInNewThread();
                        auto MSizeDirListData = MSizeDirList.workForce;
                        MSresult.get ~= MSizeDirListData;
                }
                foreach(i; MSresult.toRange)
                if (!i.empty) {
writefln("%(%-(%-63s %)\n%)", i[].sort!((a,b) => a[0] < b[0]).uniq); }
                        
writeln("************************************************************************************");
} catch (Exception e) { writeln(e.msg); }
}

void main () {
string SizeDirlst = "C:\\Temp\\sapnas2\\BACKUP";
int SizeDir = 1;

ptSizeDirList(SizeDirlst, SizeDir);
}

Error:
Error: no identifier for declarator MStext
Deprecation: use { } for an empty statement, not ;

Reply via email to