On Monday, 4 December 2017 at 10:46:03 UTC, rikki cattermole wrote:
On 04/12/2017 10:36 AM, Vino wrote:
Hi Rikki,

  Thank you very much, I tired the above code and it is working, so another help on the same topic. IF my function (First) of below type when who do we define the Mid function

Array!(Tuple!(string, string))  First(string Ftext)

Tried the below  but no luck
void mid(Array!(Tuple!(string, string)) function(string) func, string mtext) {
      func(mtext);
}

Looks valid.

mid(&First, "Str");

So error + full source please.

Hi Rikki,

 The original program is as below

Full Program:
import core.stdc.stdlib: exit;
import std.algorithm: all, among, canFind, each, endsWith, filter, map, setDifference, sort, uniq, reduce;
import std.array: join;
import std.container.array;
import std.conv: to;
import std.datetime.systime: Clock, days, SysTime;
import std.file: dirEntries, exists, getcwd, isFile, mkdir, remove, rmdirRecurse, SpanMode;
import std.format: format;
import std.net.isemail;
import std.parallelism: parallel, taskPool;
import std.path: baseName, dirName, globMatch, isValidFilename, isValidPath;
import std.process: execute;
import std.range: chain, chunks, empty, zip;
import std.stdio: File, writefln, writeln;
import std.string: chomp, chop, isNumeric, split, strip;
import std.typecons: tuple, Tuple;
import std.uni: isAlpha, isWhite, toLower;

Array!(Tuple!(string, string)) coAgedDirClean (string FFs, string Step, int DirAged) { auto dFiles = Array!(Tuple!(string, string))(dirEntries(FFs, SpanMode.shallow).filter!(a => a.isDir && !globMatch(a.baseName, "*DND*") && a.timeCreated < dtAges(DirAged)).map!(a => tuple(a.name, a.timeCreated.toSimpleString[0 .. 20]))); if (Step == "run") { dFiles.each!(f => f[0].rmdirRecurse); } return dFiles;
}

void ptProcessFiles() (Array!string Dirlst, Array!(Tuple!(string, string)) function(string, string, int) coRoutine, File logF, File logE, string Step, int Aged) {
Array!(Tuple!(string, string)) PFtext, PFdata;
auto PFresult = taskPool.workerLocalStorage(PFtext);
try {
foreach (string FFs; parallel(Dirlst[0 .. $],1)) { PFresult.get ~= coRoutine(FFs.strip, Step, Aged); } logF.writeln("Function \t : Delete of the Files which are not placed in correct Location and list those deleted");
                logF.writeln("Dir. Scanned \t :", Dirlst[]);
                
logF.writeln("************************************************************************************");
                logF.writefln("%-63s %.20s", "File Name", "CreationTime");
                
logF.writeln("************************************************************************************");
                foreach(i; PFresult.toRange)  { PFdata ~= i[][]; }
if (!PFdata.empty) { logF.writefln("%(%-(%-63s %s %)\n%)", PFdata[].sort!((a,b) => a[0] < b[0])); }
                
logF.writeln("************************************************************************************");
}       catch (Exception e) { logE.writeln(e.msg); }
}

SysTime dtAges (int Ages) {
        auto ct2 = Clock.currTime();
        auto st2 = ct2 + days(-Ages);
        return st2;
}

void main () {
auto CleanDirlst = "C:\\Temp\\BACKUP, C:\\Temp\\EXPORT";
auto logF = File("C:\\Users\\bheev1\\Desktop\\Current\\Script\\D\\Logs\\Rlog.log", "a"); auto logE = File("C:\\Users\\bheev1\\Desktop\\Current\\Script\\D\\Logs\\Elog.log", "a");
string Step = "dryrun";
int DirAged = 1;
ptProcessFiles(CleanDirlst, &coAgedDirClean, logF, logE, Step, DirAged);
}

Error:

FunTest.d(52): Error: template FunTest.ptProcessFiles cannot deduce function from argument types !()(string, Array!(Tuple!(string, string)) function(string FFs, string Step, int DirAged), File, File, string, int), candidates are: FunTest.d(24): FunTest.ptProcessFiles()(Array!string Dirlst, Array!(Tuple!(string, string)) function(string, string, int) coRoutine, File logF, File logE
, string Step, int Aged)
Failed: ["dmd", "-v", "-o-", "FunTest.d", "-I."]

From,
Vino.B

Reply via email to