Passing Function as an argument to another Function
Vino
vino.bheeman at hotmail.com
Mon Dec 4 11:05:22 UTC 2017
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
More information about the Digitalmars-d-learn
mailing list