diff --git a/all.sas b/all.sas index 61ea9c7..17800cd 100644 --- a/all.sas +++ b/all.sas @@ -1152,6 +1152,38 @@ Usage: %sysevalf(%superq(param)=,boolean) +%mend;/** + @file + @brief Checks whether a path is a valid directory + @details + Usage: + + %let isdir=%mf_isdir(/tmp); + + With thanks and full credit to Andrea Defronzo - https://www.linkedin.com/in/andrea-defronzo-b1a47460/ + + @param path full path of the file/directory to be checked + + @return output returns 1 if path is a directory, 0 if it is not + + @version 9.2 +**/ + +%macro mf_isdir(path +)/*/STORE SOURCE*/; + %local rc did is_directory fref_t; + + %let is_directory = 0; + %let rc = %sysfunc(filename(fref_t, %superq(path))); + %let did = %sysfunc(dopen(&fref_t.)); + %if &did. ^= 0 %then %do; + %let is_directory = 1; + %let rc = %sysfunc(dclose(&did.)); + %end; + %let rc = %sysfunc(filename(fref_t)); + + &is_directory + %mend;/** @file @brief Returns physical location of various SAS items diff --git a/base/mf_isdir.sas b/base/mf_isdir.sas new file mode 100644 index 0000000..6fa9add --- /dev/null +++ b/base/mf_isdir.sas @@ -0,0 +1,33 @@ +/** + @file + @brief Checks whether a path is a valid directory + @details + Usage: + + %let isdir=%mf_isdir(/tmp); + + With thanks and full credit to Andrea Defronzo - https://www.linkedin.com/in/andrea-defronzo-b1a47460/ + + @param path full path of the file/directory to be checked + + @return output returns 1 if path is a directory, 0 if it is not + + @version 9.2 +**/ + +%macro mf_isdir(path +)/*/STORE SOURCE*/; + %local rc did is_directory fref_t; + + %let is_directory = 0; + %let rc = %sysfunc(filename(fref_t, %superq(path))); + %let did = %sysfunc(dopen(&fref_t.)); + %if &did. ^= 0 %then %do; + %let is_directory = 1; + %let rc = %sysfunc(dclose(&did.)); + %end; + %let rc = %sysfunc(filename(fref_t)); + + &is_directory + +%mend; \ No newline at end of file