Elsewhere I tell why predicates are important to use, show how to find all predicates in Mathematica including ones not suffixed with "Q", and create ones of your own to test numerical expressions. Here I cover predicates for testing Strings, and create some tests for file types, as judged by their extensions. Note that FileExtension does not capture the period before the extension.
Equal (==) and SameQ (===) are valid predicates for Strings as well as numerics, and work fine for simple applications.
In[206]:= uncusFileQ@fileName_String := FileExtension@fileName == "unc"
In[207]:= uncusFileQ@"afile.unc"
Out[207]= True
In[208]:= uncusFileQ@"afile.txt"
Out[208]= False
In[209]:= textFileQ@fileName_String := FileExtension@fileName == "txt"
In[215]:= textFileQ@"sampleFile.txt"
Out[215]= True
To test for two alternative file extensions is a little trickier. Since we are testing for String equivalence between String patterns, we use the general String predicate function StringMatchQ and Alternatives (|), not logical Or (||). An example is testing for HTML files, since their extensions come in .htm and .html flavors.
In[210]:= Clear@htmlFileQ;
htmlFileQ@fileName_String := StringMatchQ[FileExtension@fileName, "html" | "htm"]
In[212]:= htmlFileQ@"www.jognog.com/index.html"
Out[212]= True
In[213]:= htmlFileQ@"www.jognog.com/index.htm"
Out[213]= True
In[214]:= htmlFileQ@"www.jognog.com/sitemap.xml"
Out[214]= False
Equal (==) and SameQ (===) are valid predicates for Strings as well as numerics, and work fine for simple applications.
In[206]:= uncusFileQ@fileName_String := FileExtension@fileName == "unc"
In[207]:= uncusFileQ@"afile.unc"
Out[207]= True
In[208]:= uncusFileQ@"afile.txt"
Out[208]= False
In[209]:= textFileQ@fileName_String := FileExtension@fileName == "txt"
In[215]:= textFileQ@"sampleFile.txt"
Out[215]= True
To test for two alternative file extensions is a little trickier. Since we are testing for String equivalence between String patterns, we use the general String predicate function StringMatchQ and Alternatives (|), not logical Or (||). An example is testing for HTML files, since their extensions come in .htm and .html flavors.
In[210]:= Clear@htmlFileQ;
htmlFileQ@fileName_String := StringMatchQ[FileExtension@fileName, "html" | "htm"]
In[212]:= htmlFileQ@"www.jognog.com/index.html"
Out[212]= True
In[213]:= htmlFileQ@"www.jognog.com/index.htm"
Out[213]= True
In[214]:= htmlFileQ@"www.jognog.com/sitemap.xml"
Out[214]= False
Hey, thanks for the blog. Much obliged.
ReplyDeleteMathematica