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.

maybe this:?

import std.algorithm, std.array, std.regex;
import std.stdio, std.file;
void main()
{
enum string[] exts = [`".txt"`, `".utf8"`, `".utf-8"`, `".TXT"`, `".UTF8"`, `".UTF-8"`]; enum string exclude = `r"/template/|biblio\.txt|categories\.txt|subjects\.txt|/toCDROM/"`;

    auto x = dirEntries("/path", SpanMode.depth)
        .filter!(`endsWith(a.name,` ~ exts.join(",") ~ `)`)
.filter!(`std.regex.match(a.name,` ~ exclude ~ `).empty`);;

    writeln(x);
}

Reply via email to