1
0
mirror of https://github.com/sasjs/core.git synced 2026-01-15 12:30:06 +00:00

feat: mp_deletefolder tests, closes #90

This commit is contained in:
Allan Bowe
2021-11-26 16:20:13 +00:00
parent aff29427e2
commit 9e84e47563
4 changed files with 109 additions and 41 deletions

View File

@@ -4,51 +4,66 @@
@details Will delete all folder content (including subfolder content) and @details Will delete all folder content (including subfolder content) and
finally, the folder itself. finally, the folder itself.
Usage:
%let rootdir=%sysfunc(pathname(work))/demo;
%mf_mkdir(&rootdir)
%mf_mkdir(&rootdir/subdir)
%mf_mkdir(&rootdir/subdir/subsubdir)
data "&rootdir/subdir/example.sas7bdat";
run;
%mp_deletefolder(&rootdir)
@param path Unquoted path to the folder to delete. @param path Unquoted path to the folder to delete.
<h4> SAS Macros </h4> <h4> SAS Macros </h4>
@li mf_getuniquename.sas
@li mf_isdir.sas
@li mp_dirlist.sas @li mp_dirlist.sas
<h4> Related Macros </h4>
@li mp_deletefolder.test.sas
**/ **/
%macro mp_deletefolder(folder); %macro mp_deletefolder(folder);
%let rc = %sysfunc(filename(fid,&folder)); /* proceed if valid directory */
%if &rc %then %do; %if %mf_isdir(&folder)=1 %then %do;
%put rc = &rc ;
%put %sysfunc(sysmsg()); /* prep temp table */
%end; %local tempds;
%else %do; %let tempds=%mf_getuniquename();
%let rc = %sysfunc(fexist(&fid));
%if not &rc %then %put Folder does not exist. ; /* recursive directory listing */
%else %if &rc %then %do; %mp_dirlist(path=&folder,outds=work.&tempds, maxdepth=MAX)
%mp_dirlist(path=&folder,outds=mp_dirlist);
%let dsid = %sysfunc(open(mp_dirlist)); /* sort descending level so can delete folder contents before folders */
%let nobs = %sysfunc(attrn(&dsid,nobs)); proc sort data=work.&tempds;
%let rc = %sysfunc(close(&dsid)); by descending level;
%if &nobs %then %do; run;
proc sort data=mp_dirlist;
by descending level; /* ensure top level folder is removed at the end */
run; proc sql;
data _null_; insert into work.&tempds set filepath="&folder";
set mp_dirlist;
rc=filename('delfile',filepath); /* delete everything */
rc=fdelete('delfile'); data _null_;
if rc then do; set work.&tempds end=last;
put 'rc = ' rc; length fref $8;
filepath=trim(filepath); rc=filename(fref,filepath);
put 'Delete of ' filepath 'failed.'; rc=fdelete(fref);
end; if rc then do;
run; msg=sysmsg();
/* tidy up */ put "&sysmacroname:" / rc= / msg= / filepath=;
proc sql; end;
drop table mp_dirlist; rc=filename(fref);
quit; run;
%end;
%let rc=%sysfunc(fdelete(&fid)); /* tidy up */
%if &rc %then %do; proc sql;
%put rc = &rc; drop table work.&tempds;
%put %sysfunc(sysmsg());
%end;
%end;
%end; %end;
%else %put &sysmacroname: &folder: is not a valid / accessible folder. ;
%mend mp_deletefolder; %mend mp_deletefolder;

View File

@@ -51,6 +51,9 @@
<h4> SAS Macros </h4> <h4> SAS Macros </h4>
@li mp_dropmembers.sas @li mp_dropmembers.sas
<h4> Related Macros </h4>
@li mp_dirlist.test.sas
@version 9.2 @version 9.2
@author Allan Bowe @author Allan Bowe
**/ **/
@@ -71,7 +74,7 @@ data;run;
/* drop main (top) table if it exists */ /* drop main (top) table if it exists */
%if &level=0 %then %do; %if &level=0 %then %do;
%mp_dropmembers(&outds, libref=WORK) %mp_dropmembers(%scan(&outds,-1,.), libref=WORK)
%end; %end;
data &out_ds(compress=no data &out_ds(compress=no

View File

@@ -0,0 +1,50 @@
/**
@file
@brief Testing mp_deletefolder.sas macro
<h4> SAS Macros </h4>
@li mp_deletefolder.sas
@li mf_mkdir.sas
@li mf_nobs.sas
@li mp_assert.sas
@li mp_dirlist.sas
**/
/**
* make a directory structure
*/
%let root=%sysfunc(pathname(work))/top;
%mf_mkdir(&root)
%mf_mkdir(&root/a)
%mf_mkdir(&root/b)
%mf_mkdir(&root/a/d)
%mf_mkdir(&root/a/e)
%mf_mkdir(&root/a/e/f)
data "&root/a/e/f/ds1.sas7bdat";
x=1;
run;
%mp_dirlist(path=&root, outds=myTable, maxdepth=MAX)
%mp_assert(
iftrue=(%mf_nobs(work.mytable)=6),
desc=Temp data successfully created,
outds=work.test_results
)
%mp_deletefolder(&root/a)
%mp_dirlist(path=&root, outds=work.myTable2, maxdepth=MAX)
data _null_;
set work.mytable2;
putlog (_all_)(=);
run;
%mp_assert(
iftrue=(%mf_nobs(work.mytable2)=1),
desc=Subfolder and contents successfully deleted,
outds=work.test_results
)

View File

@@ -1,6 +1,6 @@
/** /**
@file @file
@brief Testing mp_ds2cards.sas macro @brief Testing mp_dirlist.sas macro
<h4> SAS Macros </h4> <h4> SAS Macros </h4>
@li mf_nobs.sas @li mf_nobs.sas
@@ -41,7 +41,7 @@ run;
outds=work.test_results outds=work.test_results
) )
%mp_dirlist(path=&root, outds=myTable3, maxdepth=0) %mp_dirlist(path=&root, outds=work.myTable3, maxdepth=0)
%mp_assert( %mp_assert(
iftrue=(%mf_nobs(work.mytable3)=2), iftrue=(%mf_nobs(work.mytable3)=2),