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