On Saturday, 2 September 2017 at 12:54:48 UTC, Nicholas Wilson wrote:
On Saturday, 2 September 2017 at 10:15:04 UTC, Vino.B wrote:
Hi All,

Can you please guide me how can i use array appender for the below piece of code

string[][] cleanFiles (string FFs, string Step) {
auto dFiles = dirEntries(FFs, SpanMode.shallow).filter!(a => a.isFile).map!(a => tuple(a.name , a.timeCreated)).array;
        foreach (d; dFiles) {
                if (Step == "dryrun")
                {
Subdata ~= [d[0], d[1].toSimpleString[0 .. 20]];
             }
                else if (Step == "run")
             {
                        remove(d[0]);
                        if (!d[0].exists)
                                Subdata ~=  [d[0], d[1].toSimpleString[0 .. 
20]];
                }
        }
        return Subdata;
}

From,
Vino.B

If you're wanting to use appender just make an appender and replace the ~= to calls to appender.put(data);

if you're trying to make it faster, consider that Step could be a bool, your return type could be string[2][], the `if (!d[0].exists)` is redundant since `remove` will throw if it fails. That leaves you with

string[2][] cleanFiles(string FFs, bool dryrun)
{
    auto dFiles = dirEntries(FFs, SpanMode.shallow)
                  .filter!(a => a.isFile)
.map!(a =>[a.name , a.timeCreated.toSimpleString[0 .. 20])
                  .array;
    if (! dryrun)
        dFiles.each!(f => f[0].remove);
}

Hi,

Thank you very much, and your idea help a lot, and the reason to use appender is for both faster and performance as my program use's many ~= function and found that using appender is the best way when compared with the ~= e.g;(MCresult.get ~= MCleanTaskData;)

void mCleanFiles (string[] Dirlist, File logF, File logE, string Step) {
 try {
 string[][] MCtext;
 string[][] MCEresult;
 auto MCresult = taskPool.workerLocalStorage(MCtext);
logF.writeln("Function \t : List of the File's which are not placed in correct Location and list those deleted");
 logF.writeln("Dir. Scanned \t :", Dirlist);
logF.writeln("************************************************************************************");
 logF.writefln("%-63s %.20s", "File Name", "CreationTime");
logF.writeln("************************************************************************************");
 foreach (string Fs; parallel(Dirlist[0 .. $], 1)) {
                        auto FFs = Fs.strip;
                        auto MCleanTask = task(&cleanFiles, FFs, Step);
                        MCleanTask.executeInNewThread();
                        auto MCleanTaskData = MCleanTask.workForce;
                        MCresult.get ~= MCleanTaskData;
                }
                foreach(i; MCresult.toRange)
logF.writefln("%(%-(%-63s %)\n%)", i.sort!((a,b) => a[0] < b[0]).uniq);
logF.writeln("************************************************************************************");
} catch (Exception e) { logE.writeln(e.msg); }
}

From,
Vino.B

Reply via email to