On Tuesday, 27 November 2012 at 19:40:56 UTC, Charles Hixson wrote:
Is there a better way to do this? (I want to find files that match any of some extensions and don't match any of several other strings, or are not in some directories.):

 import std.file;

...

 string  exts  =  "*.{txt,utf8,utf-8,TXT,UTF8,UTF-8}";
string[] exclude = ["/template/", "biblio.txt", "categories.txt",
        "subjects.txt",  "/toCDROM/"]

 int  limit  =  1
 //  Iterate  a  directory  in  depth
foreach (string name; dirEntries(sDir, exts, SpanMode.depth))
 {  bool  excl  =  false;
    foreach  (string  part;  exclude)
    {  if  (part  in  name)
       {  excl  =  true;
          break;
       }
    }
    if  (excl)  break;
etc.

You could replace the inner loop with somehting like:

bool excl = exclude.any!(part => name.canFind(part));

There may be even some easier way to do it, take a look at std.algorithm.

Reply via email to